2013-06-16 11 views
6

FireFoxで読み込まれたWebページで直接実行するよりも、同じJavaScriptコードがFireFoxアドオン(アドオンSDKを使用)でかなり遅いのはなぜですか?例えばFireFoxアドオンでJavaScriptがFireFoxに読み込まれたWebページより遅いのはなぜですか?

、このコード:

function isPrime(number) { 
    var i, 
     prime = true; 
    for(i = 2 ; i < number ; ++i) { 
     if(number % i === 0) { 
      prime = false; 
     } 
    } 
    return prime; 
} 

function sumFirstPrimeNumbers(x) { 
    var i, 
     sum = 0; 
    for(i = 1 ; i <= x ; ++i) { 
     if(isPrime(i)) { 
      sum += i; 
     } 
    } 
    return sum; 
} 

var sum = sumFirstPrimeNumbers(15000); 

console.log(sum); 

は、Firefoxで開いたWebページで実行するために2秒未満がかかりますが、アドオンFirefoxで実行するのに約15秒かかります。

私はコードがより良いかもしれないことを知っていますが、それはどれだけ遅いかを示すための単なる例です。

なぜFireFoxアドオンが遅いのですか?

私は上記のように、このコードを変更することなく、高速化する方法はありますか?

更新:

アドオンSDKに関連すると思われます。別のテストを行いました。アドオンSDKを使用しないアドオンで同じコードを実行し、コードは約3秒で実行されます。

なぜアドオンSDKを使用しているアドオンとそれを使用していないアドオンの間に大きな違い(3秒対15秒)がありますか?特権コードについてjavascript.options.methodjit.chrome(拡張子)と信頼できないコード(Webページ)のためのjavascript.options.methodjit.content

+0

を見るためにバグが、アドオンではJavaScriptを完全にJITを防ぐためのFirefoxの現在のバージョンでもありますか?ブラウザが起動していたために負荷がかかっていましたか? –

+0

私はたぶん愚かなことを言っているでしょうし、確かに誰かが私を反証するでしょうが、アドオンがないうちにウェブページが 'isPrime'の結果を"キャッシュ "する可能性はありますか? –

+0

このコードは、ブラウザの起動時に読み込まれました。しかし、私はボタンクリックでこのコードを実行しようとしたが、それは遅いです。キャッシュがあるかどうかわかりません。 – antoyo

答えて

1

は、2人のJavaScriptの最適化を制御する(about:configページからアクセス可能)好みがあります。

Firefoxの一部のバージョンは、デフォルトで無効になっています。

javascript.options.methodjit.chromeを確認して、trueに設定されているかどうかを確認してください。

+2

この回答は詳細を必要とします。この事前選択肢が何をしているか、どのようにそれを見つけるかなどをOPに説明してください。そうでなければ、答えは答えではなくコメントでなければなりません。 – Spudley

+0

それは本当です。どういう意味ですか? – antoyo

+0

@antoyo JavaScript JIT(または少なくとも1つ、Firefoxにはいくつかの点でトリガされているものがいくつかあります)は、拡張機能やWebページで個別に無効にすることができます。したがって、WebページのコードがJITされている可能性があり、拡張モジュールのコードがJITされていない可能性があります。 –

関連する問題