Насколько потолстел JavaScript к 2024 году?

в 13:00, , рубрики: Без рубрики

Насколько потолстел JavaScript к 2024 году? - 1


Я немного отстал от современных тенденций фронтенд-разработки. Помню, были статьи на тему раздутия веб-среды, в которых писали, что средний размер страницы начал достигать нескольких мегабайтов!

И всё это время я жил с мыслью, что если средний размер страницы равен, скажем, 3 МБ, то JS-бандл должен составлять около 1 МБ. Естественно, основную часть объёма должно занимать содержимое, не так ли?

Что ж, проверить это можно лишь экспериментальным путём, чем я и займусь! Эту статью я пишу в 2024 году и думаю, что через пару лет эксперимент неплохо бы повторить.

▍ Контекст анализа

  • Firefox на macOS (но в других браузерах всё должно быть так же).
  • Без режима инкогнито (я хочу видеть значения внутри приложения, и так эксперимент будет лучше отражать повседневный опыт работы).
  • Все расширения отключены.
  • Только JavaScript.
  • Без сжатия.
  • Service Workers включены (опять же, ближе к реальности).
  • Кэширование отключено (холодная нагрузка).

Почему только JS? Контент от сайта к сайту сильно отличается (само собой, видео на YouTube тяжелее сообщений в Slack), но JS является универсальной метрикой для измерения «сложности взаимодействий».

Моя основная цель — оценить, сколько работы браузеру необходимо проделать для парсинга и выполнения кода.

Чтобы установить некий базовый показатель, мы начнём с моего блога:

Насколько потолстел JavaScript к 2024 году? - 2

Здесь объём загрузки составит 0,004 МБ. Я также выделил все важные элементы, которые нужно будет установить, если вы решите воспроизвести эксперимент сами.

▍ Лендинги

Хорошо. Теперь перейдём к простым примерам — лендингам/не интерактивным приложениям.

В качестве стандартной страницы с минимальной интерактивностью возьмём Wikipedia — 0,2 МБ:

Насколько потолстел JavaScript к 2024 году? - 3

Вот слегка раздутый пример — Linear, 3 МБ:

Насколько потолстел JavaScript к 2024 году? - 4

Напомню, это без изображений, видео и даже стилей. Только JS-код.
Вот пример плохого лендинга — Zoom, 6 МБ:

Насколько потолстел JavaScript к 2024 году? - 5

Или вот Vercel, 6 МБ:

Насколько потолстел JavaScript к 2024 году? - 6

Да, это всего лишь лендинг. Это не приложение, здесь нет какой-либо функциональности или вызовов. То есть 6 МБ JS-кода только для этого.

Но можно найти примеры на порядок хуже — Gitlab, 13 МБ:

Насколько потолстел JavaScript к 2024 году? - 7

И это тоже просто лендинг.

▍ Преимущественно статичные сайты

Что может быть проще отображения статичной простыни текста. Medium требуется для этого 3 МБ:

Насколько потолстел JavaScript к 2024 году? - 8

Substack нужно 4 МБ:

Насколько потолстел JavaScript к 2024 году? - 9

Кто больше?

Quora, 4,5 МБ:

Насколько потолстел JavaScript к 2024 году? - 10

Pinterest, 10 МБ:

Насколько потолстел JavaScript к 2024 году? - 11

Patreon, 11 МБ:

Насколько потолстел JavaScript к 2024 году? - 12

И всё это могло быть статичной страницей…

▍ Поиск

Разберём пример, когда интерактивность вашего приложения преимущественно ограничивается функцией поиска. Вводим запрос — получаем список результатов. Сколько это потребует?

StackOverflow, 3,5 МБ:

Насколько потолстел JavaScript к 2024 году? - 13

NPM, 4 МБ:

Насколько потолстел JavaScript к 2024 году? - 14

Airbnb, 7 МБ

Насколько потолстел JavaScript к 2024 году? - 15

Booking.com, 12 МБ:

Насколько потолстел JavaScript к 2024 году? - 16

Но, Ники, скажут некоторые, бронирование — это же сложный процесс! Только взгляни на весь этот интерфейс, все эти фильтры и всплывающие уведомления о людях, опередивших тебя с бронью!

