你不知道的js(四)
作用域与闭包
this与对象原型
类型与文法
异步与性能
ES6与未来
异步与性能
异步:现在与稍后
- js程序的执行是按照代码块的,会通过队列去顺序执行,任何一个时刻,都只会执行一个代码块
回调
存在回调地狱的问题
存在控制反转的问题
Promise
- 重新定义了毁掉的安排方式,定义了一种异步流程的方式,具体的api使用建议还是看阮一峰的es6吧
Generator
是一个新的函数类型,可以控制调用时机,为异步代码保留了顺序的、同步的、阻塞的代码模式,便于理解
通过结合Generator和Promise,可以实现强大的异步调用方式,也就是async await
程序性能
web worker
worker环境 不能访问主程序的资源,是完全分离的线程,可以引入其他的js
适合用途:处理密集型数学运算、大数据集合的排序、数据操作、高流量网络通信
数据传输
- 使用transferable对象做数据专递,减少传输对象的拷贝
共享的workers
- sharedworker 多标签页共享的worker
SIMD 提议将cpu级别的并行数学操作映射到js的api上以提高计算效率
asm.js 通过规范使js代码的运行得到一定的优化
如何使用其进行优化:通过提示跳过强制转换最终
本意是针对一种特定的任务的优化方式,如密集数学操作
意图是作为一个虫其他高度优化的程序语言交叉编译来的目标
基准分析与调优
基准分析
Benchmark.js 基准分析工具
jsPerf.com 使用benchmark.js的网站,可以针对不同上下文和环境进行测试
调优
要从大局出发,在关键路径上进行优化,避免落入不同js引擎的实现细节的陷阱
尾部调用优化:在函数的最后使用其他函数的直接返回值,可以突破递归调用的一些限制