2017-03-22 5 views
8

firebase関数からの静的資産をfirebaseホスティングに配備することは可能ですか?firebase関数からのfirebaseホスティングへの配備

使用例:静的なHTMLファイルを含むブログ。ブログコンテンツとメタ情報は、データベースに格納されます(コンテンツはマークダウンとして)。パブリッシュまたは更新時に、firedown関数がトリガされ、マークダウンを解析し、ブログ投稿用の静的なhtmlファイルを生成し、firebaseホスティングにデプロイします。デプロイメント後、関数はライブURLをデータベースに格納します。

このワークフローは可能でしょうか?現在のドキュメントでは、関数からのデプロイについては何も見つかりません。

回避策として、私はtravis-ciによる設定を想像することができました。この関数はtravisの再構築をトリガーし、travisは静的資産を構築し、それらをfirebaseホスティングにデプロイしますが、これは膨大なオーバーヘッドのようです。

また、データベースからマークダウンコンテンツをプルすることもできますが、クライアントでビルドすることもできますが、最初の読み込み時間の理由から静的ファイルアプローチを試してみたいと思います。

答えて

1

私は長い間これをやりたいと思っていましたが、新しく公開された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の誰かが、関数から次のリリースにホストすることになるかもしれない:))。私はそれが釘付けになったら私の答えを更新します。

+0

私は本当に再構築時にキャッシュを混乱させたくありません。アプリケーションはできるだけシンプルでなければなりません。firebaseデータベースの更新を聞き、静的なHTMLを再生成します。ソリューションが機能しているにもかかわらず、適切な統合が行われるのを待っています。それまでは、配信、リスニング、再コンパイルを行うノード/エクスプレスサーバーを選択しています。 – phippu

関連する問題