HTML5多线程 HTML5应用缓存 一个web worker是一个在后台运行的JavaScript,不影响页面的性能 什么是Web Worker?. 当执行脚本的HTML页面,页面变得反应迟钝,直到脚本完成 一个web worker是一个在后台运行的JavaScript, 独立于其他脚本,不影响页面的性能. 你可以继续做任何你想做的事情:点击,选择东西等,而web worker在后台运行. 浏览器支持 表中的数字指定第一个完全支持web worker的浏览器版本. API Web Workers 4.0 10.0 3.5 4.0 11.5 HTML Web Workers 实例 下面的示例创建了一个简单的web worker,它在后台计数: <script> var w; function startWorker() { if(typeof(Worker) !== "undefined") { if(typeof(w) == "undefined") { w = new Worker("demo_workers.js"); } w.onmessage = function(event) { document.getElementById("result").innerHTML = event.data; }; } else { document.getElementById("result").innerHTML = "Sorry, your browser does not support Web Workers..."; } } function stopWorker() { w.terminate(); w = undefined; } </script> 让我试试 检查 Web Worker 的支持 在创建web worker之前,请检查用户的浏览器是否支持它: if (typeof(Worker) !== "undefined") { // Yes! Web worker support! // Some code..... } else { // Sorry! No Web Worker support.. } 创建Web worker文件 现在,让我们在一个外部JavaScript创建Web worker. 在这里,我们创建一个脚本计数. 该脚本存储在 "demo_workers.js" 文件中: var i = 0; function timedCount() { i = i + 1; postMessage(i); setTimeout("timedCount()",500); } timedCount(); 上面代码的重要部分是 postMessage() 方法 - 这是用来发布消息返回到HTML页面. 注意: 通常Web Worker不只简单的脚本,而是用于更多的CPU密集型任务. 创建一个Web Worker对象 现在我们有Web Worker文件,我们需要从一个HTML页面调用它. 下面的行检查是否Web Worker已经存在, 如果不存在-它创建一个新的Web Worker对象并在"demo_workers.js"中运行代码: if (typeof(w) == "undefined") { w = new Worker("demo_workers.js"); } 然后,我们可以从web worker发送和接收消息 添加一个"onmessage"事件监听器到web worker. w.onmessage = function(event){ document.getElementById("result").innerHTML = event.data; }; 当Web Worker发布消息时,将执行事件侦听器内的代码. 来自Web Worker的数据存储在 event.data. 结束一个Web Worker 当一个web worker对象被创建时, 它将继续侦听消息(即使外部脚本完成后),直到它被终止。 终止一个 web worker, 并且是否浏览器/计算机资源, 使用terminate()方法: w.terminate(); 重用Web Worker 如果将web worker变量设置为undefined,在它被终止后,您可以重用代码: w = undefined; 完整的web worker示例代码 们已经在看到web worker 在js文件中的代码。下面是HTML页面代码: <!DOCTYPE html> <html> <body> <p>Count numbers: <output id="result"></output></p> <button onclick="startWorker()">Start Worker</button> <button onclick="stopWorker()">Stop Worker</button> <script> var w; function startWorker() { if(typeof(Worker) !== "undefined") { if(typeof(w) == "undefined") { w = new Worker("demo_workers.js"); } w.onmessage = function(event) { document.getElementById("result").innerHTML = event.data; }; } else { document.getElementById("result").innerHTML = "Sorry! No Web Worker support."; } } function stopWorker() { w.terminate(); w = undefined; } </script> </body> </html> 让我试试 Web Workers 和 DOM 由于Web worker 在外部文件中,他们不能访问下面的JavaScript对象: window 对象 document 对象 parent 对象 HTML5应用缓存