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:
http://kb2.adobe.com/cps/156/tn_15683.html var isIE = navigator.appName.indexOf("Microsoft") != -1;
return (isIE) ? window[movieName] : document[movieName];
}
</script>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="
http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" 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="
http://www.macromedia.com/go/getflashplayer" /> </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()å½æ°è¿æ¯æ好çéæ©ã
追é®æ¯ææéäºã请é®delayå½æ°æ没ã