首页 > 编程语言 >[Javascript Performance] Optimisation and deoptimization

[Javascript Performance] Optimisation and deoptimization

时间:2022-12-03 23:24:47浏览次数:44  
标签:-- Javascript while mark deoptimization add iterations performance Performance

The optimizing compiler optimizes for what it’s seen. If it sees something new, that’s problematic. 

Seleting properties has some strange implications on performacne.

 

We have seen that runing this code, interpertor can optimze js runtime:

const { performance } = require('perf_hooks');

let iterations = 1e7;

const a = 1;
const b = 2;

const add = (x, y) => x + y;

performance.mark('start');

while (iterations--) {
  add(a, b);
}

performance.mark('end');

performance.measure('My Special Benchmark', 'start', 'end');

const [ measure ] = performance.getEntriesByName('My Special Benchmark');
console.log(measure);

 

 

So what if we do:

performance.mark("start");

while (iterations--) {
  add(a, b);
}

add("foo", "bar"); // added this line

performance.mark("end");

So when we call add('foo', 'bar')we see deoptimizing happens.

 

If we do:


performance.mark("start");

while (iterations--) {
  add(a, b);
}

iterations = 1e7;

while (iterations--) {
  add(a, b);
}

performance.mark("end");

 We can see the result:

entryType: 'measure',
startTime: 41.05515700019896,
duration: 15.343078000470996,

 

If we add:

performance.mark("start");

while (iterations--) {
  add(a, b);
}

add('foo', 'bar') // add this back

iterations = 1e7;

while (iterations--) {
  add(a, b);
}

performance.mark("end");

Result:

  entryType: 'measure',
  startTime: 40.564633999951184,
  duration: 32.49434900004417,

It doubles the runtime from 18ms to 32ms.

 

If we add:

performance.mark("start");

%NeverOptimizeFunction(add); // add this line

while (iterations--) {
  add(a, b);
}

add("foo", "bar");

iterations = 1e7;

while (iterations--) {
  add(a, b);
}

performance.mark("end");

Run: node --allow-natives-syntax benchmark.js  

We can see the result:

  entryType: 'measure',
  startTime: 44.788716999813914,
  duration: 143.67414100002497,

If we don't allow JS engine to optimize our code, then it would be pretty slow

标签:--,Javascript,while,mark,deoptimization,add,iterations,performance,Performance
From: https://www.cnblogs.com/Answer1215/p/16949017.html

相关文章

  • [Javascript Performance] How to benchmark code performance
    Code:benchmark.jsconst{performance}=require('perf_hooks');//SETUP......
  • #yyds干货盘点#JavaScript 网页异常捕获
    一、异常大概分类一般我们想要捕获的异常大概分类:语法错误onerror事件代码块与​​语法错误代码块​​不在一起,例如trycatche或者同在一个代码块,但是​​语法错误代码块​......
  • 读《你不知道的JavaScript》
    读《你不知道的JavaScript》Part1作用域与闭包词法作用域定义在词法阶段的作用域。换句话说,词法作用域就是由你在写代码时将变量和块作用域写在哪里来决定的。词......
  • Javascript随机排列数组-要求概率一样
    今天做了一道很有意思的题。如何在Js中实现一个随机排列数组的算法,要求排列之后每一次组合出现的概率相同。完整题目如下:etarr=[1,2,3];shuffle(arr);//arr=[3......
  • JavaScript入门④-万物皆对象:Object
    01、Object对象Object是JavaScript的一种数据类型,它用于存储各种键值集合和更复杂的实体,是一组数据和功能的集合。JS中几乎所有对象都是继承自Object,Array、RegExp、......
  • Web入门:JavaScript搜索展开
    欢迎来的我的小院,恭喜你今天又要涨知识了!案例内容利用JavaScript实现搜索框的移动展开。演示学习<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF......
  • javascript: jquery-confirm.js
     <!doctypehtml><html><head><metacharset="utf-8"><metaname="viewport"content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.......
  • javascript中generator快速小结
    1基本例子  function*generatorFunc(){console.log("任务一");yield1;console.log("任务二");yield*generatorSubFunc();console.log("任务三");return......
  • JavaScript入门③-函数(2)原理{深入}执行上下文
    00、头痛的JS闭包、词法作用域?被JavaScript的闭包、上下文、嵌套函数、this搞得很头痛,这语言设计的,感觉比较混乱,先勉强理解总结一下......
  • Javascript 浏览器本地导出文件
    浏览器本地导出文件/***导出文件*@paramdata数据*@paramname文件名*/exportRaw:function(data,name){varurlObject=window.URL||window.web......