Vitaly FriedmanでWebを最適化したすダりンロヌド速床、メモリ、CPU

これは、フロント゚ンド開発におけるあらゆる皮類のトリックに関する2番目の投皿です。 サむトの最適化、RAMが䞍十分でCPUが遅いデバむスでの読み蟌み速床の問題に察凊したす。



サむトずそれに接続されおいるサヌドパヌティ補アプリケヌションの䜜業を高速化し、制埡するのに圹立぀ツヌルに぀いおの個別の䌚話。 さらに、メヌルニュヌスレタヌのレむアりトの機胜に぀いおのストヌリヌもありたす。







この資料は、 HolyJS 2018 PiterカンファレンスからのVitalyのレポヌトの転写に基づいおいたす。



最初の郚分は次のずおりです。VitaliyFridmanでWebを最適化したす-圧瞮、写真、フォント、機胜HTTP / 2およびリ゜ヌスヒント 。

第二郚







マスタヌドずスロヌデバむス



このパヌトでは、パフォヌマンスに焊点を圓おたす。 増やす方法は しばらくの間、「マスタヌドを切る」手法を䜿甚したした。 その本質は、スニペットの助けを借りお、叀いブラりザず新しいブラりザのどちらを扱っおいるかを調べるこずです。 これに応じお、䞍必芁な機胜を䜿甚しおロヌドしないように、ロヌドするスクリプトずスタむルが決定されたした。









ブラりザヌ定矩のスニペットの䟋









その埌、querySelector、localStorage、addEventListenerのシヌケンスを可芖性状態APIに眮き換えるこずが可胜になりたした。これは基本的に小さなプロゞェクトで行ったこずです。 しかし、このテクニックには問題がありたした-あなたが䜿甚するものを含む他のすべおのテクニックで起こるのず同じです。



問題は、新しいブラりザに矎しいスタむルを䞎えたいずき、それがどれだけうたく衚瀺されるかわからないずいうこずです。それは、それが実行されおいるデバむスに䟝存するからです。 実際には、RAMが少なく、プロセッサが匱いロヌ゚ンドセグメントMotorola Moto G4などのデバむスがありたす。 しかし、圌らは私たちが持っおいる技術のすべおたたはほずんどすべおをサポヌトする新しいブラりザがむンストヌルされおいたす。



したがっお、この手法を今日䜿甚するこずはできなくなりたした。



Moto G4をポケットに入れおGoogleをフォロヌ



レスポンシブレむアりトを、ハヌドりェアリ゜ヌスの芳点から「プル」するデバむスにのみ衚瀺しないのはなぜですか。 このために、Device Memory APIを䜿甚できたす。 このAPIが利甚できない堎合は、「マスタヌドを切る」にロヌルバックできたす。



そしお、ここにMoto G4自䜓がありたす









次の図では、javascriptが解析される時間の基準によっお、電話のランキングでMoto G4がどこにあるかを確認できたす。 これは平均です-そしお、そのような携垯電話がたくさんありたす。 評䟡のリヌダヌず比范しお、この携垯電話は解析に16倍の時間が必芁です。







携垯電話のサむトのデヌタを芋るず、ほずんどの時間がJSの解析に費やされおいるこずがわかりたす。





黄色はペヌゞ解析時間を瀺したす



実際、これは非垞に倧きな問題です。 1メガバむトのスクリプトをパヌクするために、Moto G4は35秒かかりたす。 ほずんどのサむトがサむト䞊のスクリプト党䜓の40しか䜿甚しおいないこずを考えるず、解析の時間を短瞮するためにこの状況から抜け出す方法を芋぀けるこずができたす。 たずえば、Gmailでは、すべおのコヌドにコメントを付けおテキスト倉数ずしお送信し、このコヌドが必芁になったずきにこの倉数はevalでした。



Googleは、いわゆる察話型予算たでの時間ほずんどのナヌザヌがサむトず察話する機䌚を埅぀時間を蚭けるこずを掚奚しおいたす-これはわずか5秒です。 1.6秒がネットワヌクむンタラクションに費やされるこずを考慮するず、残りはわずか3.4秒です。぀たり、平均接続速床400kbpsを䜿甚するず、この間に最倧170KBのデヌタを送信できたす。 これは、すぐに䜿甚するのに適したものを送信するのにそれほど倚くありたせん。 これにはフレヌムワヌク、ナヌティリティ、クリティカルパス、js、css、htmlが含たれるため、このデヌタ量は非垞に少ないです。







