一般来说,在“严格模式”下在浏览器中执行 javascript 会提高性能吗?是否有任何主要浏览器进行了额外的优化或使用任何其他技术来提高严格模式下的性能?
稍微改写一下,除了其他目标之外,严格模式是否旨在允许浏览器引入额外的优化或其他性能增强?
一般来说,在“严格模式”下在浏览器中执行 javascript 会提高性能吗?是否有任何主要浏览器进行了额外的优化或使用任何其他技术来提高严格模式下的性能?
稍微改写一下,除了其他目标之外,严格模式是否旨在允许浏览器引入额外的优化或其他性能增强?
除了其他目标之外,严格模式是否旨在允许浏览器引入额外的优化或其他性能增强?
我不确定它是否打算这样做,尽管我认为答案是肯定的。
但我可以肯定地说,严格模式确实提供了这些机会,浏览器会实现它们——不管提供这些机会是否是 ECMA 委员会的一个有意目标。但是,我不希望立即抓住所有这些机会。在许多情况下,口头禅可能是首先正确,然后是性能,因为严格模式目前并未广泛使用。(我在 Mozilla 的 JavaScript 引擎上工作并实现了严格模式的各个部分,我们以这种方式实现它作为一般规则——尽管如果我尝试过,我可能会想到一两个例外。)
在严格的模式是不是真正的性能,它严格变种的语言,它的主要目标是避免了被认为是容易出错的功能。
基本上它的目标是使语言更安全,引入了很多语义更改,还进行了额外的错误检查,并且错误是嘈杂的,在非严格代码中,事情只会默默地失败。
关于性能,我觉得浏览器厂商现在很难实现严格模式,问题是JS引擎大多基于ECMAScript 3,实现严格模式并不容易,因为严格的范围非常灵活,您可以混合使用非严格和严格的代码。
也可以看看:
根据这个测试,“严格模式”可以快 25% 左右。
<div id="a">
Q
</div>
<div id="b">
Q
</div>
<script>
Benchmark.prototype.setup = function() {
function d(i) {
var x = '999';
y = eval("y = 8;");
var z = x + y + i;
document.getElementById('a').innerHTML = z;
}
function c(i) {
'use strict'
var x = '999';
var y = eval("y = 8;");
var z = x + y + i;
document.getElementById('b').innerHTML = z;
}
};
</script>
这可以在这里测试:http : //jsperf.com/strict-mode
<script>
Benchmark.prototype.setup = function() {
var nonstrict = (function() {
return function (arg1) {
var index;
for (index = 1; index < arguments.length; ++index) {
arguments[0] += arguments[index];
}
return arguments[0] - arg1;
};
}());
var strict = (function() {
"use strict";
return function (arg1) {
var index;
for (index = 1; index < arguments.length; ++index) {
arguments[0] += arguments[index];
}
return arguments[0] - arg1;
};
}());
var result;
};
</script>
这是 jsPerf 测试:http ://jsperf.com/strict-mode-arguments
大多数情况下,没有。如果您仔细检查 ECMAScript 5 标准文档,您会注意到伪代码算法中几乎所有出现的严格模式都相当于:
if (isStrictMode) {
//throw an (early) SyntaxError or TypeError
}
else {
//return
}
对此有两点需要注意: