2024年のJavaScript肥大化
(tonsky.me)JavaScriptの肥大化問題
- 現代のフロントエンド開発にはやや疎く、ウェブページのサイズが数MBに達するウェブの肥大化に関する記事を覚えていた。
- 平均的なウェブページのサイズが3MBなら、JavaScriptバンドルはおよそ1MB程度だろうという印象を持っていた。
- 実際にどのくらいなのか確認するため、実験を行った。
方法
- macOSでFirefoxを使用(他のブラウザでも同じはず)
- シークレットモードではなく通常モード(アプリ内の数値を見たく、実際の体験により近いと考えたため)
- すべての拡張機能を無効化
- JavaScriptのみを測定
- 非圧縮の状態
- サービスワーカーを有効化(より現実的な状況のため)
- すべてのキャッシュを無効化(最初から読み込み)
ランディングページ
- 一般的な、多少のインタラクションがあるページの例: Wikipedia、0.2MB
- やや肥大化したページの例: Linear、3MB
- ひどいランディングページの例: Zoom、6MB; Vercel、6MB; Gitlab、13MB
主に静的なウェブサイト
- 静的なテキストの壁を表示するより単純なものはない。
- Mediumはそれだけのために3MBが必要。
- Substackは4MB、Quoraは4.5MB、Pinterestは10MB、Patreonは11MBが必要。
検索
- アプリのインタラクションは主に検索に限定される。
- StackOverflowは3.5MB、NPMは4MB、Airbnbは7MB、Booking.comは12MBが必要。
- Googleは単純なテキストフィールドとリンク一覧を表示するのに9MBが必要。
単一インタラクションのアプリ
- Google Translateは2つのテキストボックスのために2.5MBが必要。
- ChatGPTは1つのテキストボックスのために7MBが必要。
動画
- Loomは7MB、YouTubeは12MBが必要。
- Pornhubはパフォーマンスを気にするサイトで、1.4MBしか必要としない。
オーディオ
- SoundCloudとSpotifyはどちらも12MBが必要。
メール
- Google Mailは20MBが必要。
- FastMailは同じ機能を提供しながら、2MBしか必要としない。
生産性
- Todoistは9MB、Dropboxは10MB、1Passwordは13MB、Trelloは13.5MBが必要。
- Discordはチャットのために21MBが必要。
文書編集
- Google Docsは13.5MB、Notionは16MBが必要。
ソーシャルネットワーク
- Twitterは11MB、Facebookは12MB、TikTokは12.5MB、Instagramは16MB、LinkedInは31MBが必要。
巨大カテゴリー
- Jiraはほぼ50MB、Slackは55MBが必要。
- react.devは最初は2MBで始まるが、スクロールすると無限に大きくなりうる。
ますます急速に悪化しているのか?
- 2015年の平均的なウェブページサイズは、Doom 1のシェアウェア版(2.5MB)に近かった。
- 2024年にはSlackが55MBを占め、これはJavaScriptだけでオリジナルのQuake 1と同じサイズである。
10MBはどれほど大きいのか?
- 10MBはもはやそれほど大きくも特別にも感じられない。
- 平均して1行65文字と仮定すると、各ウェブサイトごとに約15万行のコードを送信していることになる。
- Google Mapsは現代の基準では比較的控えめな4.5MBである。
結論
- 問題はダウンロードサイズだけではない。
- JavaScriptはブラウザがパースし、メモリに保持し、実行しなければならない。
- コンテンツはコードサイズを上回るべきだと考えている。
- Gitlabは静的なランディングページを表示するために13MBのコード、50万行超のJSを必要とする。
GN⁺の意見:
- ウェブ開発の現状に対する現実的な診断であり、ウェブサイトのJavaScriptサイズがユーザー体験とパフォーマンスに与える影響を理解する助けになる。
- フロントエンド開発者に最適化の重要性を思い出させ、必要以上のリソースを使わないよう注意を促す。
- ウェブサイトのパフォーマンスに関して、開発者コミュニティ内で議論を促進しうる興味深いデータを提供している.
1件のコメント
Hacker Newsの意見