Лёгкая версия Медузы

Лёгкая версия новостного издания Медуза.

Update: О лёкой Медузе написали на Медузе.

Идея

Звонит мне на днях мама и спрашивает, где можно почитать новости, что в России да в мире происходит. Советую загуглить Медузу, как один из вариантов адекватных СМИ. Перезванивает мне через полчаса и говорит, что ни на её пятилетнем смартфоне, ни на первом iPad Mini сайт не открывается.

ОС на этих устройствах давно не обновлялся, браузер соответственно тоже. И, как выяснилось, новостной сайт просто ломается и не загружает основную ленту.

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

Делаем

Первое, что сразу пришло в голову, чем сразу вдохновился — это текстовая версия NPR, которая появилась после событий 11 сентября, чтобы снизить нагрузку и оставаться онлайн и о которой много говорили во время урагана Ирма в конце 2017 года.

Но сначала надо было разобраться, как получать данные. Посмотрев на то, как грузится сайт, можно сразу понять, что там просто прилетает json и после этого рендерится страничка. А через девтулзы не составляет труда узнать какие энпойнты дёргаются. Благо ещё они не запрещают кросс-доменные запросы.

Для себя решил, что лёгкая версия — это просто заранее сгенерированные статичные странички. Конечно, без аналитики и скриптов. На главной будут выводиться последние 20 новостей, и обновлять ленту каждые полчаса.

В роли генератора статики выбрал Next.js, и чтобы далеко не ходить Vercel как хостинг, где уже лежит телеграм-бот.

Next.js мне позволил опустить шаг с тем, как мне ребилдить каждые полчаса сайт для актуализации главной. С помощью постепенной регенерации (incremental static regeneration) сайт сам ребилдит главную в фоне, если каждые полчаса кто-то заходит на сайт.

Страница конкретной новости при этом генерируется по запросу. Если какая-то страница запрашивается первый раз, то выводится сообщение, что она будет готова через несколько секунд. Так как не используется никаких скриптов, придётся нажать кнопку для перезагрузки страницы.

Все последующие запросы к этой странице сервер будет отдавать уже готовую статику.

Так выглядит страница конкретной новости

И тут появляется приятный сайд-эффект: если открыть любую статью на Медузе и заменить meduza.io на mdz.vercel.app в адресной строке, то можно получить облегчённую версию этой статьи.

Чтобы полностью избавиться от клиентских скриптов я использовал экспериментальную функцию.

Планы

Сейчас не все рубрики/форматы поддерживаются. На таких страницах об этом выводится сообщение с предложением перейти на оригинальный источник.

Ещё не решён вопрос с эмбедами, например, вставленными в статьи твитами или youtube-видео. Видео скорее всего так и буду вставлять, а твиты надеюсь инлайнить прям в страницу, чтобы обойтись без скриптов и iframe.

(Надеюсь, Медуза не обидится)

Изначально статья была написана для Вастрик.Клуба