webForumDet fria alternativet

Sakta ner loop

6 svar · 577 visningar · startad av Tulork

TulorkMedlem sedan aug. 2004903 inlägg
#1

Vet inte om det är mer lämpligt att göra det med hjälp av Javascript... men jag skulle behöva en sätt att söla ner en loop.

Exempelloop

for($i = 0; $i < 10; $i++) {
   echo "***********";
}

Om jag skulle vilja att echo bara körs 1 gång vart 0.5:e sekund. Hur ska jag gå till väga?

SPiNMedlem sedan mars 20007 896 inlägg
#2
<?php
echo "Hej";
usleep(500000);
echo "En halv sekund senare";

Tänk dock på att användarna upplever sidan som långsam, hela output:en från PHP brukar buffras i webservern innan något visas för besökaren. Antagligen är JavaScript lösningen du är ute efter.

TulorkMedlem sedan aug. 2004903 inlägg
#3

Japp, det är nog javascript jag är ute efter. Men... det är jag ännu sämre på. Någon vänlig själ får mer än gärna flytta den här tråden till javascriptavdelningen.

The_HulkMedlem sedan juni 20031 837 inlägg
#4

Hela output:en behöver inte buffras på servern, man kan tvinga ut den med

flush();

Det är dock inte alltid det fungerar men oftast, jag vet inte om det är något man kan ställa in i webbservern eller i php.ini

CompusaMedlem sedan jan. 20023 327 inlägg
#5

Flyttad från PHP, enligt trådskaparens begäran.

nitro2k01Medlem sedan aug. 20039 342 inlägg
#6
<body>
<script type="text/javascript">

function IntervalTimer(f, t, i){
	var t=t,f=f,i=i,th=this;

	if (this===window)
		throw new Error('IntervalTimer: Object must be created with new IntervalTimer(myFunc, 1000, 5)');

	if ('function' != typeof f)
		throw new Error('IntervalTimer: Supplied argument f is not a function.');

	var iid=setInterval(function(){
		if (--i<1)
			th.clearInterval()

		var retval = f.call(window, i);

		if (retval)
			this.clearInterval();
	}, t);

	this.clearInterval=function(){
		window.clearInterval(iid);
	}
}

function test(times){
	var output = document.getElementById('output');
	var textElem = document.createTextNode(times + ' gånger kvar. ');
	output.appendChild(textElem);
}

window.onload=function(){
	timer = new IntervalTimer(test, 2000, 3);
}
</script>
<div id="output">Output: </div>

</body>

Du kan använda setInterval för att köra en funktion med jämna mellanrum. Ovan har jag bifogat en funktion som dessutom enkelt låter dig funktionen enbart x antal gånger. Funktionen måste anropas med new som visas ovan. I exemplet körs funktionen 3 gånger med 2000 millisekunders mellarum. (Alltså 2 sekunder)
Notera för övrigt att du inte kan använda document.write när sidan är färdigladdad - då måste du lägga till saker på annat sätt, t ex med DOM-metoder som ovan, eller mha innerHTML.

TulorkMedlem sedan aug. 2004903 inlägg
#7

Tack för all hjälp :)

Men jag löste det själv

<div id="codeOutput" style="margin-bottom: 10px; color: #666;"></div>
<script type="text/javascript">
function showDelay() {
	var somediv = document.getElementById('codeOutput');
	somediv.innerHTML = random()+"<br />";
}

function random(){
	var randIt = Math.random();
	var string = new Array();
	
	randIt = randIt * 10;
	randIt = Math.floor(randIt);
	
	string[0] = "#get file -p, if(isset)-777";
	string[1] = "#list file->content()";
	string[2] = "#query table(accounts) + SQLinjection, put result->file -w";
	string[3] = "#save file /var/home/bank$id";
	string[4] = "#inject query($sql)";
	string[5] = "#transfer this->amount($cents)";
	string[6] = "#error 98f1vklALgpg!";
	string[7] = "#exec file->dir(var/home/bank$id)";
	string[8] = "#sweep this->($tracks)";
	string[9] = "#grab this->info(bank$id)";
	
return string[randIt];
}

var delayTime = 0
var rows = 10

for (i=0; i<rows; i++){
	setTimeout("showDelay()", delayTime);
	delayTime += 150
}
</script>
131 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)