代码之家  ›  专栏  ›  技术社区  ›  Agnius Vasiliauskas

如何解释同一JavaScript代码片段的Chromium和Firefox性能评测结果

  •  0
  • Agnius Vasiliauskas  · 技术社区  · 5 年前

    作为一名3年多的web开发人员,我现在意识到,我对浏览器一无所知,而且它们在许多方面可能会有所不同。为了说明这一点,我尝试构建一个“公平测试”来分析JavaScript奇偶校验代码,哪个版本的代码运行得更快 x => (x%2)==0 还是那个 x => (x&1)==0 .
    我怀疑只检查最右边的位,应该是更快的方法,但在浏览器世界。。。你可能永远不会知道。下面是完整的JavaScript测试代码:

    function evaluateSpeed(func) {
        const times = 100000000;
        const salt = 96145;
        let check = salt;
        for (let i = 0; i < times; i++) {
            check ^= salt + (i&0xff)<<(1+func(i));
        }
        return check;
    }
    
    function evenStd() {
        return evaluateSpeed(x => (x%2)==0);
    }
    
    function evenEff() {
        return evaluateSpeed(x => (x&1)==0);
    }
    
    function test() {
        let y1 = evenStd();
        let y2 = evenEff();
        if (y1 !== y2) {
            throw new Error('Semantic error !');
        }
        else {
            document.write("Test is done !");
        }
    }
    test();
    

    下面是Chromium web浏览器中的分析结果:

    enter image description here

    令我惊讶的是 evenEff() (位检查功能)运行15次 更慢的 evenStd() (模数除以2函数)铬!以下是Firefox浏览器中相同代码的分析结果:

    enter image description here

    在Firefox中,我看到了预期的结果 伊文夫() 运行约2倍 更快 而不是替代版本 标准() . 问题来了,Chromium浏览器的引擎盖下到底发生了什么?为什么会有这么奇怪的结果?它与代码缓存有关吗?也许剩下的运营商是更好的卸载到GPU核心铬案或什么?或者只是测试不够公平,不兼容跨浏览器?

    0 回复  |  直到 5 年前