Ответ 1
Я хотел бы сделать это в течение длительного времени, и кажется, что с недавно представленной Firebase Functions Hosting Integration... мы все еще не можем делать то, что хотим. Но мы можем приблизиться!
Если вы прочитаете сообщение выше, вы можете увидеть, как мы теперь можем отредактировать firebase.json
перенаправить URL-адреса (ы), чтобы указать на функцию firebase, которая может построить страницу из уценки, хранящейся в firebase, и служить этому для клиента.
Дело в том, что это происходит при каждом запросе GET
для каждой страницы. Это глупо (для большей части статической страницы, как обычный блог). Мы хотим, чтобы статические страницы были мгновенно доступны, не ожидая, что функции сгенерируют что-нибудь (хотя это происходит очень быстро). Мы можем смягчить это, установив заголовок Cache-Control
на произвольно большое число с объектом response
, как в
res.set('Cache-Control', 'public, max-age=600, s-maxage=31536000');
Что скажет браузеру кэшировать результат в течение 10 минут, но CDN будет кэшировать его в течение года. Это почти решает проблему отсутствия предварительно рендерированных, мгновенно доступных страниц для всех, кроме первого удара, что повлечет за собой стоимость рендеринга. Кроме того, CDN может вытеснить ваш кешированный контент, если он определит, что недостаточно трафика, чтобы гарантировать его хранение.
Подходите ближе.
Но мы не совсем там, где должны быть. Скажем, вы публикуете свой пост и через несколько дней заметите опечатку? Ну, я думаю, ты очень хочешь. Ваш кешированный контент будет продолжать обслуживаться до конца года, если вы не сделаете что-то вроде:
Измените URL-адрес сообщения. Это, вероятно, плохая идея, так как она запишет любой SEO и сломает ссылки на страницу, которая уже находится в дикой природе.
Возможно, существует способ заставить CDN обновиться, возможно, добавив ваш процесс публикации публикации в блоге, включив в запрос javascript GET
запрос с чем-то нечетным в заголовке запроса, или, может быть, есть способ сделать это с функцией firebase в любое время, когда сообщение обновляется. Вот где я застрял.
Firebase использует Google Cloud Platform CDN, который включает механизм недействительность кэша, но я не знаю, что это легко доступно из функций - и даже если это так, он по-прежнему не решает выходить из кэша.
Лично я, вероятно, буду использовать настройку, которую я описал с предельным возрастом кэша CDN промежуточной длины. Это превосходит мой текущий подход отправки меток к клиенту и рендеринга локально с использованием (отличного) showdown.js, который по-прежнему очень быстрый, но требует JavaScript-клиент и несколько циклов процессора.
Надеюсь, у кого-то будет решение для этого (или кто-то из firebase может проскользнуть, нажав на хостинг из функций в следующую версию:)). Я обновлю свой ответ, если я его пригворю.