オンザフライでマークアップをレンダリングするか、htmlを保存しますか?
質問
ユーザーが入力したマークアップを処理する際に何が効果的か、たとえばwikiまたはマークダウン。両方のCPU <!> amp;データベーススペースのコストなので、どちらに行くべきかわかりません。
-
マークアップをデータベースに保存<!> amp;にレンダリングする 各ページビューのサーバー上のhtml。 (データベース容量は少ないがCPU使用率が高い)
-
マークアップをデータベースに保存<!> amp;にレンダリングする JavaScriptを使用するクライアント上のhtml。 (おそらく実装が難しい)
-
レンダリングされたHTMLのみを データベース<!> amp;マークアップに戻す場合 編集が必要です。 (繰り返しますが、実装が難しい場合があります)。
-
両方のhtml <!> amp;のマークアップ データベース。 (データベーススペースを2倍にします)。
-
他の何か。
(MFC <!> amp; Linqtosqlを使用しています。)
解決
これをWikiマークアップとしてデータベースに保存し、変換されたHTML出力をWebサーバーのキャッシュ内のメモリに保持します。どちらのWebテクノロジーを使用していても、すべてこれをサポートする必要があります-URL、ID、または同様のものをキーとする基本タプル(ハッシュテーブル)。
他のヒント
マークアップを保存し、HTMLサーバー側をその場でレンダリングします。サーバー側のキャッシュを使用すると、実行する実際の計算量を削減でき、合理的なセマンティクスを持ち、必要に応じてtext / html / pdfにレンダリングできる表現を保持できます。
最も簡単な方法は、マークアップを保存し、レンダリングのタイムスタンプを使用してHTMLをオンデマンドでキャッシュ(ディスク上またはmemcachedオンジェクト内に)にレンダリングすることです。そうすれば、マークアップが変更されたために再度レンダリングする必要があるかどうか、またはキャッシュされたHTMLを提供するだけかどうかを確認できます。これが、ほとんどのRuby on Railsアプリ/ CMSの動作方法です。
RSTマークアップとしてデータベースに保存し、必要に応じてHTMLに変換します。おそらくフロントエンド(たとえば、JSP、PHP、Django、またはテンプレート言語をレンダリングする他の何か)を使用しているため、RSTの追加処理によってオーバーヘッドが大きくなることはありません。
複雑なキャッシングメカニズムの実装を決定する前に、マークアップをHTMLにレンダリングする実際のオーバーヘッドを実際に測定します。
<!> quot;(データベース容量は少ないがCPU使用率が高い)<!> quot;測定された事実ではなく、事実ではないことが判明する可能性があります。