浏览器供应商是否针对jQuery优化浏览器?

时间:2012-06-22 16:44:24

标签: javascript jquery browser cross-browser

浏览器供应商是否针对jQuery进行优化?

我知道这听起来很荒谬,但我可以想象浏览器供应商对其JS编译器/解释器中内置的jQuery代码进行了优化。

例如,假设JS编译器/解释器看到,$('。blah> p'),浏览器可以说,嗯,我看到用户正试图抓取一个元素,而不是让jQuery做所有浏览器检测,它可以只取[实际DOM对象],并立即返回$([实际DOM对象])。

2 个答案:

答案 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引擎的速度提升。因为它们中的一些已经将代码编译成某种原生形式,至少部分地,不清楚是否会有任何实质性的收益。