JavaScript䟡栌

私たちのサむトがたすたすJavaScriptに䟝存するようになるに぀れお、ナヌザヌに送信するものに察しお料金を支払う必芁がありたす。 時々、䟡栌が䞀目で芋えないこずがありたす。 この蚘事では、モバむルデバむスでの読み蟌みずパフォヌマンスを高速化するために、少し芏埋を守るこずがなぜ圹立぀のかを説明したす。

tl; drコヌドの削枛=解析/コンパむルの削枛+転送の削枛+解凍の削枛

ネットワヌク


ほずんどの開発者は、JavaScriptのコストに぀いお考えるずき、ダりンロヌド時間ず実行時間に぀いお考えたす。 より倚くのJavaScriptバむトを送信するには時間がかかり、ナヌザヌずのチャネルが薄くなりたす。



ナヌザヌの効果的なネットワヌク接続のタむプは必ずしも3G、4G、たたはWiFiではないため、これは最初の䞖界の囜でも問題になる可胜性がありたす 。 WiFiを備えたカフェに座っおも、2Gの速床で携垯電話を介しおホットスポットに接続できたす。

JavaScriptネットワヌクの䌝送コストは、次の方法で削枛できたす。




ナヌザヌに枡されるJavaScriptコヌドの量を枛らすための重芁なヒント

解析/コンパむル


JavaScriptコヌドをダりンロヌドした埌、 最も重芁なコストの1぀は、JS゚ンゞンでこのコヌドを解析/コンパむルする時間です。 Chrome DevToolsでは、解析ずコンパむルはパフォヌマンスパネルの黄色のスクリプト時間の䞀郚です。



[ボトムアップ]タブず[コヌルツリヌ]タブで、解析ずコンパむルの正確な時間を確認できたす。


Chrome DevToolsパフォヌマンスパネル>ボトムアップ。 V8 Runtime Call Stats機胜をアクティブにするず、解析およびコンパむルの段階に費やされた時間が衚瀺されたす

しかし、なぜこれが重芁なのでしょうか



コヌドの解析ずコンパむルに倚倧な時間を費やすず、ナヌザヌがサむトを操䜜する際の遅延が倧幅に増加する可胜性がありたす。 送信するJavaScriptコヌドが倚いほど、サむトがナヌザヌのアクションに応答し始めるたでの解析およびコンパむルフェヌズが長くなりたす。



バむト単䜍で比范するず、 JavaScript凊理は、同等のサむズの画像たたはフォントよりもブラりザヌのコストが高くなりたす -トムデヌル

JavaScriptず比范しお、同じサむズの画像にも倚数の凊理コストがかかりたすこれらもデコヌドする必芁がありたすが、平均的な携垯電話の機噚では、ペヌゞの察話性に悪圱響を䞎えるのはJSです。


JavaScriptず画像バむトはリ゜ヌスを異なる方法で䜿甚したす。 通垞、画像はメむンストリヌムをブロックせず、デコヌドおよびラスタラむズ䞭にむンタヌフェむスをフリヌズしたせん。 ただし、JSは、解析、コンパむル、コヌド実行により、察話性に圱響を䞎えるこずができたす。

遅い解析ずコンパむルに぀いお話すずき、コンテキストが重芁です-ここでは、䞭型の携垯電話に぀いお話しおいたす。 通垞のナヌザヌは、L2 / L3キャッシュがなく、メモリが限られおいる堎合でも、CPUずGPUが遅い電話を䜿甚できたす。

ネットワヌク機胜ずデバむス機胜は垞に䞀臎するずは限りたせん。 優れた光ファむバヌチャネルを䜿甚しおいるナヌザヌは、デバむスに付属するJavaScriptを解析および評䟡するために優れたCPUを持っおいる必芁はありたせん。 逆もたた真です...ひどいネットワヌク接続ですが、非垞に高速なプロセッサです。 -クリストファヌ・バクスタヌ、LinkedIn

「 JavaScript起動パフォヌマンス 」の蚘事で、匱くお匷力なハヌドりェアで玄1メガバむトの解凍された単玔なJavaScriptコヌドの解析時間に泚目したした。 最速のスマヌトフォンず平均の違いは、解析/コンパむル時間の2〜5倍です。


異なるクラスのPCおよびモバむルデバむスでの1 MBのJavaScriptバンドル解析時間gzipで玄250 KB 。 解析コストを考慮する堎合、玄250 MBのファむルを玄1 MBのJSコヌドに展開する远加コストを远加する必芁がありたす。

CNN.comのような実際のサむトはどうですか

最新のiPhone 8は、CNNスクリプトの解析/コンパむルに玄4秒かかりたすが、平均的な電話Moto G4では玄13秒かかりたす。 これは、ナヌザヌがサむトずやり取りする機䌚を埗るたでの時間に倧きく圱響したす。


通垞のAndroidスマヌトフォンのSnapdragon 617ず比范したApple A11 Bionicチップでの解析時間

これは、ポケットにある電話だけでなく、䞭芏暡の機噚Moto G4などでテストするこずの重芁性を瀺しおいたす。 ただし、コンテキストは重芁です。 ナヌザヌが持っおいるデバむスずネットワヌクの状態に合わせお最適化したす 。



分析ツヌルは、サむトの実際のナヌザヌが持っおいるモバむルデバむスのクラスを衚瀺できたす。 これにより、CPU / GPUの実際の制限を理解するこずができたす。

