Я провёл аудит веб-сайта CEO Y Combinator Гарри Тана после того, как он похвастался, что выдаёт по 37 тысяч строк кода в день, и держит этот темп уже 72 дня. В статье я покажу, как на самом деле выглядят в продакшене 78,4 тысячи строк ИИ-слопа. При загрузке одной главной страницы http://garryslist.org в 169 запросах загружается 6,42 МБ. И это для простого новостного блога с рассылкой.

Главная страница отправляет каждому посетителю по 28 ТЕСТОВЫХ ФАЙЛОВ. Не просто результатов тестов, а реальных тестовых обвязок. membership_form_controller.test (89 КБ), media_grid_controller.test (31 КБ), story_composer_controller.test (19 КБ)... 300 КБ кода тестов. Все они возвращают HTTP 200. Все активно скачиваются, файл HAR не обманет.

Кроме того, она скачивает 78 контроллеров Stimulus, в том числе для...
ИИ-генерации изображений;
извлечения голоса;
генерации видео;
лепестковых диаграмм;
проверки черновиков;
вычислений Voice Lab;
и буквально шаблона «Hello World» Rails (
hello_controller.js, 157 байт).
Итого передаётся 154 КБ. Ничего из этого не применяется на главной странице, но браузер всё равно это всё загружает.

Больше всего мне нравится история с логотипом. Один и тот же медведь загружается... 8 раз на каждую загрузку страницы: 3 копий в PNG, 2 варианта в WebP, 2 варианта в AVIF и фавиконка 512x512.
Один из файлов AVIF имеет размер 0 байт.
Пустой файл.
Ошибка преобразования файла, которую опубликовали и загружают в продакшене. Полный объём: 654 КБ на два логотипа.

Но основную нагрузку составляют изображения из статей, передаваемые с CloudFront в виде сырых несжатых PNG:
Изображение 1: PNG на 2,07 МБ.
Изображение 1: PNG на 1,99 МБ.
...
Браузер отправляет > Accept: image/avif, image/webp, в явной форме запрашивая современные форматы. Сервер игнорирует просьбу и отправляет 4 МБ сырых PNG. В формате WebP они суммарно весили бы 200-400 КБ. И это 4 МБ, потраченных впустую лишь на два изображения.

Другие интересности из аудита:
520 KB редактора форматированного текста Trix (передаётся 120 КБ), загружаемые на страницу, предназначенную только для чтения (это попало сюда из бэкенда?).
47 изображений с пустым
alt=""... на сайте, «вовлекающем в общественную жизнь».Всё содержимое страницы рендерится в DOM дважды (мобильная + десктопная версии).
Дублирующиеся теги
<title>в<head>.Пустой файл CSS (только комментарий с манифестом, хэширован по содержимому и передаётся сервером).
Аналитика PostHog проксится через
/s/, чтобы... обходить блокировщики рекламы, как написано в его собственном комментарии к коду.

Исходный код в буквальном смысле содержит такой комментарий: // Load SDK from our proxy (bypasses ad blockers) . Некоммерческая «организация, занимающаяся вовлечением граждан в общественную жизнь» согласно классификации 501(c)(4) Налоговой службы США, активно старается обходить инструменты обеспечения конфиденциальности своих читателей, чтобы следить за ними пристальнее. При этом она передаёт в продакшен тестовые файлы, пустое поломанное изображение и 4 МБ сырых PNG.

Для контекста: главная страница Hacker News, поддерживаемая собственной организацией Гарри Y Combinator, делает 7 запросов и передаёт 12 КБ. Страница Гарри делает 169 запросов и передаёт 6,42 МБ: она в 562 раз тяжелее. Даже если не учитывать изображения, 73% передаваемого объёма — это мусор.

ИИ и LLM — потрясающие инструменты, я сам пользуюсь ими каждый день и даже сжёг в прошлом году больше трёх миллиардов токенов (2,5 миллиарда в одном только Cursor), но ИИ увеличивает масштабы того процесса, который ты подаёшь ему на вход, в том числе и отсутствие процесса. Сайт Гарри — пример того, что происходит, когда заменяешь ревью кода счётчиком ежедневного выпуска фич. Ударный режим Duolingo для git push. Автоматизации делают именно то, что им скажут. И никто не сказал им, что нужно остановиться.
Мой аудит касается только клиентской части, того, что загружает браузер. Я не прочитал ни одной строки слопа исходников.
Дополнительный контекст: когда семнадцатилетний разработчик (@xiaonweb) вежливо сообщил, что хвастаться количеством строк глупо, Гарри в ответ публично обозвал его «зарабатывающим хайп» подростком. Этот подросток написал в 17 лет движок браузера на Rust: токенизатор HTML, каскад CSS, структуру box model и GPU-рендерер на wgpu, после чего опубликовал технический анализ, продемонстрировав более глубокое понимание работы веба, чем у большинства сениор-разработчиков, с которыми я работал (в том числе и у меня, потому что я никогда не копал вглубь).
Сравните это с нацеленным на «выпуск» человеком, президентом Y Combinator, многомиллиардного вершителя судьб стартапов, который массово генерирует код при помощи 113 сессий Claude в неделю, считает строки, как стрики в Duolingo, и выпускает в продакшен файлы тестов, пустые 0-byte AVIF и 4 МБ несжатых PNG. Да, отлично, оскорбляй подростка на своём основном аккаунте.

