日韩欧美人妻无码精品白浆,www.大香蕉久久网,狠狠的日狠狠的操,日本好好热在线观看

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

小試JavaScript多線程

admin
2010年11月25日 22:11 本文熱度 4008
法寶就是Concurrent.Thread這個(gè)家伙,其實(shí)是一個(gè)js庫(kù),你可以從網(wǎng)站下載源代碼.如何使用呢?
很簡(jiǎn)單
Concurrent.Thread.create(f, a1, a2, ...) f為你要調(diào)用的函數(shù),a1,a2為該函數(shù)的參數(shù),這樣創(chuàng)建了一個(gè)線程,你可以同時(shí)創(chuàng)建多個(gè),他們會(huì)同時(shí)去執(zhí)行,這個(gè)庫(kù)同時(shí)提供 了很多的方法,類似其它語(yǔ)言里的Thread使用方法,如Concurrent.Thread.stop();等。具體去網(wǎng)站去了解。
復(fù)制代碼 代碼如下:
<html>
<body>
<script type="text/javascript" src="Concurrent.Thread.Compiler.js"></script>
<script type="text/javascript">
function hello ( ) {
document.body.innerHTML += "H";
document.body.innerHTML += "e";
document.body.innerHTML += "l";
document.body.innerHTML += "l";
document.body.innerHTML += "o";
document.body.innerHTML += ",";
document.body.innerHTML += " ";
document.body.innerHTML += "w";
document.body.innerHTML += "o";
document.body.innerHTML += "r";
document.body.innerHTML += "l";
document.body.innerHTML += "d";
document.body.innerHTML += "!";
}
Concurrent.Thread.create(hello);
</script>
</body>
</html>

