浏览器供应商是否针对jQuery优化了他们的浏览器

Do browser vendors optimize their browser against jQuery?

本文关键字:浏览器 优化 他们的 jQuery 供应商 是否      更新时间:2023-09-26

浏览器供应商是否针对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引擎相比的速度提升。因为他们中的一些人已经将代码编译为某种本机形式,至少部分编译,所以不太清楚是否会有任何实质性的收益。