Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP sivun luomisaika

Sivun loppuun

Rocceri [17.05.2009 11:00:27]

#

Putkassa on jo tästä aihe, mutta tämä on jo vähän vanhentunut.
Tarkoitus olisi saada siis sivun luomisaika.
Noissa on vain pieni ongelma. Sivuni lataa sekunttikellon mukaan noin 15 sekuntia, ja nuo koodit näyttävät noin 0,5-2,5 sekuntia ajaksi.

Missäs voisi olla vika?

trilog [17.05.2009 11:07:46]

#

Tuolla esitellyt koodit laskevat kuinka kauan palvelin loi sivua. Sekuntikellolla mitattuna mukaan tulevat mm. luomiseen käytetty aika (palvelin), siirtäminen verkon yli ja sivun muodostamiseen käytetty aika (selain).

Rocceri [17.05.2009 11:12:56]

#

trilog kirjoitti:

Tuolla esitellyt koodit laskevat kuinka kauan palvelin loi sivua. Sekuntikellolla mitattuna mukaan tulevat mm. luomiseen käytetty aika (palvelin), siirtäminen verkon yli ja sivun muodostamiseen käytetty aika (selain).

Niimpä tietysti :D
Pystyykö nuo kaikki laskemaan jotenkin?

trilog [17.05.2009 13:33:14]

#

Periaatteessa on mahdollista. PHP:lla luot sivun johon lasket luomiseen käytetyn ajan ja laitat mukaan aikaleiman siitä, milloin sivu on ollut valmis. Tämän jälkeen otat JavaScriptillä myös aikaleiman, näiden kahden aikaleiman erotus on aika, joka sivulta kesti siirtyä verkon yli. Sitten käynnistät JavaScriptillä toisen ajastimen ja pysäytät sen kun sivu on ladattu kokonaan. Sen jälkeen summaat kaikki edellä mainitut ajat (PHP:n ajastin + JavaScriptin ajastin + aikaleimojen erotus), josta saat kokonaisajan. Aika kikkailuksi kyllä menee, joten itse jättäisin toteuttamatta.

Rocceri [17.05.2009 13:51:21]

#

trilog kirjoitti:

Aika kikkailuksi kyllä menee, joten itse jättäisin toteuttamatta.

Sama täällä :D

punppis [18.05.2009 13:01:50]

#

<?php
	function microtime_float() {
		list($usec, $sec) = explode(" ", microtime());
		return (float)$usec + (float)$sec;
	}
	$microtime = microtime_float();
	//sleep(1);
?>
<html>
	<head>
		<script type="text/javascript">
			var currentTime = new Date();
			var aika = currentTime.getTime();
			/*
			var x = 0;
			while(x < 10000000) {
				x++;
			}
			*/
		</script>
	</head>
	<body>
		Sivun tekemiseen (php, selain, siirto) käytetty aika:
		<script type="text/javascript">
			currentTime = new Date();
			var kulunutAika = (currentTime.getTime() / 1000) - <?php echo $microtime; ?>;
			document.write(kulunutAika + " sekuntia ");
		</script>
	</body>
</html>

Varmaan on parin millisekunnin heitto, sillä javascriptillä on mahdoton ottaa mukaan ensimmäiset ja viimeiset tagit, eikä php:llakaan saa ihan ensimmäiselle riville tuota ajan ottoa :P

Kovempi jannu lisää tuohon lukuun vielä microtime_float() -funktion suorittamiseen menevän ajan sekä <script>-tagien ennen ja jälkeen olevien tagien suorittamiseen kuluva aika (selaimelta), niin ollaan lähempänä totuutta :D

jo123 [18.05.2009 14:31:44]

#

Sanoo mulla että meni n 5.2 sek. Sivu on sisäisellä palvelimella. On gigan lan yhteys ja todellisuudessa sivua väännettiin alle 0.1 sek. Aika mahtava tarkkuus sanon minä.

Edit: Ei nyt ihan sentään. Aikaa meniki miinus 5,2 sekunttii :-D

OILgame [18.05.2009 14:40:38]

#

jo123 kirjoitti:

