亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍

突襲HTML5之Javascript API擴展1—Web Worker異步執行及相關概述
來源:易賢網 閱讀:1798 次 日期:2016-07-22 14:53:04
溫馨提示:易賢網小編為您整理了“突襲HTML5之Javascript API擴展1—Web Worker異步執行及相關概述”,方便廣大網友查閱!

HTML5 中的 Web Worker 可以分為兩種不同線程類型,一個是專用線程 Dedicated Worker,一個是共享線程 Shared Worker。兩種類型的線程各有不同的用途,感興趣的朋友可以了解下啊,或許對你有所幫助

Javascript執行機制

在HTML5之前,瀏覽器中JavaScript的運行都是以單線程的方式工作的,雖然有多種方式實現了對多線程的模擬(例如:Javascript 中的 setinterval 方法,setTimeout 方法等),但是在本質上程序的運行仍然是由 JavaScript 引擎以單線程調度的方式進行的。在 HTML5 中引入的工作線程使得瀏覽器端的 Javascript 引擎可以并發地執行 Javascript 代碼,從而實現了對瀏覽器端多線程編程的良好支持。

Javascript中的多線程 - WebWorker

HTML5 中的 Web Worker 可以分為兩種不同線程類型,一個是專用線程 Dedicated Worker,一個是共享線程 Shared Worker。兩種類型的線程各有不同的用途。

專用型web worker

專用型worker與創建它的腳本連接在一起,它可以與其他的worker或是瀏覽器組件通信,但是他不能與DOM通信。專用的含義,我想就是這個線程一次只處理一個需求。專用線程在除了IE外的各種主流瀏覽器中都實現了,可以放心使用。

創建線程

創建worker很簡單,只要把需要在線程中執行的JavaScript文件的文件名傳給構造函數就可以了。

線程通信

在主線程與子線程間進行通信,使用的是線程對象的postMessage和onmessage方法。不管是誰向誰發數據,發送發使用的都是postMessage方法,接收方都是使用onmessage方法接收數據。postMessage只有一個參數,那就是傳遞的數據,onmessage也只有一個參數,假設為event,則通過event.data獲取收到的數據。

發送JSON數據

JSON是JS原生支持的東西,不用白不用,復雜的數據就用JSON傳送吧。例如:

代碼如下:

postMessage({'cmd': 'init', 'timestamp': Date.now()});

處理錯誤

當線程發生錯誤的時候,它的onerror事件回調會被調用。所以處理錯誤的方式很簡單,就是掛接線程實例的onerror事件。這個回調函數有一個參數error,這個參數有3個字段:message - 錯誤消息;filename - 發生錯誤的腳本文件;lineno - 發生錯誤的行。

銷毀線程

在線程內部,使用close方法線程自己銷毀自己。在線程外部的主線程中,使用線程實例的terminate方法銷毀線程。

下面從一個例子看線程的基本操作:

HTML代碼:

代碼如下:

<!DOCTYPE HTML>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>web worker fibonacci</title>

<script type="text/javascript">

onload = function(){

var worker = new Worker('fibonacci.js');

worker.onmessage = function(event) {

console.log("Result:" + event.data);

};

worker.onerror = function(error) {

console.log("Error:" + error.message);

};

worker.postMessage(40);

}

</script>

</head>

<body>

</body>

</html>

腳本文件fibonacci.js代碼:

代碼如下:

//fibonacci.js

var fibonacci = function(n) {

return n < 2 ? n : arguments.callee(n - 1) + arguments.callee(n - 2);

};

onmessage = function(event) {

var n = parseInt(event.data, 10);

postMessage(fibonacci(n));

};

把它們放到相同的目錄,運行頁面文件,查看控制臺,可以看到運行的結果。

這里還有一點,在主線程中,onmessage事件可以使用另外一種方式掛接:

代碼如下:

worker.addEventListener('message', function(event) {

console.log("Result:" + event.data);

}, false);

個人覺得很麻煩,不如用onmessage直接。

使用其他腳本文件

工作線程可以使用全局方法importScripts來加載和使用其他的域內腳本文件或者類庫。例如下面都是合法的使用方式:

代碼如下:

importScripts();/* imports nothing */

importScripts('foo.js'); /* imports just "foo.js" */

importScripts('foo.js', 'bar.js');/* imports two scripts */

導入以后,可以直接使用這些文件中的方法。看一個網上的小例子:

代碼如下:

