本文目錄一覽:
- 1、javascript 怎麼實現sleep功能,如果用while循環耗時間, 頁面會鎖死
- 2、js sleep函數怎麼沒有反應?
- 3、在js或as中怎麼實現sleep函數的功能
- 4、js中怎麼讓程序暫停一段時間
- 5、JS中怎麼實現sleep的功能
- 6、js如何實現 sleep()、wait()等功能?
javascript 怎麼實現sleep功能,如果用while循環耗時間, 頁面會鎖死
你戳到js的痛處了
最開始設計時候就是單線程的
即時用setTimeout 模擬
也只是將代碼片插入主線程里 然後間隔一個時間片自動觸發執行
就像埋個定時boom 而不是sleep這種高級遙控boom
所以一般都是用:
setTimeout() 方法用於在指定的毫秒數後調用函數或計算表達式。
語法
setTimeout(code,millisec)
參數
描述
code 必需。要調用的函數後要執行的 JavaScript 代碼串。
millisec 必需。在執行代碼前需等待的毫秒數。
setTimeout() 只執行 code 一次。如果要多次調用,請使用 setInterval() 或者讓 code 自身再次調用 setTimeout()。
js sleep函數怎麼沒有反應?
JavaScript中是沒有sleep命令的,通常情況下,可以使用現有的setTimeout(),clearTimeout()和setInterval()來完成,在這種情況下,你應該使用內置函數。但如果你真的需要有選項的sleep或等待語句,看看什麼代碼可以工作得最好。
sleep方法有什麼要求呢?看看下面的權威描述最能說明問題:
暫停應用程序的當前線程,時間為指定的毫秒數,允許其他進程(或線程)繼續運行。
下面是javascript實現sleep函數的各種方法:
(1)通過循環實現JavaScript sleep
(2)通過Java Applet實現JavaScript sleep
(3)通過Flash實現JavaScript sleep
(4)通過XMLHttp實現JavaScript sleep
通過循環實現JavaScript sleep
代碼如下:
script type=”text/javascript”
// bad implementation
function sleep(milliSeconds){
var startTime = new Date().getTime(); // get the current time
while (new Date().getTime() startTime + milliSeconds); // hog cpu
}
/script
我們使用一個while循環,在第3行,不斷檢測當前的時間,到時間了我們就停止循環。這個循環運行速度很快,瀏覽器將佔用所有寶貴的CPU資源。檢查時間可能看起來並不多,但每秒做數千次(或幾萬),使您的計算機上性能受到影響。
通過Java Applet實現JavaScript sleep
這個解決方案是插入一個Java Applet,通過Javascript和java applets進行通訊,Java Applets使用Java的Thread.sleep()方法休眠線程(不佔用資源)。
applet code=”DevCheater.class” name=”devCheater” id=”devCheater” mayscript=”true” height=”1″ width=”1″
/applet
script type=”text/javascript”
function sleep(milliSeconds){
// runs Java Applets sleep method
document.devCheater.sleep(milliSeconds);
}
/script
此方法不凍結所有頁面中的其他javascript(使用Chrome時除外)。不幸的是,它需要安裝一個Java插件。
通過Flash實現JavaScript sleep
如果我們嘗試了Java,為什麼不試試ADOBE FLASH。我創建了一個Flash應用程序,有一個方法叫flashSleep()。我使用javascript調用我的flash方法,並傳入需要sleep的毫秒數。但不幸的是,這種方法在大多數的瀏覽器中也導致了阻塞。
script type=”text/javascript”
function sleep(milliSeconds){
// call sleep method in flash
getFlashMovie(“flashSleep”).flashSleep(milliSeconds);
}
function getFlashMovie(movieName){
// source:
var isIE = navigator.appName.indexOf(“Microsoft”) != -1;
return (isIE) ? window[movieName] : document[movieName];
}
/script
object classid=”clsid:d27cdb6e-ae6d-11cf-96b8-444553540000″ codebase=”” width=”50″ height=”50″ id=”flashSleep” align=”middle”
param name=”allowScriptAccess” value=”sameDomain” /
param name=”allowFullScreen” value=”false” /
param name=”movie” value=”flashSleep.swf” /
param name=”quality” value=”high” /param name=”bgcolor” value=”#ffffff” / embed src=”flashSleep.swf” quality=”high” bgcolor=”#ffffff” width=”50″ height=”50″ name=”flashSleep” align=”middle” allowScriptAccess=”sameDomain” allowFullScreen=”false” type=”application/x-shockwave-flash” pluginspage=”” /
/object
測試發現,Flash也不是理想的方式。
通過XMLHttp實現JavaScript sleep
另一種方法是使用XMLHttp進行伺服器通信。
script type=”text/javascript”
function sleep(milliSeconds){
var resource;
var response;
if(typeof ActiveXObject == ‘undefined’){
resource = new XMLHttpRequest();
}
else{
// IE
resource = new ActiveXObject(“Microsoft.XMLHTTP”);
}
try{
resource.open(‘GET’, ‘sleep.php?milliSeconds=’ + milliSeconds, false);
resource.send(null);
response = resource.responseText; // JavaScript waits for response }catch(e){
alert(e);
}
return true;}
/script
?PHP
$milliSeconds = intval($_REQUEST[‘milliSeconds’]);
if($milliSeconds 60*1000){
// limit server abuse
$milliSeconds = 10;
}
usleep($milliSeconds * 1000); // note: usleep is in micro seconds not milli echo “done”;
?
該方法並不佔用用戶計算機的CPU資源,但加重了伺服器額外的負載。而且該方法阻塞了瀏覽器中其它javascript,對於伺服器來說產生了類似DDos的攻擊。
結論
從測試數據來看,許多的實現都有一定的副作用,所以setTimeout()或setInterval()函數還是最好的選擇。
在js或as中怎麼實現sleep函數的功能
JS或者AS中好像都沒有現成睡眠的功能,不過你可以用JS中的setTimeOut函數來進行模擬。
js中怎麼讓程序暫停一段時間
非同步執行的函數需要使用回調來獲取返回值你那種想等待回調函數執行後再把結果作為返回值的想法是無法實現,並且是極不可取的因為你並不知道需要多久該回調函數才能執行,讓主線程阻塞在這兒等待不是一個正確的做法。
正確的做法還是在回調函數中獲得值進行處理推薦寫法:
var addre =””;var bm = new BMap.Map(“container”);gpsxy = function (xx,yy,i,callback){//添加一個參數作為回調函數,該函數可以獲取addre參數
var gpsPoint = new BMap.Point(xx,yy);
bm.clearOverlays(); var marker = new BMap.Marker(gpsPoint); bm.addOverlay(marker);
bm.setCenter(gpsPoint); var gc = new BMap.Geocoder();
gc.getLocation(gpsPoint, function(rs){ var addComp = rs.addressComponents;
addre = addComp.province + “, ” + addComp.city + “, ” + addComp.district + “, ” + addComp.street + “, ” + addComp.streetNumber; check();
if(callback) callback(addre);//把addre傳遞到回調函數中,這樣就可以在函數外部使用返回值了 }); }
調用示範:gpsxy(10,10,1,function(addre){ alert(addre);//這兒就可以使用這個值了 });
JS中怎麼實現sleep的功能
函數式代碼要比命令式或者面向對象方式的代碼更簡潔,更可預測以及更容易測試 – 但是如果你不熟悉它及跟它相關的常用模式,函數式代碼看起來也是非常晦澀,並且對於初學者來說它的相關文獻也很難理解。
js如何實現 sleep()、wait()等功能?
分享功能,這要會程序才可以的。要把標題和簡介的欄位按照這些大門戶站 指定的規則發送過去才行的。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/182308.html