1

Converter オブジェクトをキャッシュする意味はありますか? 建設費はどのくらいかかりますか?それとも私はこれを行うことができますか?

function convertMarkdown(str) {
    var converter = new Markdown.Converter();
    return converter.makeHtml(str);
}
4

2 に答える 2

3

コンバーター オブジェクトは、かなり安価に作成できます。通常、主要な初期化は行われません。私の(適度に頑丈な)マシンでの簡単な測定:100万個のコンバーターオブジェクトを作成するには、

  • Chrome は 8 秒 (5x) 必要です
  • Opera は 14 秒必要です (10x)
  • IE は 4 秒 (3x) 必要です
  • Safari 5 は 2.5 秒 (5x) 必要
  • Firefox は 44 秒 (20 倍) 必要です

したがって、最も遅い場合でも、オブジェクトあたりわずか 44µs です。括弧内の数字は、「new Date()代わりに構築する場合と比較して、これは大まかにどれくらい遅いですか?」を意味します。

したがって、ほとんどの場合、これがボトルネックになることはなく、Markdown をたまにしか変換しないのであれば、実質的な違いはありません。

コンバーター オブジェクトを使用する実際のコストと比較します。"Hello"1 つのコンバーター オブジェクトを作成し、文字列(この文字列には書式設定さえ含まれていないことに注意してください) を 100 万回処理するのにかかる時間を測定します。

  • Chrome には 13 秒必要です
  • Opera は 86 秒必要です
  • IE は 17 秒必要です
  • Safari 5 は 25 秒必要
  • Firefox は 200 秒必要

いくつかの「実際の」Markdownデータ(この回答の内容)を100万回処理するには、Chromeは800秒程度必要です(他のブラウザではこれを測定しませんでした)。したがって、実際の使用では、コンバーターの構築時間は全体的なパフォーマンスとはあまり関係がありません。

実際に 1 回か 2 回しか呼び出していない場合を除き、個人的にはオブジェクトをキャッシュします

比較

var s = new Markdown.Converter().makeHtml(src);

対。

var s = myConverter.makeHtml(src);

または(アンドレアスの答えを使用)

var s = convertMarkdown(src);

– より大きなコンテキストでそのコードをざっと見ると、最初のバージョンをもう一度見て、オブジェクトの作成が行の目的の二次的なものであることに気付く必要があります。

また、コンバーター オブジェクトにプラグインを登録している場合、作成には複数のステートメントが必要になるため、オブジェクトを 1 回だけ作成する方が適しています。

于 2013-06-06T07:40:12.313 に答える