6

我想知道为什么相同的 JavaScript 代码在 FireFox 插件(使用插件 SDK)中比直接在 FireFox 中加载的网页中运行要慢得多。

例如,这段代码:

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 中打开的网页中运行不到 2 秒,但在 FireFox 插件中运行大约需要 15 秒。

我知道代码可能会更好,但这只是说明它有多慢的一个例子。

为什么 FireFox 加载项这么慢?

有什么方法可以更快地获得它(无需更改此代码,因为正如我上面所说,它只是一个示例)?

更新:

它似乎与 Add-on SDK 有关。我做了另一个测试:我在一个不使用附加 SDK 的附加组件中执行了相同的代码,并且代码在大约 3 秒内执行。

为什么使用附加 SDK 的附加组件和不使用它的附加组件之间存在如此巨大的差异(3 秒对 15 秒)?

4

2 回答 2

1

当前版本的 firefox 中还有一个 bug,它会阻止插件中的 javascript 的完整 JIT,有关详细信息,请参阅https://bugzilla.mozilla.org/show_bug.cgi?id=913182

于 2013-09-06T18:56:04.517 回答
1

有两个首选项(可从about:config页面访问)控制 javascript 优化:javascript.options.methodjit.chrome特权代码(扩展)和javascript.options.methodjit.content不受信任的代码(网页)。

某些版本的 Firefox 默认禁用前者。

检查javascript.options.methodjit.chrome它是否设置为true.

于 2013-06-16T20:00:01.123 回答