Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

精读《V8 引擎特性带来的的 JS 性能变化》 #33

Closed
ascoders opened this issue Aug 28, 2017 · 6 comments
Closed

精读《V8 引擎特性带来的的 JS 性能变化》 #33

ascoders opened this issue Aug 28, 2017 · 6 comments

Comments

@ascoders
Copy link
Owner

本周精读文章是:V8 引擎特性带来的的 JS 性能变化

@ascoders
Copy link
Owner Author

ascoders commented Sep 1, 2017

try catch 对性能的影响忽略不计

try catch 非常有用,特别在 node 端更是一个常规操作。前端框架也越来越多采用了异常捕获的方式,结合 async await 让代码组织得更加优雅,详细可以看我的这篇博文 统一异常捕获。react mixins 也喜欢 try 住 render 方法,包括 16 版本自动 try 住了所有 render,try catch 可谓无处不在。

node 8 版本之后 try 内部函数性能损耗可以忽略不计。

但是当前版本仍然存在安全隐患,将 这里的代码 拷贝到 chrome 控制台,当前页面会进入无限死循环。

此例子对 try catch 块做了大量循环,官方说法是在某些代码组合情况下陷入无限优化循环。

@mynane
Copy link
Contributor

mynane commented Sep 1, 2017

有个疑问, 这个精读是所有人都可以参与, 还是说指定人才能回答?

@ascoders
Copy link
Owner Author

ascoders commented Sep 1, 2017

@mynane 所有人都可以参加

@ascoders
Copy link
Owner Author

ascoders commented Sep 1, 2017

解决 delete 性能问题

js 正在变得越来越简单,该 delete 的地方也不会犹豫是否写成 undefined,以提升性能为代价降低代码可读性了。

arguments 转数组性能已不是问题

在 node8.3 版本及以上,该使用拓展运算符获取参数,不但没有性能问题,可读性也大大提高,结合 ts 时也能得到类型支持。

bind 对性能影响可以忽略

但是在 react 中副作用仍需警惕。由于 ui 组件复用次数在大部分场景及其有限,强烈推荐使用箭头函数书写成员函数(在我的另一篇精读 This 带来的困惑 有详细介绍),而且在 node8 中,箭头函数的性能是最好的。

@linhuiw
Copy link
Contributor

linhuiw commented Sep 1, 2017

翻到本次精读的译文贴出来:
https://zhuanlan.zhihu.com/p/28225985

@ascoders
Copy link
Owner Author

ascoders commented Sep 2, 2017

函数调用对性能影响越来越小

对函数调用优化的越来越好,不需要过于担心注释与空白、函数间调用对性能的影响.

32 64 位数字计算性能

node8 对超长数字计算性能还是较低,大概是 32 位数字性能的 2/3,所以尽量用字符串处理大数。

遍历 object

基本用法有 for in Object.keys Object.values. 在 node8 中,for in 将变得更慢,但任然比其他两种方法快,所以,尽早取消不必要的优化。

创建对象

创建对象速度在 node8 得到极大提升,似乎是面向对象编程的福音。

多态函数的性能问题

当函数或者对象存在多种类型参数时,在 node8 中性能没什么优化,但单态函数性能大幅提升。所以尽量让对象内部属性单态是比较有用的,比如尽量不要对字符串数组 push 一个数字。

@ascoders ascoders mentioned this issue Sep 2, 2017
65 tasks
@ascoders ascoders closed this as completed Sep 4, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants