读书笔记-高性能js-编程实践

双重求值

动态执行
eval(‘a1 + a2’)
new Function(‘arg1’, ‘arg2’, ‘return arg1 + arg2’)
setTimeout()
setInterval()

在js代码中执行另一段代码,会导致双重求值的性能损耗。
代码首先会正常求值,然后对包含字符串的代码发起另一个求值运算。
每次调用函数时都要创建一个新的解析器实例。
不过,优化后的js会缓存这些函数重复运行的代码

使用Object/Array直接量

let obj = new Obejct()
let arr = new Array()
// 直接量
let obj = {}
let arr = []

好处:运行速度快,减少代码量,减少文件尺寸。

避免重复工作

  1. 避免做无关紧要的工作
  2. 别重复做已经完成的工作

对策:

  1. 延迟加载。不会立即使用时。
  2. 条件预加载。整个页面生命周期中频繁出现,或者很快就要使用到。

使用速度快的部分

位操作

二进制表示法

number.toString(2) // 返回二进制

二进制中同位对比

  1. 按位与(1|1 返1
    25 & 3 // 1
  2. 按位或(1|0 返1
    25 | 3 // 27
  3. 按位异或(1 返1
    25 ^ 3 // 26
  4. 按位取反(0 返1
    ~25 // -26

应用:

  1. 斑马线 i % 2 取模运算,使用i & 1 速度更快。
  2. 位掩码,用于处理同时存在多个布尔选项的情形。使用单个数字的每一位来判定是否选项成立。
    从而有效的将数字转换为布尔值标记组成的数组。
    掩码中的每个选项值比较是2的幂
let status_a = 1
let status_b = 2
let status_c = 4
let status_d = 6
let options = status_a | status_b | status_c | status_d
if(options & OPTION_A) { // 是否在options中
  // ...
}

计算操作发生在底层。如果有多个选项保存一起并频繁检查,位掩码有助于提高整体性能。
此外还有左位移<<, 右位移>>,无符号右移等位操作符。

原生方法

原生方法最快,因为其会被编译成机器码,已经成为浏览器的一部分。

  1. 数学方法Math
  2. dom选择器

chrome对原生方法和js代码都使用了即时编译器,所以性能差别不大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值