Ладно, хорошо. Возьмём что-нибудь попроще, например, Google. Одно текстовое поле, список ссылок. Так?

Что ж, это обойдётся вам в 9 МБ:

Насколько потолстел JavaScript к 2024 году? - 17

Просто чтобы вывести список ссылок.

▍ Простые приложения с одним действием

Google Translate представляет всего два блока для перевода текста и требует для этого 2,5 МБ:

Насколько потолстел JavaScript к 2024 году? - 18

ChatGPT представляет всего один текстовый блок — 7 МБ:

Насколько потолстел JavaScript к 2024 году? - 19

Ну да, ChatGPT сложно устроен. Но ведь на сервере, а не в браузере!

▍ Видео

Loom — 7 МБ:

Насколько потолстел JavaScript к 2024 году? - 20

YouTube — 12 МБ:

Насколько потолстел JavaScript к 2024 году? - 21

Сравните это с ресурсами, реально обеспокоенными производительностью — Pornhub, 1,4 МБ:

Насколько потолстел JavaScript к 2024 году? - 22

▍ Аудио

Думаю, для аудио в любом случае просто нужно 12 МБ:

SoundCloud:

Насколько потолстел JavaScript к 2024 году? - 23

Spotify:

Насколько потолстел JavaScript к 2024 году? - 24

▍ Электронная почта

Хорошо, видео и аудио — это тяжёлый материал (хотя, напомню — мы не измеряем контент, только JS…). Перейдём к более простым офисным задачам.

Google Mail нужно всего (всего!) 20 МБ:

Насколько потолстел JavaScript к 2024 году? - 25

Это же чёртов почтовый ящик! Как он может весить почти столько же, сколько Figma — сервис, который реализует кастомный рендеринг на базе С++/OpenGL?

Насколько потолстел JavaScript к 2024 году? - 26

И если вы думаете, что почта — это тоже сложно. Всё же обширный UI, много интерактивности. Может, 20 МБ — это нормально?

Нет!

Никак нет. Вот пример — FastMail, всё то же самое, но требует всего 2 МБ, в 10 раз меньше!

Насколько потолстел JavaScript к 2024 году? - 27

▍ Продуктивность

Хорошо, представим, что электронная почта — это нелёгкий случай. Как насчёт чего-то ещё проще, скажем, списка TODO (список задач)?

Встречайте — Todoist, 9 МБ:

Насколько потолстел JavaScript к 2024 году? - 28

Dropbox для вывода списка файлов в каталогах требуется 10 МБ:

Насколько потолстел JavaScript к 2024 году? - 29

Список паролей? На 1Password для этого нужно 13 МБ:

Насколько потолстел JavaScript к 2024 году? - 30

Карточки? Прибавьте ещё 0,5 МБ. Итого уже 13,5 МБ. Trello:

Насколько потолстел JavaScript к 2024 году? - 31

Хорошо, возможно, списки TODO тоже очень сложны? Может, тогда чаты?

Что ж, Discord требуется 21 МБ:

Насколько потолстел JavaScript к 2024 году? - 32

▍ Редактирование документов

Ладно, редактирование документов — непростая задача, не так ли? Для этого нужно реализовать перемещение курсора, синхронизацию и прочее.

Google Docs, 13,5 МБ:

Насколько потолстел JavaScript к 2024 году? - 33

Что-нибудь попроще? Notion, 16 МБ:

Насколько потолстел JavaScript к 2024 году? - 34

▍ Соцсети

Типичный размер кода, необходимого социальной сети для «обмена лайками», составляет примерно 12 МБ.

Twitter, 11 МБ:

Насколько потолстел JavaScript к 2024 году? - 35

Facebook, 12 МБ:

Насколько потолстел JavaScript к 2024 году? - 36

TikTok, 12,5 МБ:

Насколько потолстел JavaScript к 2024 году? - 37

Instagram крупнее Facebook, хоть и имеет в 10 раз меньше функций — 16 МБ:

Насколько потолстел JavaScript к 2024 году? - 38

LinkedIn. Это вообще блог? Платформа? Здесь есть поиск, обмен сообщениями, социальные функции. Как бы то ни было, его размер составляет 31 МБ:

Насколько потолстел JavaScript к 2024 году? - 39

▍ Отдельная категория — слоны

