Web
Workers£¬Ò»¸öÐ嵀 JavaScript ±à³ÌÄ£ÐÍ£¬¿ÉÒÔÌá¸ßÄú web Ó¦ÓóÌÐòµÄ½»»¥ÐÔ¡£ÓÐÁËËüÄú¾Í¿ÉÒÔÒÔÒ»ÖÖ¶àÏ̷߳½·¨ÔËÐÐ
JavaScript£¬¶øÇÒ¿ÉÒÔÔÚºǫ́ÔËÐнű¾¶ø²»ÒÀÀµÈκÎÓû§½çÃæ½Å±¾¡£±¾ÎĽéÉÜÁË Web Workers£¬²¢Òýµ¼ÄúÁ˽âÒ»¸öʵ¼ùʾÀý£¬ÏòÄúչʾÈçºÎ½«
Web Workers ÔËÓõ½ÄúµÄ web Ó¦ÓóÌÐòÖС£
¼ò½é
Ëæ×Å Ajax ºÍ Web 2.0 Ó¦ÓóÌÐòµÄ³öÏÖ£¬ÖÕ¶ËÓû§±»¿ìËÙÏìÓ¦µÄ web Ó¦ÓóÌÐò³è»µÁË¡£ÒªÈÃ
web Ó¦ÓóÌÐòÏìÓ¦µÃ¸ü¿ì£¬Æ¿¾±Ò»¶¨Òª½â¾ö¡£Æ¿¾±°üÀ¨ JavaScript ºÍºǫ́ I/O ÅÓ´óµÄ¼ÆËãÁ¿£¬ÕâÐèÒª´ÓÖ÷
UI ÏÔʾÁ÷³ÌÖÐÒÆ³ý£¬½»¸ø Web Workers ´¦Àí¡£
Web Workers ¹æ·¶Ìṩ²»ÒÀÀµÈκÎÓû§½çÃæ½Å±¾ÔÚºǫ́ÔËÐнű¾µÄÄÜÁ¦¡£³¤ÆÚÔËÐнű¾²»»á±»ÏìÓ¦µ¥»÷»òÆäËûÓû§½»»¥µÄ½Å±¾Öжϡ£Web
Workers ÔÊÐíÖ´Ðг¤ÆÚÈÎÎñ£¬Í¬Ê±Ò²²»Ó°ÏìÒ³ÃæÏìÓ¦¡£
Web Workers ³öÏÖ֮ǰ£¬JavaScript ÊÇÏÖ´ú web Ó¦ÓóÌÐòµÄºËÐÄ¡£JavaScript
ºÍ DOM ±¾ÖÊÉ϶¼Êǵ¥Ï̵߳ģºÔÚÈκÎʱ¼ä¶¼Ö»ÄÜÖ´ÐÐÒ»¸ö JavaScript ·½·¨¡£¼´Ê¹ÄúµÄ¼ÆËã»úÓÐ
4 ¸öÄںˣ¬ÔÚ½øÐг¤ÆÚ¼ÆËãʱ£¬Ò²Ö»ÓÐÒ»¸öÄں˱ȽϷ±Ã¦¡£ÀýÈ磬ÄúÔÚ¼ÆËãµ½´ïÔÂÇòµÄ×î¼Ñ¹ìµÀʱ£¬ÄúµÄä¯ÀÀÆ÷²»ÄÜäÖȾһ¸öÏÔʾ¹ì¼£µÄ¶¯»£¬ÒÔ¼°
¡ª ͬʱ ¡ª ¶ÔÓû§Ê¼þ×÷³öÏìÓ¦£¨±ÈÈçÊó±êµ¥»÷»ò¼üÅÌÊäÈ룩¡£
Web Workers ´òÆÆÁË´«Í³ JavaScript µÄµ¥Ïß³Ìģʽ£¬ÒýÈëÁ˶àÏ̱߳à³Ìģʽ¡£Ò»¸ö
worker ÊÇÒ»¸ö¶ÀÁ¢µÄÏ̡߳£Óжà¸öÈÎÎñÐèÒª´¦ÀíµÄ web Ó¦ÓóÌÐò²»ÔÙÐèÒªÖð¸ö´¦ÀíÈÎÎñ¡£·´Ö®£¬Ó¦ÓóÌÐò¿ÉÒÔ½«ÈÎÎñ·ÖÅ䏸²»Í¬µÄ
workers¡£
ÔÚ±¾ÎÄÖУ¬Äú½«Ñ§Ï° Web Workers API¡£Ò»¸öʵÀýÒýµ¼ÄúÖð²½Ê¹Óà Web Workers À´¹¹½¨Ò»¸ö
web Ò³Ãæ¡£
´ÓÏÂÃæµÄ ÏÂÔØ±í¸ñ ÏÂÔØ±¾ÎÄʾÀýµÄÔ´´úÂë¡£
»ù±¾¸ÅÄî
Web Workers µÄ»ù±¾×é³É£º
Worker
Ò»¸öÐÂỊ̈߳¬ÔÚºǫ́ÔËÐУ¬²»»á×èÈûÈκÎÖ÷Óû§½çÃæ½Å±¾£¨×÷Ϊºǫ́½Å±¾±»µ÷Óã©¡£Workers ÊÇÏà¶ÔÖØÁ¿¼¶µÄ£¬²»Òª´ó¹æÄ£Ê¹Óá£
Ò»¸ö worker ¿ÉÒÔÖ´Ðв»ÉÙÈÎÎñ£¬°üÀ¨²¢ÐмÆËã¡¢ºǫ́ I/O¡¢ÒÔ¼°¿Í»§¶ËÊý¾Ý¿â²Ù×÷¡£worker ²»Ó¦¸ÃÖжÏÖ÷
UI »òÖ±½Ó²Ù×÷ DOM£»ËüÓ¦¸ÃÏòÖ÷Ï̷߳µ»ØÒ»¸öÏûÏ¢£¬²¢ÈÃÖ÷Ï̸߳üÐÂÖ÷ UI¡£
Subworker
ÔÚÒ»¸ö worker Öд´½¨µÄ worker¡£Subworkers ±ØÐëÓë¸¸Ò³ÃæÍ¬¸ùͬԴ¡£subworkers
µÄ URI ÊǸù¾Ý¸¸ worker µÄµØÖ·¶ø²»ÊÇ×Ô¼ºÒ³ÃæµØÖ·È·¶¨µÄ¡£
Shared worker
Ò»¸ö¿ÉÒÔ±»¶à¸öÒ³ÃæÍ¨¹ý¶à¸öÁ¬½ÓËùʹÓÃµÄ worker£¬¹²Ïí worker ºÍÆÕͨ worker µÄ¹¤×÷·½Ê½ÂÔÓв»Í¬£¬Ö»ÓÐһС²¿·Öä¯ÀÀÆ÷Ö§³ÖÕâÒ»ÌØÐÔ¡£
Web Workers API
±¾Ð¡½Ú½éÉÜ Web Workers API µÄ»ù±¾¸ÅÄî.
´´½¨Ò»¸ö worker
Òª´´½¨Ò»¸öРworker£¬ÄúÖ»ÐèÒªµ÷Óà worker ¹¹Ô캯Êý£¬worker ½Å±¾ URL ÊÇΩһ²ÎÊý¡£worker
´´½¨Íê³ÉµÄͬʱÆô¶¯Ò»¸öÐÂỊ̈߳¨»òÕß¿ÉÄÜÊÇÒ»¸öнø³Ì£¬¸ù¾ÝÄúä¯ÀÀµÄʵÏÖ¶ø¶¨£©¡£
worker Íê³É¹¤×÷»òÕßÓöµ½Ò»¸ö´íÎóʱ£¬Äú¿ÉÒÔʹÓÃ×÷ҵʵÀýµÄ onmessage ºÍ onerror
ÊôÐÔ´Ó worker »ñȡ֪ͨ¡£Çåµ¥ 1 ÊÇÒ»¸öÑùÀý worker¡£
Çåµ¥ 1. ÑùÀý worker myWorker.js
// receive a message from the main JavaScript thread onmessage = function(event) { // do something in this worker var info = event.data; postMessage(info + ¡° from worker!¡±); }; |
Èç¹ûÄúÔËÐÐÇåµ¥ 2 ÖÐµÄ JavaScript ´úÂ룬Äú½«µÃµ½ ¡°Hello
World from worker¡± ¡£
Çåµ¥ 2. Ö÷ JavaScript Ïß³ÌÖÐµÄ Worker
// create a new worker var myWorker = new Worker("myWorker.js"); // send a message to start the worker var info = ¡°Hello World¡±; myWorker.postMessage(info); // receive a message from the worker myWorker.onmessage = function (event) { // do something when receiving a message from worker alert(event.data); }; |
ÖÕÖ¹ worker
Ò»¸ö worker ÊÇÒ»¸öỊ̈߳¬ÊÇÒ»¸ö¸ß×ÊÔ´ÏûºÄµÄ OS ¼¶¶ÔÏó¡£µ±·ÖÅ䏸 worker µÄÈÎÎñÍê³Éºó£¬»òÕßÏëÒªÖÕֹʱ£¬µ÷ÓÃ
worker µÄ terminate ·½·¨À´ÖÕÖ¹ÕýÔÚÔËÐÐµÄ worker¡£worker Ï̻߳ò½ø³Ì¼´¿ÉÖÕÖ¹£¬Ã»Óлú»áÍê³ÉËüµÄ²Ù×÷ÒÔ¼°×ÔÉíÇåÀí¡£Çåµ¥
3 ÊÇÒ»¸öʾÀý¡£
Çåµ¥ 3. ÖÕÖ¹ myWorker
´íÎó´¦Àí
ºÍÆÕͨ JavaScript ´úÂëÀàËÆ£¬ÔËÐÐʱ´íÎóÒ²¿É³öÏÖÔÚÔËÐÐµÄ worker ÖС£Òª´¦ÀíÕâЩ´íÎó£¬ÄúÐèҪΪ
worker ½¨Á¢ onerror ´¦Àí³ÌÐò£¬Èç¹ûÔڽű¾ÔËÐÐÆÚ¼ä³öÏÖ´íÎ󣬽«»áµ÷Óøô¦Àí³ÌÐò¡£Òª·ÀÖ¹·¢ÉúĬÈϻ£¬worker
¿ÉÒÔµ÷Óà worker ´íÎóʼþµÄ preventDefault() ·½·¨¡£
Çåµ¥ 4. Ϊ myWorker Ìí¼Ó´íÎó¾ä±ú
myWorker.onerror = function(event){ console.log(event.message); console.log(event.filename); console.log(event.lineno); } |
´íÎóʼþÓÐÒÔÏ 3 ¸ö×ֶΣ¬¿ÉÄܶԵ÷ÊÔÓаïÖú£º
message£ºÒ»¸öÈËÃǿɶÁµÄ´íÎóÏûÏ¢
filename£º³öÏÖ´íÎóÏûÏ¢µÄ½Å±¾ÎļþµÄÃû³Æ
lineno£º³öÏÖ´íÎóÏûÏ¢µÄ½Å±¾ÎļþµÄÐÐÊý
µ¼Èë½Å±¾ºÍ¿â
Worker Ï߳̿ÉÒÔ·ÃÎÊÒ»¸öÈ«¾Öº¯Êý£¬importScripts()£¬¸Ãº¯ÊýÖ§³Ö½«½Å±¾ºÍÊý¾Ý¿âµ¼ÈëËüÃǵÄ×÷ÓÃÓò¡£Ëü¿ÉÒÔ²»½ÓÊÕ²ÎÊý£¬Ò²¿ÉÒÔ½ÓÊÕ¶à¸öÒªµ¼ÈëµÄ×ÊÔ´µÄ
URL ×÷Ϊ²ÎÊý¡£
Çåµ¥ 5. µ¼Èë½Å±¾
//import nothing importScripts(); //import just graph.js importScripts('graph.js'); //import two scripts importScripts('graph.js', 'controller.js'); |
ʹÓà Web Workers
±¾Ð¡½Ú¼òÒª½éÉÜ Web Workers µÄÒ»¸öʵ¼ÊÓÃÀý¡£¸ÃʾÀý°üÀ¨ÏÔʾһ¸öº¬Óжà¸ö»ùÓÚ Dojo µÄ Website
Displayer С²¿¼þµÄÒ³Ãæ¡£ÕâЩС²¿¼þ¹ýȥͨ³£Ê¹Óà iFrame À´ÏÔʾһ¸öÍøÕ¾¡£Ã»ÓÐ Web Workers
ʱ£¬Äú±ØÐëͨ¹ý Ajax ÇëÇóÀ´»ñȡС²¿¼þ¶¨Ò壬ȻºóÔÚÒ»¸ö¶ÀÁ¢µÄ JavaScript Ïß³ÌÖÐÏÔʾËüÃÇ¡£Èç¹ûС²¿¼þ¶¨Ò庬ÓдóÁ¿Êý¾Ý£¬Õâ¸ö¹ý³ÌÊǷdz£ÂýµÄ¡£
¸ÃʾÀý´´½¨Ò»Ð© workers À´»ñȡС²¿¼þ¶¨Ò塣ÿ¸ö worker µÄÈÎÎñÊÇ»ñȡһ¸öС²¿¼þ¶¨Ò壬¶øÇÒ¸ºÔð֪ͨÖ÷
UI JavaScript Ïß³ÌÀ´ÏÔʾËü£¬ÕâÊÇÒ»¸ö½Ï¿ìµÄ½â¾ö·½°¸¡£
¸ÃʾÀýÓõÄÊÇ Dojo 1.4¡£Èç¹ûÄúÏëÔÚÄúµÄä¯ÀÀÆ÷ÖÐÔËÐиÃʾÀý£¬ÏÂÔØ±¾ÎÄËùʹÓÃµÄ Dojo ¿â£¨¼û ²Î¿¼×ÊÁÏ£©ºÍÔ´´úÂ루¼û
ÏÂÔØ £©¡£Í¼ 1 չʾÁËʾÀýÓ¦ÓóÌÐòµÄ½á¹¹¡£
ͼ 1. Web Workers Ó¦ÓóÌÐò
ÔÚͼ 1 ÖУº
lib ÊÇÒ»¸ö dojo ¿â¡£
/widgets/WebsiteDisplayer.js ÊÇÒ»¸ö»ùÓÚ dojo µÄ Website Displayer
С²¿¼þʵÏÖ¡£
/loadwidget/widgets/widgetDefinition[0....3] ÊÇÿ¸ö Website
Displayer С²¿¼þµÄ¶¨Òå¡£
/loadwidget/Workers.js ÊÇ worker ʵÏÖ¡£
/loadwidget/XMLHttpRequest.js ÊÇÒ»¸ö js ¿â£¬º¬ÓÐÒ»¸ö´´½¨ XMLHttpRequst
µÄ·½·¨¡£
/loadwidget/LoadWidget.html ÊÇ´øÓ줻îµÄ Web Workers µÄÑÝʾµÄÖ÷Ò³Ãæ£¬Ëü½«»áÊÇÖ÷
JavaScript Ï̡߳£
/loadwidget/LoadWidget-none-web-workers.html ÊÇÔÚûÓÐ Web
Workers µÄÇé¿öÏÂʵÏÖµÄÖ÷Ò³Ãæ¡£
´´½¨Ò»¸ö Website Displayer С²¿¼þ
Website Displayer С²¿¼þÊÇÒ»¸ö·Ç³£¼òµ¥µÄ»ùÓÚ Dojo-TitlePane-dijit
µÄС²¿¼þ¡£Ëü½«ÏÔʾһ¸ö¹æ·¶»¯±êÌâÀ¸µÄ UI£¬Èçͼ 2 Ëùʾ¡£
ͼ 2. Website Displayer
С²¿¼þ
Çåµ¥ 6 ÊÇ WebsiteDisplayer.js µÄ´úÂë¡£
Çåµ¥ 6. WebsiteDisplayer.js µÄÄÚÈÝ
dojo.require("dijit._Widget"); dojo.require("dijit._Templated"); dojo.require("dijit.TitlePane");
dojo.declare("loadWidget.WebsiteDisplayer", [dijit.TitlePane], { title: "", url: "", postCreate: function() { var ifrm = dojo.create("iframe", { src: this.url, style: "width:100%;height:20%;" }); dojo.place(ifrm, this.domNode.children[1], "first"); this.inherited(arguments); var contentFrame = this.domNode.children[1].children[0]; if (contentFrame.attachEvent) { contentFrame.attachEvent("onload", function() { dojo.publish("frameEvent/loaded"); } ); } else { contentFrame.onload = function() { dojo.publish("frameEvent/loaded"); }; } } });
|
´´½¨Ò»¸ö worker
ҪʵÏÖ worker.js£¬µ¼ÈëÒ»¸öÈ«¾Ö JavaScript Îļþ XMLHttpRequest.js£¬ÆäÖк¬ÓÐÈ«¾Ö·½·¨
creatXMLHTTPRequest¡£¸Ã·½·¨½«·µ»ØÒ»¸ö XMLHttpRequest ¶ÔÏó¡£
worker Ö÷Òª½« XMLHttpRequest ·¢Ë͵½·þÎñÆ÷¶Ë£¬È»ºó¼ìË÷С²¿¼þ¶¨Òå·µ»Ø¸øÖ÷Ï̡߳£Çåµ¥
7 ºÍÇåµ¥ 8 չʾÁËÒ»¸öʾÀý¡£
Çåµ¥ 7. Worker.js µÄÄÚÈÝ
importScripts("XMLHttpRequest.js");
onmessage = function(event) { var xhr = creatXMLHTTPRequest(); xhr.open('GET', 'widgets/widgetDefinition' + event.data + '.xml', true); xhr.send(null); xhr.onreadystatechange = function() { if (xhr.readyState == 4) { if (xhr.status == 200 || xhr.status ==0) { postMessage(xhr.responseText); } else { throw xhr.status + xhr.responseText; } } } }
|
Çåµ¥ 8. widgetDefinition0.xml
<div dojoType="loadWidget.WebsiteDisplayer" title="This is Test Widget 0" url="http://www.yahoo.com" ></div> |
´´½¨Ö÷ web Ò³
Ö÷ web Ò³¾ÍÊÇÄú½øÐÐÕâЩ²Ù×÷µÄµØ·½£º´´½¨¼¸¸ö workers£»·¢ËÍÏûÏ¢µ½ workers ²¢Æô¶¯ workers£»´Ó
workers ÖмìË÷ÏûÏ¢£»Ê¹ÓüìË÷µÄÏûÏ¢²Ù×÷Ö÷ UI¡£
Çåµ¥ 9. Ö÷ web Ò³
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title> Load widgets with Web Workers </title> <style type="text/css"> @import "../lib/dijit/themes/soria/soria.css"; @import "../lib/dojo/resources/dojo.css"; @import "../lib/dojox/layout/resources/GridContainer.css"; @import "../lib/dojox/layout/resources/DndGridContainer.css" </style> <script type="text/javascript" src="../lib/dojo/dojo.js" djConfig="parseOnLoad: true,isDebug:true"> </script> <script> dojo.require("dojo.parser"); dojo.require("dojo.io.script"); dojo.require("dojox.layout.GridContainer"); dojo.require("dijit.layout.LayoutContainer"); dojo.require("dijit.TitlePane"); dojo.require("dojox.layout.DragPane"); dojo.registerModulePath("loadWidget", "../../loadWidget"); dojo.require("loadWidget.WebsiteDisplayer"); </script> <script type="text/javascript" language="javascript"> var workersCount = 4; var haveLoadedCount = 0; var widgetCount = 4; var startTime = new Date().getTime(); var endTime = null; var executeTime = 0; try { for (var i = 0; i < workersCount; i++) { var loadWorker = new Worker("Worker.js"); loadWorker.postMessage(i); loadWorker.onmessage = processReturnWidgetDefinition; loadWorker.onerror = handleWorkerError; } } catch(ex) { console.log(ex); } function processReturnWidgetDefinition(event) { var txt = document.createElement("p"); txt.innerHTML = event.data; var div = document.getElementById("loadingDiv"); div.appendChild(txt); haveLoadedCount++; if (haveLoadedCount == widgetCount) { dojo.parser.parse(); } }
function handleWorkerError(event){ console.log(event.message); }
dojo.subscribe("frameEvent/loaded", dojo.hitch(null, handelFrameLoaded));
function handelFrameLoaded() { if (haveLoadedCount == widgetCount) { endTime = new Date().getTime(); executeTime = endTime - startTime; dojo.byId("loading").innerHTML = "Loading cost time:" + executeTime; } } </script> </head>
<body class="soria"> <div dojoType="dijit.TitlePane" title="Load widgets with Web Workers" style="border: 2px solid black; padding: 10px;" id="main"> <div id="loadingDiv"> <div id="loading"> Widgets are loading...... </div> </div> </div> </body>
</html>
|
½«Õâ¸öÖ÷Ò³ÃæÇ¶Èëµ½Ò»¸ö web Ó¦ÓóÌÐòÖУ¬È»ºóÔËÐÐËü¡£½á¹ûÈçͼ 3 Ëùʾ¡£
ͼ 3. ʹÓà Web Workers ¼ÓÔØÐ¡²¿¼þ
ÏëÒª²é¿´Ê¹Óà Web Workers ºÍ²»Ê¹Óà Web Workers µÄÇø±ð£¬·Ö±ðÔËÐÐ LoadWidget.html
ºÍ LoadWidget-none-web-workers.html£¬È»ºó²é¿´½á¹û¡£×¢Ò⣬ÔÚÕâÀïûÓÐÔËÐÐ
Web Workers µÄÒ³Ãæ±ÈÔËÐÐ Web Workers µÄÒ³ÃæÍê³ÉµÃÒª¿ì£¬ÕâÊÇÒòΪ´úÂëÑùÀý´¦ÀíµÄÊý¾ÝÌ«ÉÙ¡£Êµ¼ÊÉÏ£¬½ÚÊ¡µÄʱ¼äƽºâÁËÆô¶¯
worker µÄ³É±¾¡£
ʹÓà Web Workers ¼¼ÇÉ
ÉÏÃæµÄʾÀýֻɿ¼° XMLHttpRequest ºÍ¼ÆË㣻²»ÊǺܴóÒ²²»¸´ÔÓ¡£Èç¹ûÄúÈà worker ´¦Àí¸ü¸´ÔÓµÄÈÎÎñ£¬±ÈÈç´¦Àí´óÁ¿¼ÆË㣬Ëü½«»áÊÇÒ»¸ö¹¦ÄÜÇ¿´óµÄÌØÐÔ¡£ÔÚ½«Õâ¸öºÜ¿áµÄ¼¼ÊõÔËÓõ½ÄúµÄÏîĿ֮ǰ£¬Á˽âһЩʹÓü¼ÇÉ¡£
ÔÚ workers Öв»ÄÜ·ÃÎÊ DOM
ΪÁ˰²È«£¬workers ²»ÄÜÖ±½Ó¶Ô HTML ½øÐвÙ×÷¡£Í¬Ò» DOM ÉϵĶàÏ̲߳Ù×÷¿ÉÄÜ»áÒý·¢Ḭ̈߳²È«ÎÊÌâ¡£ÓÅÊÆÊÇÄú²»ÔÙµ£ÓÇ
worker ʵÏÖÖеĶàḬ̈߳²È«ÎÊÌâ¡£
ÕâÔÚ¿ª·¢ worker ʱÓÐһЩ¾ÖÏÞÐÔ£¬Äú²»ÄÜÔÚ worker Öе÷Óà alert()£¬ÕâÊÇÒ»¸ö·Ç³£Á÷Ðеĵ÷ÊÔ
JavaScript ´úÂëµÄ·½·¨¡£ÄúÒ²²»Äܵ÷Óà document.getElementById()£¬ÒòΪËüÖ»ÄܼìË÷ºÍ·µ»Ø±äÁ¿£¨¿ÉÄÜÊÇ×Ö·û´®¡¢Êý×é¡¢JSON
¶ÔÏ󣬵ȵȣ©¡£
worker ÖпÉÓõĶÔÏó
¾¡¹Ü worker ²»ÄÜ·ÃÎÊ window ¶ÔÏ󣬵«¿ÉÒÔÖ±½Ó·ÃÎÊ navigator¡£ÄúÒ²¿ÉÒÔÔÚ navigator
¶ÔÏóÖзÃÎÊ appName¡¢appVersion¡¢platform ºÍ userAgent¡£
location ¶ÔÏó¿ÉÒÔÒÔÖ»¶Á·½Ê½·ÃÎÊ¡£Äú¿ÉÒÔÔÚ location ¶ÔÏóÖлñÈ¡ hostname ºÍ
port¡£
ÔÚ worker ÖÐÒ²Ö§³Ö XMLHttpRequest£¬Èç±¾ÎÄʾÀýËùʾ¡£ÓÐÁËÕâÒ»ÌØÐÔ£¬Äú¾Í¿ÉÒÔ½«´óÁ¿¸ÐÐËȤµÄÀ©Õ¹Ìí¼Óµ½
worker ÖС£
´ËÍ⻹ÓУº
importScripts() ·½·¨£¨ÔÚͬһ¸öÓòÉÏ·ÃÎʽű¾Îļþ£©
JavaScript ¶ÔÏ󣬱ÈÈç Object¡¢Array¡¢Date¡¢Math ºÍ String
setTimeout() ºÍ setInterval() ·½·¨
postMessage ÖÐЯ´øµÄÊý¾ÝÀàÐÍ
postMessage µÄʹÓÃÊ®·ÖƵ·±£¬ÒòΪËüÊÇÖ÷ JavaScript Ï̵߳ÄÖ÷Òª·½·¨£¬ÓÃÓÚºÍ workers
½»»¥¡£È»¶ø£¬ÏÖÔÚ postMessage ÖÐЯ´øµÄÊý¾ÝÀàÐͽöÏÞÓÚ±¾µØ JavaScript ÀàÐÍ£¬±ÈÈ磬Array¡¢Date¡¢Math¡¢String¡¢JSON
µÈµÈ¡£½á¹¹¸´ÔÓµÄ×Ô¶¨Òå JavaScript ¶ÔÏó²»Äܱ»ºÜºÃµØÖ§³Ö¡£
|