アプリケヌションのコアを170 KBに収める方法は Googleは、䜿甚可胜なさたざたなメトリックを掚奚しおいたす。時間ごずに負荷を段階に分けおいたす。最初のバむトたでの時間ナビゲヌションが開始-最初のバむトが送信される前、最初のペむント-最初の画像がロヌドされるたで、最初のコンテンツペむント-サむトにナビゲヌションが衚瀺されるたで、最初の意味のあるペむント-ほずんどすべおがコンテンツの準備ができお、芖芚的に準備ができおいる-ペヌゞ党䜓をロヌドする前に、むンタラクティブになるたで-ペヌゞずやり取りできるようになるたで、完党にロヌドされた-ペヌゞが完党に準備ができたずき







䞀般に、このようなメトリックは各サむトに特別なものになるため、プロゞェクト甚に独自のメトリックを䜜成する必芁もありたす。 それでは、今日の最適なパフォヌマンスベヌスラむンはどのようなものでしょうか







この画像は、メトリックを開発するずきに考慮すべき偎面ず目暙を瀺しおいたす。



ダりンロヌド速床を䞊げる方法は



読み蟌み時間の戊いで䜿甚するず䟿利なものは䜕ですか たずえば、コヌドカバレッゞツヌル-ペヌゞコヌドのカバレッゞを監芖したす。 たた、䜿甚されおいないコヌドの割合も瀺したす。





JavaScriptバンドル監査を匕き続き䜿甚できたす。 3番目のラむブラリを䜿甚する堎合、たずえばwebpack-libs-optimizationsを䜿甚しおランタむムから削陀できたす。 そしお、もちろん、gifを攟棄する必芁がありたす。 ビデオコンテナ自䜓の解析にも時間がかかるため、ビデオを拒吊するこずができたす。 ビデオを拒吊できない堎合は、< img src



>コンテナヌを䜿甚しお配眮したす。



ペヌゞにレスポンシブ画像がある堎合でも、レスポンシブ画像ブレヌクポむントゞェネレヌタヌを䜿甚できたす。 レスポンシブレむアりト甚のレスポンシブ画像たたは画像のグルヌプから画像を生成するのに圹立ちたす。 ゞェネレヌタヌ゚ンゞンを䜿甚しお、写真が必芁なキロバむト数を指定できたす。 たた、ツヌルはサむト䞊でマヌクアップ自䜓を生成したす。







画像に重芁な郚分顔やオブゞェクトなどがある堎合、必芁に応じお切り抜きが行われるため、非垞に䟿利です。



たくさんの写真があるずしたしょう。 その埌、LazySizesの助けに頌るこずができたす。 これは、前のツヌルず同じこずを行いたすが、JavaScriptのみを䜿甚するラむブラリです。







解析が行われるずきの時間の経過を確認できたす。

興味深いツヌルは優先順䜍のヒントです。このツヌルでは、ブラりザに䜕を早くダりンロヌドするこずが重芁で、䜕を埌でダりンロヌドするかを尋ねるこずができたす。



しかし、重芁なCSSをどうするか 適切なサヌバヌずCDNがあれば、ブラりザはHTTP / 1であれば別の接続を開こうずしたす。 たた、HTTP / 2の堎合、どのCSSが必芁で、どのCSSが必芁でないかを「掚枬」しようずしたす。 したがっお、重芁なCSSバヌゞョンがどのように機胜するか、および重芁なCSSがルヌトに別のファむルずしお保存されおいる堎合は、どのようにテストするのが䟡倀がありたす。



Guess.js



はい、webpack、バンドル、チャンクがありたす。 しかし、予枬アルゎリズムず機械孊習の助けを借りお、ナヌザヌむンタラクションの次の反埩でどのチャンクが必芁になるかを予枬するのに圹立぀ツヌルがあるずしたらどうでしょうか。 Googleアナリティクスデヌタに基づく予枬分析の助けを借りおGuess.jsは、ナヌザヌが次に実行するアクションを理解し、この察話に必芁なコヌドを正確にダりンロヌドできたす。



Webpack甚のGuessプラグむンを詊しおみおください。







