美文网首页让前端飞前端开发笔记
前端web worker实践与总结

前端web worker实践与总结

作者: 打杂coder | 来源:发表于2018-07-19 18:31 被阅读2次

先说下场景, 我们的项目中有一个需求是合并多天行程的一个详情页面,这就涉及到一个接口请求问题,如果合并7天,7天内存在20个行程,那我们就需要进行20多个请求,即便每个请求都走异步,但其实也都是进入任务队列里面依次执行,因此并没有能够说起到很大的性能提升。

这个时候就需要web worker来做多行程的并行请求了, 从而达到提升性能的效果, 我们先简单来看下web worker的 API

index.js

// worker的创建是通过一个另外的脚本来生成的,里面定义的是worker的具体执行逻辑
var worker = new Worker("text.js")

// 传输消息给worker, tips: 当一个消息在主线程和worker之间传递时,它被复制或者转移了,而不是共享 
worker.postMessage()   

// 接收经过worker处理过的消息
worker.onmessage = () => {}

// worker 会在页面关闭的时候自动关闭, 用terminate() 可以立即杀死worker的线程
worker.terminate()

text.js

// onmessage 定义worker接受消息的回调 
onmessage = (params) => {
    console.log(params)
     // postMesage 会把消息发到index.js的worker中
    postMessage(params)
}

// 通过close() 也能够马上结束当前的worker线程
self.close()

简单看下来,web worker 还是比较简单的,但是作用却很大,当然它也存在一些限制 比如不能进行dom操作、以及不能使用一些windows对象的方法和属性、开启太多的worker的话会影响性能。

下面贴下我在实际项目中的实现:


image.png

这里的实现掺杂了indexedDB缓存的步骤, 主要就是把ajax放在worker里面进行操作。再贴下在vue组件里面的调用


image.png

目前的实现是根据多少段行程起多个worker一起并行的请求,请求完成后worker自己kill掉, 请求的时候能够在浏览器里面看到多个worker的产生


image.png

就这样,我们愉快地用上了web worker 我们可以简单测试下, 看下性能提升有多大

  • 未使用web worker 纯粹的循环请求


    image.png
  • 使用 web worker 进行并发请求


    image.png
  • web worker 配合indexdb 缓存后


    image.png

当然这个测试办法并不算很严谨, 这个只能是粗略估计, 但是这个还是能够看出性能提升是非常大的. 关于indexedDB 可以看看我之前的博文 基于indexDB的前端优化缓存方案

另外如果需要在webpack中配合使用的话就需要用到 worker-loader

参考


相关文章

  • 前端web worker实践与总结

    先说下场景, 我们的项目中有一个需求是合并多天行程的一个详情页面,这就涉及到一个接口请求问题,如果合并7天,7天内...

  • Effective前端1---chapter 1 HTML/CS

    最近在读高效前端:web高效编程与优化实践,借此本书的感受总结下前端代码与性能优化,纯属自己见解,如有错误,欢迎指...

  • web worker总结

    序:js 是单线程单进程模式,所有任务只能在一个线程上面顺序执行。在存在高计算的代码运行时,会阻带掉页面的相关操作...

  • HTML 5 Web Workers

    前端多线程 web worker 是运行在后台的 JavaScript,不会影响页面的性能。 什么是 Web Wo...

  • web worker 处理多文件并行上传

    一 web worker: 什么是web worker Web Worker为Web内容在后台线程中运行脚本提供...

  • web worker 与 service worker

    https://zhuanlan.zhihu.com/p/115243059[https://zhuanlan.z...

  • Javascript:Web Worker基础

    参考资料Web Workersweb worker详解Blob对象 Web Worker分为专属Worker(De...

  • 前端性能优化原理与实践(二)

    摘自前端性能优化原理与实践 从 Cookie 到 Web Storage、IndexDB Cookie Cooki...

  • Web Worker学习总结

    2019/8/15 概述Web Worker 就是运行在 后台 的JS,不会影响页面的性能!!!!Web Wor...

  • 学习资源整理

    Commonjs规范PWAWeb worker 前端知识扫盲 Chrome与Chromium 关于前端性能的文章 ...

网友评论

  • Ronnie_022f:这个案例不是 Promise.all 能应付的?

本文标题:前端web worker实践与总结

本文链接:https://www.haomeiwen.com/subject/xxjtmftx.html