前端优化得思考

251 阅读2分钟
  • 前端优化有很多维度展开,这边讲得点是可响应性,因为浏览器执行线程是单线程,决定了他不可能胜任CPU密集得工作,所以如何解决CPU密集,如何更好得更优得调度cpu任务,是复杂前端应用中需要解决得,js中并没有提供明确得调度方案,各种调度优先级依赖浏览器内部实现,js引擎提供排队机制,但是具体得哪个io任务先抢占cpu资源,还是看运行时即浏览器得具体实现。
  • 理论上用户不会再浏览器中同时做两件事情,但是由于浏览器中得一些其他io任务得执行也是放在js主线程中做,导致一些用户交互行为和浏览器行为可能会存在并发,但是由于是单线程,无法并行执行,实际上单核得并行也只是交替抢占cpu,所以如何设计让任务得切片更加适合,然后和io任务交替抢占cpu,也是很多ui框架需要做的事情,比如react 16得设计中就是这个理念,如何拆解大任务到合适得切片任务,关键在于上下文依赖,一个大任务中必然存在上文和下文的依赖,那么他拆解成更小的切片任务时,如何让其保持上下文,一种是通过明确的工具调用,比如task(用户任务)进行明确的上下文依赖的最小化声明,另一种是通过es6的generator实现上下文的传递。
  • 通过js任务的切片,实现了流水线式的任务,解决了不同任务间的上下文依赖,那么就可以放心的把任务交给js引擎调度,当然js默认的调度策略肯定不会考虑非浏览器io任务的优先级,这个就需要用户自己在应用层实现排队机制,或者依赖浏览器底层的优化及排队做任务封装