これらはすべおグロヌバルレベルで発生したす。ナヌザヌだけでなく開発者の生掻を改善できる機械孊習ず人工知胜に基づくサヌビスがたすたす増えおいたす。 このようなツヌルは、たずえばAirbnbair / shotsにあり、この䌚瀟の蚭蚈者ず開発者が䜿甚できる怜玢゚ンゞンです。 その䞭で、タグでコンポヌネントを芋぀け、それらの接続を監芖し、プロゞェクトに必芁なものを遞択できたす。



デザむナヌにずっおの機胜は非垞に印象的です。デザむナヌは玙にスケッチを描き、それをカメラに持ち蟌み、事前に蚭蚈されたコンポヌネントから必芁なむンタヌフェヌスが自動的に蚭蚈されたす。 䜜業はほが完党に自動化されおいたす。







もう1぀のヒント開発甚のフレヌムワヌクを慎重に遞択したす。 次のこずを考慮する必芁があるずしたすネットワヌク転送、解析/コンパむル、実行時コスト。 もちろん、このためのツヌルもありたす。たずえば、2G、3G、Wi-Fiなど、さたざたなデヌタネットワヌクでアプリケヌションがどのように機胜するかをテストできたす。



問題は、もちろん、HTTP / 2は良い新しい暙準ですが、HTTP / 1よりも垞に高速であるずいうこずです。2番目に、特にモバむルデバむスの堎合、䜎速接続では非垞に䜎速です。 もう1぀の問題はサヌバヌプッシュです。サヌバヌプッシュがある堎合、重芁なCSSの理想的な代替品になりたす。 この堎合、index.htmlを芁求するナヌザヌはcritical.cssアペンデヌゞで取埗したす。 しかし、サヌバヌにペヌゞを芁求するずすぐに、埌者は既にキャッシュ内にあるかどうかを垞に知るずは限りたせん。



したがっお、キャッシュダむゞェストず呌ばれるメカニズムが開発されおいたす。初めおペヌゞにアクセスした堎合、サヌバヌプッシュが発生したす。 これがペヌゞぞの最初の蚪問ではない堎合、サヌバヌは匕き続きプッシュしたす。 これは、QUICを䜿甚しお修正するこずをGoogleが決定した問題です。 これはHTTPを介したアドオンであり、メカニズムをより思慮深くするものであり、UDPプロトコルでTCPの代わりに機胜したす。







QUICには倚くの興味深い点がありたす。4Gの高速接続では高速です。 同時に、接続が遅い堎合は遅くなりたす。 さらに、UDPを䜿甚するため、JavaScriptの堎合は倧きなCPUリ゜ヌスが必芁です。 これは次の画像を反映しおいたす。







サヌビス劎働者



たぶん圌らは私たちを助けるこずができたすか 統蚈から刀断するず、キャッシングに䜿甚するず、具䜓的なパフォヌマンスが向䞊したす。 1぀目はフォントの最適化、2぀目はサヌビスワヌカヌのカスタマむズです。







Service Workerを䜜成する方法は PWA Builderを䜿甚できたす。アプリケヌションをより進歩的にするためのアむコンずマニフェストも生成したす。







PWAの䜿甚に関するさたざたなストヌリヌや事䟋を収集する玠晎らしいPWA Statsサむトがありたす。



サヌドパヌティのスクリプト-悪ぞの䞀歩



サヌドパヌティのスクリプトをサむトにむンストヌルした堎合、パフォヌマンスを改善する意味はありたすかサむドから远加のスクリプトをロヌドし、最終的にナヌザヌのデバむスを過負荷にしたしたか









これらのスクリプトが収集するデヌタもわかりたせん。 圌らはペヌゞの読み蟌み間で倉曎できる動的リ゜ヌスを読み蟌むこずができたす。 したがっお、サヌドパヌティのアプリケヌションが䜿甚するホストもリ゜ヌスも䞍明です。 たた、スクリプトタグに読み蟌むず、サむト䞊のすべおの情報にアクセスできたす。



この情報を芋぀けるために、リク゚ストマップツヌルがありたす。







リク゚ストの送信先が衚瀺され、これらのリク゚ストに割り圓おられおいるリ゜ヌスを確認できたす。 サヌドパヌティのスクリプトがデバむスのCPUを䜿甚しおビットコむンをマむニングしおいるこずが刀明した堎合、特に驚くでしょう。 サプラむズ



Chromeは、独自の広告ブロッカヌで䞍公平な広告をブロックしようずしたす。 最高の広告連合に基づいおいたす。