/**

* 使用 importScripts 方法引入外部資源腳本,在這里我們使用了數學公式計算工具庫 math_utilities.js

* 當 JavaScript 引擎對這個資源文件加載完畢后,繼續執行下面的代碼。同時,下面的的代碼可以訪問和調用

* 在資源文件中定義的變量和方法。

**/

importScripts('math_utilities.js');

onmessage = function (event)

{

var first = event.data.first;

var second = event.data.second;

calculate(first,second);

};

function calculate(first,second) {

//do the calculation work

var common_divisor=divisor(first,second);

var common_multiple=multiple(first,second);

postMessage("Work done! " +

"The least common multiple is " + common_divisor +

" and the greatest common divisor is "+common_multiple);

}

網上也有網友想到了利用這里的importScripts方法解決資源預加載的問題(瀏覽器預先加載資源,而不會對資源進行解析和執行),道理也很簡單。

線程嵌套

在工作線程中還可以在創建子線程,各種操作還是一樣的。

同步問題

Worker沒有鎖的機制,多線程的同步問題只能靠代碼來解決(比如定義信號變量)。

共享型SharedWebWorker

共享型web worker主要適用于多連接并發的問題。因為要處理多連接,所以它的API與專用型worker稍微有點區別。除了這一點,共享型web worker和專用型worker一樣,不能訪問DOM,并且對窗體屬性的訪問也受到限制。共享型web worker也不能跨越通信。

頁面腳本可以與共享型web worker通信,然而,與專用型web worker(使用了一個隱式的端口通信)稍微有點不同的是,通信是顯式的通過使用一個端口(port)對象并附加上一個消息事件處理程序來進行的。

在收到web worker腳本的首個消息之后,共享型web worker把一個事件處理程序附加到激活的端口上。一般情況下,處理程序會運行自己的postMessage()方法來把一個消息返回給調用代碼,接著端口的start()方法生成一個有效的消息進程。

看網上能找到的的唯一個例子:創建一個共享線程用于接收從不同連接發送過來的指令,然后實現自己的指令處理邏輯,指令處理完成后將結果返回到各個不同的連接用戶。

HTML代碼:

代碼如下:

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Shared worker example: how to use shared worker in HTML5</title>

<script>

var worker = new SharedWorker('sharedworker.js');

var log = document.getElementById('response_from_worker');

worker.port.addEventListener('message', function(e) {

//log the response data in web page

log.textContent =e.data;

}, false);

worker.port.start();

worker.port.postMessage('ping from user web page..');

//following method will send user input to sharedworker

function postMessageToSharedWorker(input)

{

//define a json object to construct the request

var instructions={instruction:input.value};

worker.port.postMessage(instructions);

}

</script>

</head>

<body onload=''>

<output id='response_from_worker'>

Shared worker example: how to use shared worker in HTML5

</output>

send instructions to shared worker:

<input type="text" autofocus oninput="postMessageToSharedWorker(this);return false;">

</input>

</body>

</html>

腳本文件代碼:

代碼如下:

// 創建一個共享線程用于接收從不同連接發送過來的指令,指令處理完成后將結果返回到各個不同的連接用戶。

var connect_number = 0;

onconnect = function(e) {

connect_number =connect_number+ 1;

//get the first port here

var port = e.ports[0];

port.postMessage('A new connection! The current connection number is '

+ connect_number);

port.onmessage = function(e) {

//get instructions from requester

var instruction=e.data.instruction;

var results=execute_instruction(instruction);

port.postMessage('Request: '+instruction+' Response '+results

+' from shared worker...');

};

};

/*

* this function will be used to execute the instructions send from requester

* @param instruction

* @return

*/

function execute_instruction(instruction)

{

var result_value;

//implement your logic here

//execute the instruction...

return result_value;

}

在上面的共享線程例子中,在主頁面即各個用戶連接頁面構造出一個共享線程對象,然后定義了一個方法 postMessageToSharedWorker 向共享線程發送來之用戶的指令。同時,在共享線程的實現代碼片段中定義 connect_number 用來記錄連接到這個共享線程的總數。之后,用 onconnect 事件處理器接受來自不同用戶的連接,解析它們傳遞過來的指令。最后,定義一個了方法 execute_instruction 用于執行用戶的指令,指令執行完成后將結果返回給各個用戶。

