私は長い間これをやりたいと思っていましたが、新しく公開されたFirebase Functions Hosting Integrationで、うまくいきます。しかし、我々はを閉じることができます!
上記の記事を読んでいれば、firebase.json
のURLをfirebase関数を指すようにリダイレクトする方法を見ることができます。firebase関数は、firebaseに格納されたmarkdownからページを構築し、クライアント。
問題は、各ページごとにGET
リクエストごとに発生します。どちらがダムなのか(典型的なブログのような大部分は静的なページの場合)。 の静的なページを即座ににする必要はありません。機能が何かを生成するのを待つ必要はありません。私たちは10分間の結果をキャッシュするために、ブラウザを教えてくれます
res.set('Cache-Control', 'public, max-age=600, s-maxage=31536000');
のようresponse
オブジェクトに任意の多数にCache-Control
ヘッダを設定することで、これを緩和することができますが、CDNは、のためにそれをキャッシュします年。これは、レンダリングコストを招くような、最初のヒット以外のすべてのページについて、プリレンダリングされた即座に利用可能なページを欲しいという問題をほぼ解決します。さらに、CDNは、キャッシュされたコンテンツを格納するのに十分なトラフィックがないと判断すると、キャッシュされたコンテンツを追い出すことができます。
近づいています。
しかし、私たちはどこにいる必要はありません。あなたの投稿を公開して数日後に、タイプミスに気づいたとしますか?まあ、私はあなたがほっとしていると思います。
投稿のURLを変更する - これはおそらく悪い考えです。これは、SEOを壊し、ページへのリンクを壊すためですすでに野生のものです。
CDNを強制的に更新する方法があるかもしれません。おそらく、あなたの「ブログ投稿の公開」プロセスを拡張して、リクエストヘッダに何か奇妙なものが含まれているjavacript GET
リクエストを含んでいるかもしれません。投稿が更新されるたびにfirebase関数が呼び出されます。これは私が立ち往生する場所です。
FirebaseはCache invalidationのメカニズムを含むGoogleのクラウドプラットフォームCDNを使用していますが、これは機能からすぐに利用できることはわかりません。たとえそれがキャッシュから追い出されても解消できません。
個人的には、私はおそらく中間長のCDNキャッシュ保存期間制限で説明した設定を使用します。これは、マークダウンをクライアントに送信し、(非常に優れた)showdown.jsを使用してローカルにレンダリングする現在のアプローチよりも勝っています。これはまだ非常に高速ですが、クライアント側のjavascriptと数cpuサイクルが必要です。
うまくいけば、誰かがこれを解決してくれることを望んでいる(あるいはfirebaseの誰かが、関数から次のリリースにホストすることになるかもしれない:))。私はそれが釘付けになったら私の答えを更新します。
私は本当に再構築時にキャッシュを混乱させたくありません。アプリケーションはできるだけシンプルでなければなりません。firebaseデータベースの更新を聞き、静的なHTMLを再生成します。ソリューションが機能しているにもかかわらず、適切な統合が行われるのを待っています。それまでは、配信、リスニング、再コンパイルを行うノード/エクスプレスサーバーを選択しています。 – phippu