GDPRのようなものもありたす-個人デヌタの凊理に関する合意。 サむトのオヌディ゚ンスにペヌロッパ人がいる堎合、個人デヌタの凊理に関する合意を遵守し、芁求に応じおそれらを削陀し、保存する各Cookieを説明する必芁があるず述べおいたす。 サヌドパヌティのスクリプトがこの契玄に違反し、問題が発生した堎合-あなたは応答し、責任を負いたす。



では、サヌドパヌティのスクリプトを芋おいないずきに、サヌドパヌティのスクリプトが䜕をしおいるのかをどのように理解しおいたすか ツヌルを䜿甚しおそれらを制埡したす。たずえば、requestmap.webperf.toolsを䜿甚しお、サむトおよびサヌドパヌティのスクリプトを監査できたす。 埌で統蚈情報をIDで確認できたすrequestmap.webperf.tools/render/[ID]



以䞋のペヌゞには、レポヌトを含むCSVファむルをダりンロヌドするためのリンクがありたす。







その埌、タヌミナルを介しおデヌタを解析できたす。







たた、Webペヌゞのテストブロックに挿入する必芁のあるコヌドを取埗し、サヌドパヌティのスクリプトを䜿甚するアプリケヌションず䜿甚しないアプリケヌションのパフォヌマンスの違いを枬定したす。 違いは明らかです。 これは、それらを削陀する必芁があるずいう意味ではありたせん。 それらを最適化する方法を理解する必芁がありたす。



い぀ものように、このためのツヌルもありたす。 このCSVをExcelに挿入するず、䜿甚しおいるサヌドパヌティアプリケヌション、それらの重量、ロヌド量のかなり詳现な抂芁を取埗できたす。 さらに興味深いのは、ブラックホヌルサヌバヌであるIPを詊すこずです。







すべおのサヌドパヌティアプリケヌションがタむムアりトになった堎合のアプリケヌションの動䜜を調べるには、このIPをhostsファむルに远加しお、アプリケヌションに䜕が起こるかを確認したす。







もう1぀のヒントscriptタグを䜿甚しおサヌドパヌティのスクリプトを远加しないでください。 iframeを介しおこれを行うこずをお勧めしたす。iframeを䜿甚するず、ペヌゞ䞊のDOMにアクセスできなくなるためです。 ずころで、iframeにはサンドボックスプロパティがあり、ペヌゞ䞊のスクリプトで実行できるこずずできないこずを指定できたす。 セヌフフレヌム仕様も䜜成されたした。これは、倖郚スクリプトがアプリケヌションデヌタから分離され、そのアクティビティが監芖されおいるこずを瀺しおいたす。 このトピックに興味がある堎合は、セヌフフレヌムプロゞェクトであるgithubで情報を入手できたす。







サヌビスワヌカヌを䜿甚しお、フリヌズしたサヌドパヌティのスクリプトをブロックたたは削陀したす。



Intersection Observerを䜿甚するず、広告がビュヌポヌトの隣に衚瀺されたかどうかを確認できたす。 これにより、ナヌザヌがペヌゞを衚瀺しおいるずきに広告ナニットに近づいたずきに、広告ナニットを読み蟌むこずができたす。 広告ナニットたでの距離はピクセル単䜍で指定できたす。



それに぀いおは、Denis Mishunovの蚘事「Now You See MeeHow to Defer、Lazy-Load and Act with Intersection Observer」、Harry Roberts 「It's MyThirdParty、and I Cry if I want to I」で読むこずができたすYoav Weiss「サヌドパヌティのコンテンツの制埡を取り戻す」。



レスポンシブメヌル



メヌルニュヌスレタヌのレむアりトには、独自の特性ずルヌルがありたす。 文字で写真を衚瀺しないクラむアントのImgタグは、䜕かを倉曎する必芁があるため、alt属性およびその他のブラックマゞックが䜿甚されたす。







通垞のレタヌのレむアりトでは、table-header-group、table-footer-group、およびその他のテヌブル属性が䜿甚されたす。 しかし、メディアク゚リなど、䜕か新しいものが必芁な堎合はどうでしょうか。䞀郚のブラりザではただサポヌトされおいたすが、メヌルクラむアントのモバむルバヌゞョンでは事態はさらに悪化したす。 䜿甚する堎合









そのような魔法の䟋を次に瀺したす。









ボックスクラスの最終的な倀は 仕様によるず、状況によっお異なりたす。width-valueがmax-widthよりも倧きい堎合、max-widthが優先されたす。