這里我們并沒有跟前面的例子一樣使用到了工作線程的 onmessage 事件處理器,而是使用了另外一種方式 addEventListener。實際上,前面已經說過,這兩種的實現原理基本一致,只是在這里有些稍微的差別,如果使用到了 addEventListener 來接受來自共享線程的消息,那么就要先使用 worker.port.start() 方法來啟動這個端口。之后就可以像工作線程的使用方式一樣正常的接收和發送消息。

最后陳述

線程中能做的事:

1.能使用setTimeout(), clearTimeout(), setInterval(),clearInterval()等函數。

2.能使用navigator對象。

3.能使用XMLHttpRequest來發送請求。

4.可以在線程中使用Web Storage。

5.線程中可以用self獲取本線程的作用域。

線程中不能做的事:

1.線程中是不能使用除navigator外的DOM/BOM對象,例如window,document(想要操作的話只能發送消息給worker創建者,通過回調函數操作)。

2.線程中不能使用主線程中的變量和函數。

3.線程中不能使用有"掛起"效果的操作命令,例如alert等。

4.線程中不能跨域加載JS。

線程也是需要消耗資源的,而且使用線程也會帶來一定的復雜性,所以如果沒有充足的理由來使用額外的線程的話,那么就不要用它。

更多信息請查看網頁制作
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權所有:易賢網

亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍
午夜日本精品| 日韩一级欧洲| 亚洲毛片播放| 亚洲欧美日韩一区在线观看| 欧美亚洲免费高清在线观看| 免费看亚洲片| 黄色工厂这里只有精品| 国产一区二区三区黄| 欧美国产视频在线观看| 激情久久久久久久| 久久电影一区| 国产精品mm| 香蕉久久久久久久av网站| 国产一区二区无遮挡| 亚洲看片网站| 欧美午夜不卡| 麻豆精品传媒视频| 国产欧美日韩一区二区三区在线 | 亚洲每日更新| 久久久久久久久久久一区| 在线播放精品| 欧美日韩国产成人精品| 亚洲欧美日韩国产一区二区| 亚洲性图久久| 欧美激情视频一区二区三区在线播放| 亚洲成色www久久网站| 久久另类ts人妖一区二区| 亚洲久久成人| 亚洲高清久久| 黑丝一区二区三区| 欧美激情自拍| 久久伊人一区二区| 母乳一区在线观看| 亚洲一区三区电影在线观看| 亚洲精品系列| 亚洲黄色大片| 亚洲精品国产精品国自产观看| 欧美精品三区| 欧美日韩精品一区| 欧美日韩一区二区视频在线观看| 久久亚洲国产精品日日av夜夜| 国产精品免费看| 国产欧美一区二区色老头| 亚洲国产成人不卡| 日韩一级精品| 国产欧美日韩亚洲| 国产麻豆日韩| 美女精品在线| 欧美不卡一区| 亚洲视屏一区| 一区二区三区福利| 国产精品综合色区在线观看| 亚洲影音一区| 久久国产精品一区二区三区| 久久婷婷丁香| 欧美日韩国产精品一卡| 欧美日韩一区二区高清| 国产综合色产| 中文一区二区| 久久婷婷激情| 激情欧美亚洲| 国产一区二区高清视频| 久久aⅴ国产紧身牛仔裤| 久久久99国产精品免费| 欧美日韩精品免费观看视频完整 | 黄色成人精品网站| 伊人久久成人| 国产欧美综合一区二区三区| 亚洲欧美日韩在线观看a三区| 久久久国产精品一区二区三区| 老牛影视一区二区三区| 激情视频一区二区| 国产精品嫩草99av在线| 久久久噜噜噜久久狠狠50岁| 欧美午夜电影在线观看 | 欧美国产激情| 在线日本成人| 久久久天天操| 亚洲精品孕妇| 欧美精品一区在线| 在线视频日韩| 国产一区欧美| 国产精品一区毛片| 黄色工厂这里只有精品| 国产精品一级| 海角社区69精品视频| 亚洲欧美bt| 亚洲激情一区二区| 国产精品v欧美精品v日本精品动漫| 亚洲精品1区| 欧美精品一区二区视频| 亚洲一区三区电影在线观看| 国产精品红桃| 久久久久综合| 亚洲欧美日韩精品在线| 亚洲啪啪91| 国产精品v欧美精品v日韩| 欧美中文日韩| 国产精品免费在线| 亚洲毛片播放| 亚洲激情网址| 精品电影一区| 激情视频一区| 亚洲五月婷婷| 亚洲午夜精品久久久久久app| 女生裸体视频一区二区三区| 免费一区二区三区| 国产精品综合| 亚洲免费影视| 午夜一区在线| 久久精品成人一区二区三区蜜臀| 亚洲一区欧美激情| 久久不射中文字幕| 久久亚洲国产精品日日av夜夜| 亚洲一区二区三区高清不卡| 国产精品美女xx| 国产伦精品一区二区| 国产精品一国产精品k频道56| 99热免费精品| 国产精品呻吟| 久久精品盗摄| 欧美区国产区| 国产综合精品一区| 亚洲性视频h| 亚洲精品在线二区| 亚洲乱码视频| 国产精品久久亚洲7777| 亚洲一区二区三区免费在线观看 | 亚洲免费网站| 国产亚洲毛片| 亚洲欧美春色| 久久av免费一区| 美日韩免费视频| 免费不卡亚洲欧美| 久久伊人一区二区| 欧美特黄一区| 国产欧美另类| 久久九九精品| 精品99视频| 一区二区三区高清视频在线观看| 国产午夜精品在线| 免费久久久一本精品久久区 | 在线视频国内自拍亚洲视频| 亚洲高清视频一区| 亚洲在线日韩| 欧美在线一二三区| 在线播放亚洲| 性感少妇一区| 亚洲午夜精品一区二区| aa级大片欧美三级| 西西裸体人体做爰大胆久久久| 久久精品男女| 影音先锋在线一区| 亚洲一区日韩| 国产在线不卡| 亚洲影音一区| 欧美日韩精品免费观看视一区二区| 国产精品v欧美精品v日韩| 亚洲美女黄网| 欧美三级视频| 国产精品毛片在线看| 另类av一区二区| 亚洲高清成人| 午夜国产精品视频免费体验区| 伊人久久亚洲热| 欧美1区2区3区| 中文在线一区| 国语精品中文字幕| 久久久久网站| 国产精品午夜av在线| 国内精品久久久久久久97牛牛 | 亚洲一区二区精品在线| 国产中文一区| 久久婷婷影院| 香蕉成人久久| 亚洲免费黄色| 亚洲夜间福利| 国产一区二区三区四区hd| 久久成人亚洲| 亚洲欧美春色| 国产精品乱看| 亚洲欧洲综合| 亚洲日韩成人| 激情综合视频| 欧美日一区二区在线观看 | 麻豆成人av| 亚洲精品在线视频观看| 国产综合自拍| 国产精品啊v在线| 欧美日韩三区| 国产一区清纯| 亚洲特色特黄| 亚洲国产婷婷| 一本久道久久综合婷婷鲸鱼| 欧美日韩在线精品一区二区三区| 久久久久看片| 欧美国产91| 欧美三日本三级少妇三99| 久久人人超碰| 欧美aa国产视频| 欧美在线亚洲| 国产在线精品二区| 伊人久久大香线蕉av超碰演员| 国产字幕视频一区二区| 国产精品国产三级国产专区53| 欧美日韩国产精品一卡| 欧美日韩国产亚洲一区| 欧美日韩亚洲一区三区| 韩国一区二区三区在线观看| 国产精品v欧美精品v日韩精品| 欧美成人一品| 亚洲手机在线| 99re6热在线精品视频播放速度| 亚洲黄色精品| 国产精品久久久对白| 久久精品动漫| 国内精品福利| 99国产精品| 亚洲免费影视| 狠狠色噜噜狠狠狠狠色吗综合 | 欧美三级第一页| 国内精品福利| 在线视频观看日韩| 国产日韩欧美精品| 午夜精品电影| 夜夜嗨一区二区| 欧美一区视频| 99香蕉国产精品偷在线观看 | 欧美国产综合视频| 国产在线一区二区三区四区| 影音先锋亚洲精品| 久久99伊人| 在线观看成人av| 亚洲中字黄色| 国内精品久久久久国产盗摄免费观看完整版| 极品日韩av| 欧美尤物一区| 亚洲少妇自拍| 国产精品国色综合久久| 国产精品一页| 亚洲激情欧美| 欧美视频观看一区| 免费国产自线拍一欧美视频| 韩日成人av| 久久xxxx| 野花国产精品入口| 狠狠色丁香久久综合频道| 亚洲欧美不卡| 99亚洲视频| 欧美特黄一级| 女女同性女同一区二区三区91| 亚洲精品激情| 亚洲一级影院| 国产一区二区三区四区三区四| 亚洲综合好骚| 在线亚洲激情| 亚洲麻豆av| 亚洲国产婷婷香蕉久久久久久99| 午夜精品电影| 久久亚洲精品伦理| 噜噜噜91成人网| 欧美专区18| 香蕉国产精品偷在线观看不卡| 9国产精品视频| 亚洲三级影院| 99精品国产在热久久下载| 亚洲国产一区二区三区高清| 午夜精品剧场| 欧美日韩一区二区三| 欧美激情精品久久久六区热门| 久久综合中文| 久久激情婷婷| 久久精品中文| 欧美在线免费一级片| 欧美在线不卡| 欧美日本一区| 亚洲视频精品| 日韩视频一区二区三区在线播放免费观看| 黄色成人av网站| 一区在线播放| 99国产精品99久久久久久粉嫩| 亚洲精品黄色| 亚洲永久字幕| 久久青草久久| 欧美国产视频在线观看| 国产综合18久久久久久| 亚洲高清激情| 一区二区三区久久网| 国产精品入口66mio| 蜜桃av久久久亚洲精品| 欧美日韩精品免费看| 狠狠入ady亚洲精品| 亚洲欧洲精品一区| 国产模特精品视频久久久久| 久久精品电影| 精品99视频| 亚洲一区二区三区精品视频| 久久永久免费| 亚洲精品欧美| 久久av二区| 国内综合精品午夜久久资源| 日韩一区二区免费看| 久久精品成人| 伊人久久婷婷色综合98网| 国产精品久久久对白| 国产精品二区影院| 妖精视频成人观看www| 久久久精品动漫| 影音先锋久久| 欧美一区二区在线| 一级日韩一区在线观看| 久久尤物视频| 国产精品试看| 亚洲激情成人| 欧美另类高清视频在线| 夜久久久久久| 亚洲天堂激情| 久久亚洲国产精品一区二区| 亚洲精品日韩久久| 国产精品a级| 久久久夜夜夜| 国产亚洲在线观看| 激情一区二区| 欧美日韩在线观看一区二区三区| 在线亚洲成人| 亚洲激情国产| 好吊色欧美一区二区三区四区 | 亚洲大黄网站| 久久婷婷丁香| 亚洲欧美清纯在线制服| 在线免费观看欧美| 欧美日韩在线精品一区二区三区| 六月丁香综合| 香蕉av777xxx色综合一区| 亚洲国内自拍| 亚洲视频一二| 精品9999| 91久久在线| 亚洲精品1区| 亚洲精品123区| 国语精品中文字幕| 国产精品s色| 亚洲午夜精品久久久久久浪潮| 欧美精品一区二区三区久久久竹菊| 午夜亚洲一区| 久久福利电影| 狼狼综合久久久久综合网| 久久久精品性| 女主播福利一区| 欧美另类视频| 国产主播一区二区三区四区| 欧美黄色一区| 国内不卡一区二区三区| 影音先锋中文字幕一区二区| 激情综合在线| 91久久极品少妇xxxxⅹ软件| 亚洲激情黄色| 国产精品一区二区三区免费观看| 国产精品区一区| 久久婷婷丁香| 国产精品二区在线观看| 伊人蜜桃色噜噜激情综合| 91久久黄色| 亚洲欧美日韩国产一区| 久久精品国产清高在天天线 | 国内精品久久久久国产盗摄免费观看完整版 | 国产欧美日韩一区| 国产亚洲精品v| 久久亚洲免费| 黄色成人精品网站| 国产偷国产偷亚洲高清97cao| 亚洲综合不卡| 欧美日本亚洲| 亚洲另类视频| 久久综合九色综合网站| 国内精品久久久久久久影视蜜臀| 91久久亚洲| 快she精品国产999| 亚洲国产精品综合| 久久国产主播精品| 国内精品视频在线播放| 一区二区三区久久网| 久久一区亚洲| 一区二区三区欧美成人| 欧美~级网站不卡| 亚洲精品一二| 午夜精品剧场| 国产精品免费区二区三区观看| 欧美淫片网站| 制服诱惑一区二区| 欧美体内she精视频在线观看| 99国产一区| 国产一区久久| 久久综合狠狠| 国产亚洲福利| 亚洲大片av| 欧美精品首页| 美日韩免费视频| 一本一道久久综合狠狠老精东影业 | 日韩视频一区|