JavaScriptの出荷が倚すぎたすか たあ、倚分:)

HTTPアヌカむブ玄50䞇サむトは、 モバむルサむトでのJavaScriptの䜿甚を瀺しおいたす 。 そしお、サむトの50がむンタラクティブになるたでに14秒以䞊かかるこずがわかりたす。 これらのサむトは、JSの解析ずコンパむルだけで最倧4秒かかりたす。



JSやその他のリ゜ヌスをロヌドしお凊理するのに必芁な時間を考慮するず、ナヌザヌが「フリヌズ解陀」するのを埅たずにペヌゞを離れるこずは驚くこずではありたせん。 ここには間違いなく改善の䜙地がありたす。

重芁でないJavaScriptをペヌゞから削陀するず、ロヌド時間、CPU集䞭型の解析/コンパむル、および朜圚的なメモリオヌバヌランが削枛されたす。 たた、ペヌゞがむンタラクティブモヌドに入るのが速くなりたす。

リヌドタむム


解析ずコンパむルだけでは代䟡がかかりたす。 JavaScriptの実行解析/コンパむル埌のコヌド実行は、メむンスレッドで実行される操䜜の1぀です。 リヌドタむムが長いず、ナヌザヌがサむトを操䜜できるたでの時間にも圱響したす。



スクリプトが50ミリ秒より長く実行される堎合、サむトずの察話の開始たでの時間は、JSのダりンロヌド、コンパむル、および実行にかかる時間党䜓で増加したす-Alex Russell

これに察凊するために、JavaScriptを小さな断片で枡しお、メむンスレッドを長時間キャプチャしないようにするこずは理にかなっおいたす。 スクリプトの実行時間を最適化する方法を孊びたす。

JavaScript配信を高速化する方法


JavaScriptの解析/コンパむルずネットワヌク経由の送信の時間を短瞮するこずが目暙である堎合、ルヌトベヌスのチャンキングやPRPLなどの䟿利なテクニックがありたす 。

PRPLは、コヌドをフラグメントに積極的に分割しおキャッシュするこずにより、察話性を最適化するための手法です。



どのような効果が埗られるか芋おみたしょう。

V8 Runtime Call Statsを䜿甚しお、人気のあるモバむルサむトずプログレッシブWebアプリケヌションの読み蟌み時間を分析したした。 ご芧のずおり、解析時間オレンゞ色で衚瀺は時間コストの倧きな郚分を占めおいたす。



Wego WebサむトはPRPLを䜿甚し、解析時間を䜎く抑えようず詊み、非垞に迅速に察話したす。 リストされおいる他のサむトの倚くは、JSコストを削枛するために、分割コヌドずパフォヌマンス予算を䜿甚しおいたす。

その他の費甚


JavaScriptは、倚くの点でパフォヌマンスに圱響を䞎える可胜性がありたす。


プログレッシブブヌトストラップ


倚くのサむトは、むンタラクティブ性を通じおコン​​テンツの可芖性を最適化したす。 倧芏暡なJavaScriptバンドルでレンダリングをすばやく開始するために、開発者はサヌバヌ偎レンダリングを䜿甚するこずがありたす。 JavaScriptが最終的に凊理されたずきに画像を「曎新」したす。

泚意しおください-すべおに䟡栌がありたす。 1基本的に、より倧きなHTML応答を送信したす。これは、察話性に圱響を䞎える可胜性がありたす。 2ナヌザヌを信頌できる「邪悪な谷」に攟眮するこずができたす。実際には、JavaScript凊理が完了するたで、双方向性の半分は利甚できたせん。

プログレッシブブヌトストラップは、このアプロヌチよりも優れたオプションです。 最小限の機胜を備えたペヌゞこのパッセヌゞで最も重芁なHTML / JS / CSSのみで構成されおいたすを送信したす。 残りのリ゜ヌスが到着するず、アプリケヌションはそれらを遅延ロヌドし、远加機胜をロック解陀したす。


プログレッシブブヌトストラップ 、ポヌルルむスによるむラスト

画面に衚瀺されおいる内容に応じおコヌドをダりンロヌドするこずは、本圓の目暙です。 PRPLずプログレッシブブヌトストラップは、圌女に近づくのに圹立぀テクニックです。

結論


现いチャネルでは䌝送サむズが重芁です。 解析時間は、CPUが匱いデバむスにずっお重芁です。 最小限のパフォヌマンスを目指しお努力する必芁がありたす。

さたざたな䌁業が、JavaScriptの転送、解析、およびコンパむルの期間に厳しいパフォヌマンス予算を導入するこずで、ある皋床の成功を収めおいたす。 モバむルWebサむトおよびアプリケヌション向けのAlex Russell予算ガむド「これを蚱可できたすか珟実䞖界のパフォヌマンス予算」を参照しおください。


アプリケヌションロゞック甚にJSにどのくらいのスペヌスを確保するかを考慮するず䟿利です。

モバむルデバむス甚のWebサむトを䜜成しおいる堎合は、特定の機噚を䜿甚し、JavaScriptの解析/コンパむル時間を最小限に抑え、パフォヌマンス予算を実装しお、開発者がJavaScriptコストを远跡できるようにしたす。

オプショナル



JavaScriptの䟡栌に関するChrome Dev Summit 2017での私のプレれンテヌション。 その埌、PinterestやTinderなどの実際のサむトを䜿甚しおパフォヌマンスが分析されたす。

Source: https://habr.com/ru/post/J343562/


All Articles