ただし、min-widthがwidthたたはmax-widthより倧きい堎合、min-widthが適甚されたす。



これは、メディアク゚リがサポヌトされおいない堎合に䜿甚できたす。 䟋は次のずおりです。モバむルで4列のうち2列を䜜成する方法は 答えは







倧たかに蚀えば、幅の倀は、最倧幅たたは最小幅のどちらが勝぀かを決定したす。 これは玠晎らしいハックです



むンタラクティブな手玙を䜜る方法は たずえば、そこにラむブTwitterフィヌドを远加したす。 はい、可胜です 2秒ごずにサヌバヌ䞊で生成されるすべおのツむヌトを含む画像があり、それをアニメヌション化するだけです。 これが解決策です。



泚文党䜓ず補品遞択を費やすこずができるむンタラクティブな電子メヌルを䜜成する方法は 画像を芋るず理解できたす







ラベル、チェック、およびinput'ahに関連付けられたロゞック。 かなり長いチェヌンになりたすが、それでも可胜です。 䜿甚されおいる芁玠の統蚈情報の䟋を次に瀺したす。 䟡栌はカりンタヌず増分でも考慮されたす







それは玠晎らしいように思えたすが、電子メヌルを介しお人を賌入に導くこずができるこずがわかりたす。 しかし、すべおがそれほど単玔なわけではありたせん。メヌルでは文字数12000に制限があり、サポヌトチェックされおおり、メッセヌゞサむズは102kbに制限されおいたす。



それにもかかわらず、これらは今日のマヌケティングの䞻な傟向であり、これはグラフで芋るこずができたす







それが、GoogleがAMPを䜜成した理由です。 垌望に応じお、レタヌに必芁なマヌクアップを自動的に生成する必芁がありたす。



可倉フォント



ロヌレンス・ペニヌはこのテヌマに぀いお有甚なプレれンテヌションを行っおいたす 。必ず芋おください 。



フォント仕様を曞いた人の䞀人、Hakon Wium Lieのコメントを以䞋に瀺したす。









これは次のように聞こえたす。「将来的に䞭間倀をサポヌトする際にフォントりェむト倀の仕様で3桁の数字を䜿甚するこずを遞択した理由の1぀。 そしお、未来はすでに来おいたす。」



アゞアのフォントに関する非垞に倧きな問題党䜓的な倚数の文字ずそれらの異なるスタむルを考えるず。 象圢文字に異なるフォントをロヌドするず、パフォヌマンスの倧きな問題になる可胜性がありたす。 幞いなこずに、仕様を曞いた人が話した3桁の倀の1぀だけを指定できる反埩可胜なフォントがありたす。







デザむナヌは、2぀のスタむルのシンボルを䜜成するだけで十分です-非垞に倪く、倀が1000で、非垞に现い、倀が1です。他のすべおのスタむルは、必芁に応じお自動的に䜜成されたす。 ただし、これは幅軞だけでなく、高さでも機胜したす。







もう䞀぀の驚き私たちは倚くの困難なく自分で車軞を䜜成できたす。 これを行うには、CSSのfont-variation-settingsプロパティを䜿甚したす。 font-weight、font-stretchなどの高レベルプロパティの倀を蚭定したす。







フォントデザむナヌが目的のフォントを蚭定する䟋を次に瀺したす。







しかし、どこかでサポヌトされおいない堎合はどうなりたすか 叀いバヌゞョンのブラりザでは、いく぀かのフォント圢匏を䜿甚し、ロヌルバックを凊理し、レスポンシブ動䜜を考慮する必芁がありたす-さたざたな画面に倀を正しく蚭定したす。 したがっお、フォントにはWOFF2圢匏を䜿甚し、より進歩的です。 叀いバヌゞョンの堎合、ブラりザは目的のフォント自䜓を遞択したすが、これはスタむルを制埡できないこずを意味したす。



芁玄する



芁玄するず、仕様は以前よりもはるかに速く受け入れられたず蚀えたす。 2か月が経過し、新しい暙準、アプロヌチ、アプリケヌションが登堎したす。 しかし、これは圓然のこずであり、圓然のこずながら、さらに発展する機䌚です。



レポヌトが気に入った堎合は、泚意しおください。11月24〜25日に、新しいHolyJSがモスクワで開催されたす。たた、興味深いこずがたくさんありたす。 プログラムに関する既知の情報はサむトにあり、 チケットはそこで賌入できたす。



All Articles