你不知道的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引擎的实现细节的陷阱

    • 尾部调用优化:在函数的最后使用其他函数的直接返回值,可以突破递归调用的一些限制