浏览器中的JavaScript是单线程执行的,如果遇到重量级的计算任务时,一般需要运行很长时间,这样就会造成UI任务来不及响应,带来不好的用户体验。那么如何在JavaScript中使用多线程来解决这类问题呢?HTML5引入了新的Web Worker API,它让一段JavaScript程序运行在主线程之外的另外一个线程或进程中。Chrome对Web Worker API也有了基本的支持,在Android平台上虽然还存在缺陷,但是不影响基本使用。
先介绍一下Web Worker的基本知识
Web Worker有两种,一种是常见的Dedicated Worker,在JavaScript中简写为Worker,例如:var worker = new Worker(“source/worker.js”); 该例中worker.js就运行在另外一个线程中,无论计算任务有多重都不会直接阻塞主线程中的UI。另外一种是SharedWorker,它在浏览器中只有一个运行实例,允许所有的页面共享使用。关于Web Worker更多的介绍,请参考W3C的API文档http://dev.w3.org/html5/workers/
现在大家可能会问,现在引入了多线程,那如何保证Worker线程和主线程的同步呢?如果Worker线程和主线程同时修改了页面中的某个节点,岂不是会

本文探讨了JavaScript单线程执行带来的问题,并介绍了HTML5的Web Worker API如何解决这个问题。Web Worker允许JavaScript在主线程外的独立线程运行,避免阻塞UI。在Chrome浏览器中,Dedicated Worker在Render进程中运行,而SharedWorker因Android平台限制在多个Render进程间共享,导致实现复杂,目前在Chrome M30中未被支持。
最低0.47元/天 解锁文章

3115

被折叠的 条评论
为什么被折叠?



