浏览器供应商是否针对jQuery进行优化?
我知道这听起来很荒谬,但我可以想象浏览器供应商对其JS编译器/解释器中内置的jQuery代码进行了优化。
例如,假设JS编译器/解释器看到,$('。blah> p'),浏览器可以说,嗯,我看到用户正试图抓取一个元素,而不是让jQuery做所有浏览器检测,它可以只取[实际DOM对象],并立即返回$([实际DOM对象])。
答案 0 :(得分:4)
不要猜测$
做什么会破坏使用$
用于不同目的的任何脚本。考虑一个页面like this(这实际上是一个非常弱的例子,相对于可以在野外发现的内容,但我认为它仍然很好地证明了这个难度):
<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
等大型脚本的优化更为重要。
答案 1 :(得分:0)
目前没有浏览器厂商宣布这样的功能。
但是,有可能。您可以轻松地存储参考解析的Javascript(IL /字节码,无论您在引擎中使用什么),用于JS引擎内最常用的jQuery版本,当传入函数与该签名匹配时,将其替换为本机版本。我想你唯一需要考虑的是你花了多少时间来实现它与现代JIT引擎的速度提升。因为它们中的一些已经将代码编译成某种原生形式,至少部分地,不清楚是否会有任何实质性的收益。