Sanoo mulla että meni n 5.2 sek. Sivu on sisäisellä palvelimella. On gigan lan yhteys ja todellisuudessa sivua väännettiin alle 0.1 sek. Aika mahtava tarkkuus sanon minä.

Edit: Ei nyt ihan sentään. Aikaa meniki miinus 5,2 sekunttii :-D

Ei taida olla kellot samassasa ajassa varmaan.

punppis [18.05.2009 16:13:16]

#

Juu tuossahan pitää olla php-serverin ja oman koneen kellot samassa ajassa millisekunnin tarkkuudella, että tulisi täysin oikea tulos. Omalla koneella WAMP:lla saan ~0.03 sekunnin latauksia tuolla koodilla.

Toinen vaihtoehto on sitten tehdä koodi sillain, että lasketaan php:n ja javascriptin käyttämät ajat erikseen ja lasketaan ne yhteen, mutta tällöin ei saada tiedonsiirtoon kuluvaa aikaa laskettua, mutta kellojen ei tarvitse olla samassa ajassa. Tein itsekin aluksi näin, mutta kun täällä nyt kysyttiin tuota tiedonsiirtoonkin kuluvaa aikaa niin muokkaisin sen tälläiseksi. Oikeastaan tuo ensimmäinen script-tagi on ihan turha jos halutaan laskea myös tuo tiedonsiirto, jäi tuonne vahingossa...

Tässä nyt vielä koodit molempiin:

<?php
	function microtime_float() {
		list($usec, $sec) = explode(" ", microtime());
		return (float)$usec + (float)$sec;
	}
	$microtime = microtime_float();
?>
<html>
	<head>
		<script type="text/javascript">
			var tiedonsiirtoMukana = true;
			var kulunutAika;
			var currentTime;

			if(!tiedonsiirtoMukana) {
				currentTime = new Date();
				var aika = currentTime.getTime();
			}
		</script>
	</head>
	<body>
		Sivun luomiseen käytetty aika:
		<script type="text/javascript">
			currentTime = new Date();
			if(!tiedonsiirtoMukana) {
				// Lasketaan pelkästään php:n ja selaimen käyttämä aika. Kellojen ei tarvitse olla samassa ajassa.
				var aika_js = (currentTime.getTime() - aika) / 1000;
				var aika_php = <?php echo microtime_float() - $microtime; ?>;
				kulunutAika = aika_js + aika_php;
			}
			else {
				// Lasketaan php:n, selaimen ja tiedonsiirtoon käytetty aika. Kellot pitää olla samassa ajassa.
				kulunutAika = (currentTime.getTime() / 1000) - <?php echo $microtime; ?>;
			}

			document.write(kulunutAika + " sekuntia");
		</script>
	</body>
</html>

Edit: Muokkasin koodin vähän helpommin säädettäväksi.

OILgame [18.05.2009 16:20:28]

#

Ton voisi laittaa hakemaan ajaxilla servun kellonajan ja siitä kattoa, mutta tästäkin tulisi taas lisää heittoa :/

Grez [18.05.2009 21:06:09]

#

Itse tekisin niin, että laittaisin linkkien klikkaukseen JS-koodin tunkemaan koneen kellonajan keksiin ja sitten seuraavan sivun latauduttua se näyttäisi paljonko aikaa kului klikkauksesta sivun valmistumiseen. Ei tarvitsisi servupäässä tehdä mitään. Tietty huono puoli tuossa on, että ekalta sivulta ei saisi aikaa.

punppis [18.05.2009 22:35:37]

#

Grez kirjoitti:

Itse tekisin niin, että laittaisin linkkien klikkaukseen JS-koodin tunkemaan koneen kellonajan keksiin ja sitten seuraavan sivun latauduttua se näyttäisi paljonko aikaa kului klikkauksesta sivun valmistumiseen. Ei tarvitsisi servupäässä tehdä mitään. Tietty huono puoli tuossa on, että ekalta sivulta ei saisi aikaa.

Tuo on kieltämättä paljon järkevämpää, mutta ei läheskään niin coolia :D


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta