測試閱讀器: FF 3.6
測試效勞器: APACHE 2.2
先讓我們去夢想下假如WEB頁裏上能用多線程,那是否是意味那WEB頁裏逐步代替了客戶端?
html5 標準
好了切進正題,那末WEB的多線程究竟是個蝦米?
從字裏上去看,我們該當看的出他的完成是WORKER形式吧,甚麼是WORKER形式?
寫過量線程的同窗該當比我更分明,年夜體的概念是:線程的創立由一個WORKER去決議,維護了一個線程池。
接着,我們看下HTML5的多線扯菪甚麼特性的:
1. 正在線程中是不克不及操做DOM節面的(念要操做的話只能發送動靜給worker創立者回調函數)
2. 多線程的素質實際上是真實的體系線程
3. 能利用setTimeout(), clearTimeout(), setInterval(),clearInterval()等函數
4. 能停止IO操做(ajax)
worker大抵的流程是如許子的:
創立一個worker對象,綁定一個領受後臺處理動靜的辦法 onmessage 戰一個錯誤處理辦法 onerror 。利用postMessage去通報數據,那個辦法的參數是嚴厲的JSON對象。當後臺處理完利用postMessage辦法將數據傳回前臺,也便是onmessage的辦法。
接下去看例子:
那個例子是頁裏通報一個數讓後臺減3,然後正在頁裏隱示
挪用者:
[color=amily:Consolas,'Courier]
[JAVAscript] view plaincopy
< !DOCTYPE html>
< html>
<head><title>worker Test</title>
<meta http-equiv="pragma" content="no-cache"></meta>
<meta http-equiv="expires" content="-1"></meta>
<meta http-equiv="cache-control" content="no-cache"></meta>
</head>
<body>
<div id="result" >zz</div>
</body>
<mce:script type="text/javascript"><!--
var worker = new Worker("work.js");
worker.onmessage = function(event){
document.write(event.data);
};
worker.onerror = function(event){
alert(event.message);
};
worker.postMessage(1);
// --></mce:script>
< /html>
上裏的代碼 創立了一個worker對象,然後初初化onmessage 戰 onerror的辦法,最初傳進一個整數1
接着我們去看下worker.js的內容
[color=amily:Consolas,'Courier]
[javascript] view plaincopy
onmessage = function(event) {
var data = event.data+3;
postMessage(data);
};
因爲work.js實鄰Worker上下僞甭的,以是能間接利用 postMessage.
一旦利用了那個辦法,那末它以下的代碼將沒有執止,假如念要完成輪迴的話,建議利用setInterval
並且Worker出有鎖的機造,多線程的同步問題只能靠代碼去處理(好比界說旌旗燈號變量)
那裏借值得一提的是 worker摯ボ再有子worker 好比以下代碼:
[color=amily:Consolas,'Courier]
[javascript] view plaincopy
var symbol = false;
var obj ;
var i = 0 ;
onmessage = function(event) {
obj = event.data;
callWorker();
};
setInterval(function(){
if(i == 10) {
postMessage(obj);
}
},100);
callWorker = function(){
var worker = new Worker("sub.js");
worker.onmessage = function(event){
obj.a = event.data;
i = 10;
};
worker.onerror = function(event){
throw e;
};
worker.postMessage(1);
};
sub.js
[color=amily:Consolas,'Courier]
[javascript] view plaincopy
onmessage = function(event){
postMessage(7);
};
轉載註明:http://www.shengshiyouxi.com
沙脈例子正在女的worker中挪用子worker:利用setInterval的辦法等候i的值由子線程改動爲10,然後返回迪瞥裏
那裏借值得留意的辦法有兩個close 戰 terminate
close 是worker本人銷譽本人
terminate是worker創立者銷譽worker
HTML5 worker 多線程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
解讀浮動閉合最佳方案:clearfix(轉)
飘走了的刃刃
2018-08-27 19:33:24
CSS垂直居中方法總結(部分翻譯)
飘走了的刃刃
2018-08-27 19:33:21
文本框輸入驗證:只能輸入數字和小數點
小锋007
2018-08-27 19:11:17
jsp中上傳圖片時的即時顯示效果
小锋007
2018-08-27 19:11:17
JS控制文本框textarea輸入字數限制
小锋007
2018-08-27 19:11:16
表單的js驗證框架,只提供提示信息及正則表達式即可自動驗證及提示
小锋007
2018-08-27 19:11:16
<a>標籤-超鏈接中使用confirm方法
小锋007
2018-08-27 19:11:16
圖片上傳時即時顯示2
小锋007
2018-08-27 19:11:16
鼠標劃過時整行變色代碼
小锋007
2018-08-27 19:11:16
點擊按鈕——網頁返回頂部代碼
小锋007
2018-08-27 19:11:16
textarea屬性設置
小锋007
2018-08-27 19:11:15
HTML&CSS課堂筆記
qq_38313060
2018-08-27 19:07:07
HTML課堂筆記
qq_38313060
2018-08-27 19:07:05
解決 iframe 在 iPad 上無法滾動的問題
冬狮郎sun
2018-08-27 19:08:34