作者 Daisuke Maki譯者 張凱峰
雖然有越來(lái)越多的網(wǎng)站在應(yīng)用AJAX技術(shù)進(jìn)行開(kāi)發(fā),但是構(gòu)建一個(gè)復(fù)雜的AJAX應(yīng)用仍然是一個(gè)難題。造成這些困難的主要原因是什么呢?是與服務(wù)器的異步通信問(wèn)題?還是GUI程序設(shè)計(jì)問(wèn)題呢?通常這兩項(xiàng)工作都是由桌面程序來(lái)完成的,那究竟為何開(kāi)發(fā)一個(gè)可以實(shí)現(xiàn)同樣功能的AJAX應(yīng)用就這么困難呢?
AJAX 開(kāi)發(fā)中的難題
讓我們通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)認(rèn)識(shí)這個(gè)問(wèn)題。假設(shè)你要建立一個(gè)樹(shù)形結(jié)構(gòu)的公告欄系統(tǒng)(BBS),它可以根據(jù)用戶請(qǐng)求與服務(wù)器進(jìn)行交互,動(dòng)態(tài)加載每篇文章的信息,而不是一次性從服務(wù)器載入所有文章信息。每篇文章有四個(gè)相關(guān)屬性:系統(tǒng)中可以作為唯一標(biāo)識(shí)的ID、發(fā)貼人姓名、文章內(nèi)容以及包含其所有子文章 ID的數(shù)組信息。首先假定有一個(gè)名為getArticle()的函數(shù)可以加載一篇文章信息。該函數(shù)接收的參數(shù)是要加載文章的ID,通過(guò)它可從服務(wù)器獲取文章信息。它返回的對(duì)象包含與文章相關(guān)的四條屬性:id,name,content和children。例程如下:
function ( id ) {
var a = getArticle(id);
document.writeln(a.name + "
" + a.content);
}
然而你也許會(huì)注意到,重復(fù)用同一個(gè)文章ID調(diào)用此函數(shù),需要與服務(wù)器之間進(jìn)行反復(fù)且無(wú)益的通信。想要解決這個(gè)問(wèn)題,可以考慮使用函數(shù) getArticleWithCache(),它相當(dāng)于一個(gè)帶有緩存能力的getArticle()。在這個(gè)例子中,getArticle()返回的數(shù)據(jù)只是作為一個(gè)全局變量被保存下來(lái):
var cache = {};
function getArticleWithCache ( id ) {
if ( !cache[id] ) {
cache[id] = getArticle(id);
}
return cache[id];
}
現(xiàn)在已將讀入的文章緩存起來(lái),讓我們?cè)賮?lái)考慮一下函數(shù)backgroundLoad(),它應(yīng)用我們上面提到的緩存機(jī)制加載所有文章信息。其用途是,當(dāng)讀者在閱讀某篇文章時(shí),從后臺(tái)預(yù)加載它所有子文章。因?yàn)槲恼聰?shù)據(jù)是樹(shù)狀結(jié)構(gòu)的,所以很容易寫(xiě)一個(gè)遞歸的算法來(lái)遍歷樹(shù)并且加載所有的文章:
function backgroundLoad ( ids ) {
for ( var i=0; i < ids.length; i++ ) {
var a = getArticleWithCache(ids[i]);
backgroundLoad(a.children);
}
}
backgroundLoad ()函數(shù)接收一個(gè)ID數(shù)組作為參數(shù),然后通過(guò)每個(gè)ID調(diào)用前面定義過(guò)的getArticldWithCache()方法,這樣就把每個(gè)ID對(duì)應(yīng)的文章緩存起來(lái)。之后再通過(guò)已加載文章的子文章ID數(shù)組遞歸調(diào)用backgroundLoad()方法,如此整個(gè)文章樹(shù)就被緩存起來(lái)。
到目前為止,一切似乎看起來(lái)都很完美。然而,只要你有過(guò)開(kāi)發(fā)AJAX應(yīng)用的經(jīng)驗(yàn),你就應(yīng)該知曉這種幼稚的實(shí)現(xiàn)方法根本不會(huì)成功,這個(gè)例子成立的基礎(chǔ)是默認(rèn) getArticle()用的是同步通信??墒?,作為一條基本原則,JavaScript要求在與服務(wù)器進(jìn)行交互時(shí)要用異步通信,因?yàn)樗菃尉€程的。就簡(jiǎn)單性而言,把每一件事情(包括GUI事件和渲染)都放在一個(gè)線程里來(lái)處理是一個(gè)很好的程序模型,因?yàn)檫@樣就無(wú)需再考慮線程同步這些復(fù)雜問(wèn)題。另一方面,他也暴露了應(yīng)用開(kāi)發(fā)中的一個(gè)嚴(yán)重問(wèn)題,單線程環(huán)境看起來(lái)對(duì)用戶請(qǐng)求響應(yīng)迅速,但是當(dāng)線程忙于處理其它事情時(shí)(比如說(shuō)調(diào)用getArticle()),就不能對(duì)用戶的鼠標(biāo)點(diǎn)擊和鍵盤(pán)操作做出響應(yīng)。
如果在這個(gè)單線程環(huán)境里進(jìn)行同步通信會(huì)發(fā)生什么事情呢?同步通信會(huì)中斷瀏覽器的執(zhí)行直至獲得通信結(jié)果。在等待通信結(jié)果的過(guò)程中,由于服務(wù)器的調(diào)用還沒(méi)有完成,線程會(huì)停止響應(yīng)用戶并保持鎖定狀態(tài)直到調(diào)用返回。因?yàn)檫@個(gè)原因,當(dāng)瀏覽器在等待服務(wù)器響應(yīng)時(shí)它不能對(duì)用戶行為作出響應(yīng),所以看起來(lái)像是凍結(jié)了。當(dāng)執(zhí)行 getArticleWithCache()和backgroundLoad()會(huì)有同樣的問(wèn)題,因?yàn)樗鼈兌际腔趃etArticle()函數(shù)的。由于下載所有的文章可能會(huì)耗費(fèi)很可觀的一段時(shí)間,因此對(duì)于backgroundLoad()函數(shù)來(lái)說(shuō),瀏覽器在此段時(shí)間內(nèi)的凍結(jié)就是一個(gè)很?chē)?yán)重的問(wèn)題——既然瀏覽器都已經(jīng)凍結(jié),當(dāng)用戶正在閱讀文章時(shí)就不可能首先去執(zhí)行后臺(tái)預(yù)加載數(shù)據(jù),如果這樣做連當(dāng)前的文章都沒(méi)辦法讀。
如上所述,既然同步通信在使用中會(huì)造成如此嚴(yán)重的問(wèn)題,JavaScript就把異步通信作為一條基本原則。因此,我們可以基于異步通信改寫(xiě)上面的程序。 JavaScript要求以一種事件驅(qū)動(dòng)的程序設(shè)計(jì)方式來(lái)寫(xiě)異步通信程序。在很多場(chǎng)合中,你都必須指定一個(gè)回調(diào)程序,一旦收到通信響應(yīng),這個(gè)函數(shù)就會(huì)被調(diào)用。例如,上面定義的getArticleWithCache()可以寫(xiě)成這樣:
var cache = {};
function getArticleWithCache ( id, callback ) {
if ( !cache[id] ) {
callback(cache[id]);
} else {
getArticle(id, function( a ){
cache[id] = a;
callback(a);
});
}
}

該文章在 2010/11/25 22:11:57 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車(chē)隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

av亚洲中文字幕| 日本三级电影院一区四区| 蜜臀超碰91| 夫妻真实性生活av在线| 一区二区 日本 欧美| 久久妻久久| 欧美一区二区站| 人妻熟女一一区二区| 欧美日韩国产一区二区精品久久视频| 久久噜噜噜噜噜噜噜噜| 欧美一区1区三区3区公司| 国产成人盗摄综合在线| 伊人麻豆| 美女推油一区二区三区| 一级A级高清无码网站免| 99热色在线精品| 亚洲欧洲激情在线| 久热视频在线日本免费观看| 日韩在线三级免费看| 欧美熟女人妻a| 欧精品一区二区| 亚色天堂在线| 欧美激情1区2区3区4区| 亚州中文不卡字幕免费视频| 天天干天天爽天天射天天操| 九九色色东北黄色片| 欧美日韩免费成人一区二区| 国产欧美中日韩在线| 婷婷久亚洲中文字幕| 久精品国产欧美| 欧洲亚洲无码高清在线| 人妻一区二区高清免费| 亚洲中文字幕AV1区二区| 草草影院伦理第一页| 久久久婷婷香| 婷婷五月国内自拍| 亚洲日韩精品综合传媒一区二| 婷婷丁香五月天开心在线综合观看| 人人操人人槽植| 美女被c到爽视频网址在线观看| 黄色三级片视频久久久久|