浏览器供应商是否针对 jQuery 进行了优化?
我知道这听起来很荒谬的反标准,但我可以想象浏览器供应商对内置在他们的 JS 编译器/解释器中的 jQuery 代码进行了优化。
例如,假设 JS 编译器/解释器看到 $('.blah > p'),浏览器可以说,嗯,我看到用户正在尝试抓取一个元素,而不是让 jQuery 进行所有浏览器检测,它可以只获取 [实际 DOM 对象],并立即返回 $([实际 DOM 对象])。
浏览器供应商是否针对 jQuery 进行了优化?
我知道这听起来很荒谬的反标准,但我可以想象浏览器供应商对内置在他们的 JS 编译器/解释器中的 jQuery 代码进行了优化。
例如,假设 JS 编译器/解释器看到 $('.blah > p'),浏览器可以说,嗯,我看到用户正在尝试抓取一个元素,而不是让 jQuery 进行所有浏览器检测,它可以只获取 [实际 DOM 对象],并立即返回 $([实际 DOM 对象])。
没有猜测$
会破坏任何$
用于不同目的的脚本。考虑这样的页面(这实际上是一个相对于在野外可以找到的非常弱的示例,但我认为它仍然很好地证明了难度):
<div class="bar">
<div class="foo">
<div class="bar">
How will the browser know to select this div with the selector '.bar .foo .bar', without actually running this script the way it is designed?
</div>
</div>
</div>
<script>
window.onload = function(){
var x = $('.foo');
console.log(x);
console.log(x.selector) // '.bar .foo .bar'
};
</script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
var $ = function(){
return arguments[0];
};
$ = (function($){
return function(selector){
return jQuery('.bar ' + selector + ' ' + $('.bar'));
}
})($);
</script>
浏览器提前知道要选择哪个 div 超出了优化范围。事实上,浏览器必须按照设计的方式运行脚本才能选择正确的 div。
然而,许多浏览器将 Javascript 编译为稍低级别的语言,例如 Java 或 C++ 代码。然后,如果浏览器下载并缓存 jQuery,一旦它被缓存,它就会在用户计算机上编译成一个表单。这不是一个jQuery
特定的优化,因为它会发生在任何缓存的脚本中,但对于大型脚本(如jQuery
.
目前没有浏览器供应商宣布这样的功能。
然而,这是可能的。您可以轻松地为 JS 引擎中最常用的 jQuery 版本存储已解析的 Javascript(IL/字节码,无论您在引擎中使用什么)以供参考,并且当传入函数与该签名匹配时,将其替换为本机版本。
我想您唯一需要考虑的是您将花费多少时间来实现它与现代 JIT 引擎的速度增益。因为它们中的一些已经将代码编译成某种本机形式,至少部分是这样,因此尚不清楚是否会有任何实质性的收益。