V8常见去优化原因一览

简介:

原作者:江凌

V8 bailout reasons

v8 bailout reasons 的例子, 解释和建议. 帮助alinode的用户根据 CPU-Profiler 的提示进行优化。

索引

Bailout reasons

Bailout reasons

Assignment to parameter in arguments object

  • 简单例子
// sloppy mode only
function test(a) {
  if (arguments.length < 2) {
    a = 0;
  }
}
  • Why

    • 只会在函数中重新赋值参数发生。
  • Advices

    • 你不能给变量 a 重新赋值.
    • 最好使用 strict mode .
    • V8 最新的 TurboFan 会有优化 #1.

Bad value context for arguments value

  • 简单例子
// strict & sloppy modes
function test1() {
  arguments[0] = 0;
}

// strict & sloppy modes
function test2() {
  arguments.length = 0;
}

// strict & sloppy modes
function test3() {
  return arguments;
}

// strict & sloppy modes
function test4() {
  var args = [].slice.call(arguments);
}

// strict & sloppy modes
function test5() {
  var a = arguments;
  return function() {
    return a;
  };
}

ForInStatement with non-local each variable

  • 简单例子
// strict & sloppy modes
function test1() {
  var obj = {};
  for(key in obj);
}

// strict & sloppy modes
function key() {
  return 'a';
}
function test2() {
  var obj = {};
  for(key() in obj);
}

Object literal with complex property

  • 简单例子
// strict & sloppy modes
function test() {
  return {
    __proto__: 3
  };
}
  • Why
  • Advices

    • 简化 Object。

ForInStatement is not fast case

  • 简单例子
for (var prop in obj) {
  /* lots of code */
}
  • Why

    • for 循环中包含太多的代码。
  • Advices

    • for 循环中的提取代码提取为函数。

Reference to a variable which requires dynamic lookup

  • 简单例子
// sloppy mode only
function test() {
  with ({x:1}) {
    return x;
  }
}
  • Why

    • 编译时编译定位失败,Crankshaft需要重新动态查找。#3
  • Advices

    • TurboFan可以优化。

TryCatchStatement

  • 简单例子
// strict & sloppy modes OR // sloppy mode only
function func() {
  return 3;
  try {} catch(e) {}
}
  • Why

    • try/catch 使得控制流不稳定,很难在运行时优化。
  • Advices

    • 不要在负载重的函数中使用try/catch.
    • 可以重构为 try { func() } catch

TryFinallyStatement

  • 简单例子
// strict & sloppy modes OR // sloppy mode only
function func() {
  return 3;
  try {} finally {}
}

Unsupported phi use of arguments

  • 简单例子
// strict & sloppy modes
function test1() {
  var _arguments = arguments;
  if (0 === 0) { // anything evaluating to true, except a number or `true`
    _arguments = [0]; // Unsupported phi use of arguments
  }
}

// strict & sloppy modes
function test2() {
  var _arguments = arguments;
  for (var i = 0; i < 1; i++) {
    _arguments = [0]; // Unsupported phi use of arguments
  }
}

// strict & sloppy modes
function test3() {
  var _arguments = arguments;
  var again = true;
  while (again) {
    _arguments = [0]; // Unsupported phi use of arguments
    again = false;
  }
}
  • Why

    • Crankshaft 无法知道 _arguments是 object 或 array.
    • 深入了解
  • Advices

    • 最好操作 arguments 的拷贝.
    • TurboFan 可以优化 #1.

Yield

  • 简单例子
// strict & sloppy modes
function* test() {
  yield 0;
}

Resources

目录
相关文章
|
7月前
|
设计模式 前端开发 Java
KnowStreaming系列教程第二篇——项目整体架构分析
KnowStreaming系列教程第二篇——项目整体架构分析
86 0
|
2月前
|
缓存 监控 Java
大厂性能优化的10大顶级方案 (万字图文史上最全)
本文详细介绍了大厂性能优化的10大顶奢方案,涵盖代码优化、缓存优化、异步优化、多线程优化、前端优化、微服务架构优化、硬件升级、数据库优化、过载保护优化以及度量与监控系统等方面。每部分不仅提供了理论知识,还结合实际案例和代码示例,帮助读者全面理解和应用这些优化策略。文章还特别强调了架构设计的重要性,指出架构师需要具备多方面的知识和技能,包括硬件、软件、网络协议、分布式知识等,以应对复杂的技术挑战。最后,作者尼恩分享了自己多年的经验,提供了丰富的技术资源和实战指导,助力读者在面试和工作中取得成功。
大厂性能优化的10大顶级方案 (万字图文史上最全)
|
7月前
|
监控 前端开发 关系型数据库
常见性能工具一览
今天写了一个调试工具的文章,就有人说起工具到底要会哪些。既然提到这儿了,那就多写几句吧。
162 2
常见性能工具一览
|
新能源
会后分享 | 精选十二:整车性能开发解决方案
本文由上海安世亚太公司汽车行业技术经理章敏先生在新能源汽车研讨会上所发表的演讲,此内容详细地讲解了整车性能开发解决方案。
会后分享 | 精选十二:整车性能开发解决方案
|
设计模式 缓存 Java
好家伙!阿里新产Java性能优化(终极版),涵盖性能优化所有操作
上月公司来了一位大佬,入职不到一周就把公司现有项目的性能优化了一遍,直接给公司节省了一半的成本。 一问情况,才知道这位仁兄也是一路被虐过来的。去年年底被裁,本以为自己技术还行,看了一段时间面经,复习了基础知识,就开始投大厂简历。阿里最先给他面试机会,结果没能扛过三面,然后是各种大大小小的公司,在实际面试中被碾压得翻不了身。整整一个半月,一个offer都没拿到,最后针对性的恶补,才入职了我司。
|
算法 搜索推荐 内存技术
智能网页大纲插件:提升阅读体验与效率的利器
该插件的核心功能是通过算法快速准确地识别和提取网页的大纲。一旦安装和启用该插件,它会自动扫描页面上的标题、子标题和其他重要的内容,并生成一个简洁明了的大纲结构。这个大纲可以作为一个侧边栏或者浮动窗口显示在页面旁边,方便用户随时预览和导航。
|
算法 定位技术
文章一览
以跑步为例,我原本只是慢慢悠悠的随性跑,一旦它成为了一个习惯,我便开始尝试着寻找其中的方法,每天早上跑半个小时左右,怎么跑才能达到更好的效果呢?那就快慢交替跑吧!同样的时间,同样的精力投入,快慢交替跑要比普通慢跑消耗更多的热量,更能提升心肺机能。
73 0
|
编解码 缓存 开发框架
PIXIJS快速一览
PIXIJS快速一览 前言 还记得我们最开始选择计算机专业的时候,是多少人抱着做一个游戏的初心选择这个专业的。结果一进去就跟随大众方向做了软件开发,然后就没然后了。 所以,最近稍微空闲下来了,就想着自己做一个小游戏出来玩玩或者说练练手。自己作为前端开发,所以就没必要单独学习Unity或者说虚幻引擎这类的工具了。就直接找个webGL相关的游戏引擎来用用吧
329 0
|
C# 决策智能 Perl
运筹优化学习20:C#调用Cpex入门指南
运筹优化学习20:C#调用Cpex入门指南
运筹优化学习20:C#调用Cpex入门指南
|
机器学习/深度学习 消息中间件 SQL
原创 | 以Spark性能调优为例,说说如何书写简历项目的技术难点
原创 | 以Spark性能调优为例,说说如何书写简历项目的技术难点
原创 | 以Spark性能调优为例,说说如何书写简历项目的技术难点