Порой сайты оказываются настолько нелепо и абсурдно большими, что заслуживают отдельной категории.

Например, Jira, программа для управления задачами — почти 50 МБ!

Насколько потолстел JavaScript к 2024 году? - 40

Они что, отправляют весь код Electron, компилируя его в WASM?

Но это не предел. Slack обходит Jira на 5 МБ, и мы получаем уже 55 МБ:

Насколько потолстел JavaScript к 2024 году? - 41

Да, это чат. Ну понимаете, список пользователей, сообщения, реакции. Всё то, что мы делали на голом HTML, когда JS ещё не изобрели.

И в современном мире это 55 МБ. Такое ощущение, что разработчики пытаются понять, сколько ещё бредятины они могут впихнуть в браузер, пока он не сломается.

И последнее — это прям снесло мне крышу. Каким-то странным образом react.dev начинается со скромных 2 МБ, но по мере прокрутки вниз-вверх размер страницы продолжает неограниченно расти. Просто ради прикола я довёл его до 100 МБ (JS-кода!), но вы можете на этом не останавливаться:

Насколько потолстел JavaScript к 2024 году? - 42
Видео

Что там происходит? Даже если этот ресурс выгружает и скачивает части статьи, как размер может так быстро расти? Сам текст весит, пожалуй, не более 50 КБ (то есть 0,05 МБ).

Обновление: мне сообщили, что это поведение не отражает типичный пользовательский опыт. Как правило, встроенные редакторы кода кэшируют содержимое после первой загрузки, и последующие загрузки обрабатываются уже из кэша на диске. То есть при прокручивании интернет-трафик вы не используете. Но эти 100 МБ всё равно раз за разом парсятся, анализируются и инициализируются.

▍ Как быстро мы деградируем?

Интересная получается картина! В 2015 году средний размер страницы приближался к размеру демки Doom 1 (2,5 МБ).

Насколько потолстел JavaScript к 2024 году? - 43
Источник

Ну а в текущем 2024-м вперёд вырывается Slack со своими 55 МБ, что сопоставимо с размером оригинального Quake 1, включая все ресурсы. Но сейчас это один только JS — для чата!

▍ А так ли это много — 10 МБ?

Честно говоря, после перечисления всех этих размеров 10 МБ уже не кажется мне таким уж большим объёмом. Похоже, что сейчас отправка 10 МБ кода является нормой.

Если предположить, что средняя строка кода составляет 65 символов, получится, что мы отправляем ~150,000 строк. На каждом сайте! Иногда просто для отображения статичного контента.

И это уже минифицированный код. Получается, для одного сайта мы имеем около 300К+ строк.

Но действительно ли современные сайты настолько сложны? Наглядный пример одностраничника, Google Maps, по современным стандартам является довольно скромным сайтом и весит всего 4,5 МБ:

Насколько потолстел JavaScript к 2024 году? - 44

Кто-то в Google серьёзно отстаёт от нынешних трендов. Будучи написанным с использованием современных технологий фронтенда, он должен весить не менее 20 МБ.

И если вы, как и я, подумали, что: «Figma — это действительно сложное фронтенд-приложение, поэтому у него должен быть большой объём JS-кода», то ошиблись. Тогда получается, что Gmail почти такой же сложный, как Figma, LinkedIn сложнее него в 1,5 раза, а Slack — в 2,5 раза.
¯_(ツ)_/¯

▍ Заключение

Я, как и все, приветствую возможности высокоскоростного интернета, но JS-код является тем материалом, который вашему браузеру нужно спарсить, сохранить в памяти и выполнить — естественно, затратив на это ресурсы. И эти люди ещё рассуждают о производительности и экономии заряда батареи…

Можете считать меня старомодным, но я твёрдо верю, что контент должен превосходить код по размеру. Если вы пишете статью объёмом в 10К символов, то вам не нужно в 1000 раз больше JS-кода для её рендеринга.

Вот на этом сайте всё сделано правильно:

Насколько потолстел JavaScript к 2024 году? - 45

Здесь загружается 0,1 МБ, и этого достаточно!

Тем не менее в том же самом интернете, в то же самое время, Gitlab требуется 13 МБ кода, а именно 500К строк JS, просто для отображения статичного лендинга.

Невероятно!

Автор: Дмитрий Брайт

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js