新しいGmailの内部を見る

6か月前、Googleはメールサービスの更新バージョンを導入しました。 Habréを含め、多くのユーザーが再設計に不満を抱いているという事実にもかかわらず、これがユーザーのメインインターフェイスになりました。


他の欠点の中でも、人々は新しいバージョン、特に弱いコンピューターのパフォーマンスの低下について不満を述べています。 これがなぜ起こるのか、そしてメールインターフェースで何がそんなに難しいのかを見てみましょう。 この記事では、Google Chromeの開発者ツールを使用するので、この記事はそこで利用できる機会を思い出させます。


ソースデータ


まず、私たちが何を扱っているかを理解する必要があります。 Google Chrome Devtoolsには、サイトのシンプルでわかりやすいパフォーマンスレポートを作成する組み込みのLighthouseツールがあります。 その中で、Gmailはパフォーマンスの点で優れています(最大100ポイントのうち!)。



正直に言うと、これはGoogle製品に期待する結果ではありません。 それでも、この状況をさらに詳しく見てみましょう。 キャッシュをオフにし、devtoolsを有効にしてGmailインターフェースをロードします。 [ネットワーク]タブには、このページをダウンロードするために行われたすべてのリクエストが表示されます。 6.9 Mbでした。 最近更新された別のサービスであるYoutubeでさえ、2 MBのリソースしかロードしないことを考えると、これは印象的なサイズです。


ここでは、Gmailを含む最新のサービスがService Workerを使用してリソースキャッシングを改善していることに注目してください。 したがって、コールドスタートを正確に測定するには、キャッシュをオフにするだけは十分でなく、リソースを保持しているService Workerリセットする必要があります。 この後のみ、ゼロからのダウンロード番号が実際になります。

それでは、スローモーションで読み込まれているページを見てみましょう。 Google Chromeのドキュメントには、これを行う方法が説明されています。 ページ読み込みのさまざまな段階からスクリーンショットのセットを取得します。



ここでは、9秒までにページが多少ロードされることがわかります。


キャッシュの使用時にリロードすると、状況は改善されます。 このページは250 Kbのリクエストのみを行いますが、これにより速くなることはありません。スプラッシュ画面が約10秒間表示されます。 ポイントは明らかにリクエストの数ではなく、他の何かがページを遅くします。


リソースをブロックします


次に、ダウンロード可能なスクリプトのリストを見てください。



おそらく、それらのいくつかは、インターフェースの通常の操作にそれほど必要ではないでしょうか? それらを一つずつオフにして、それらなしでページをテストしてみましょう。 これは、 devtoolsの組み込み機能を使用して簡単に実行できます


経験的に、 https://mail.google.com/_/scs/*リクエストはインターフェースが機能するために重要であることが判明しましたが、次のリクエストはブロックできます:



これらのリクエストに加えて、AdBlockがhttps://play.google.com/logへのブロック済みリクエストを既にインストールしているため、ロックの実験が開始される前からリクエストが行われなかったため、それらは考慮されません。

これらのスクリプトをブラックリストに追加し、ページの読み込みが4秒以内に開始されたことを確認しますが、文字の読み取りと書き込みは引き続き可能です。


プロファイラーを見る


そのため、できる限りリソースの読み込みを最小限に抑えましたが、ページの読み込みにはまだ時間がかかります。 この4秒間に何が起こるかを確認する必要があります。 ここでは、 Chromeに組み込まれているプロファイラーが役立ちます。 彼はこの写真を見せてくれます。



この間、ブラウザはJavaScriptの実行で忙しかったことがわかります。 このコードでこのような重要で難しいことが起こるのは興味深いことです。 幸いなことに、Javascriptはほとんど変更されずにブラウザーに読み込まれ、読み取ることができます。


残りのコードを検討する


利用可能なJavascriptコードを読みましょう。 縮小されたコードフォーマットして読みやすくするレスキューの機会がここにあります


視聴の結果によると、次のことがわかりました。



最後の段階で、詳細に停止する価値があります。 クロージャーライブラリは、2009年に登場したインターフェイス開発フレームワークであり、それ以来ほとんど変更されていません。 たとえば、 ActiveXObjectを介したAjaxは引き続きサポートされてます。これはIE6以下でのみ必要ですが、現在のGmail IE 10+のみを公式にサポートしています。


さらに、クロージャーUIは、GWTの「最高の」伝統であるクラス階層に基づいています。これは、レンダリングパフォーマンスに明らかに影響を与える冗長な抽象化を多く伴うアプローチです。 最新のUIフレームワーク(たとえば、ReactまたはVue)は、はるかに軽量な抽象化-コンポーネント-を提供します。


したがって、長い初期化:コードで数千のクラスが作成され、Gmailインターフェースのレンダリングを実際に開始する前に多くの抽象化が初期化されます。


したがって、更新された外観にもかかわらず、Gmailは古い技術の遺産を引き出しており、その重大度は外殻の後ろに隠れることはできません。


結論


このレビューの後、Gmailが遅くなる理由が少し明確になることを願っています。 残念ながら、Googleがサービスを高速化することは私たちの力ではありませんが、少なくともアプリケーションのいくつかのレッスンを学ぶことができます。




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


All Articles