Archief - javascript dynamisch laden

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Bram

Legacy Member
Hey

Ik zit met een redelijk groot project waar er afhankelijk van de pagina verschillende js files ingeladen worden.

Aangezien dat uiteindelijk toch om een hoop extra requests gaat, dacht ik een .php script te gebruiken dat de files inleest, in een pagina steekt en van daar uit leest, in het gedacht dat de pagina dan sneller ging laden.

Ik heb nu echter eens een testje gedaan, 20 keer de load times gemeten met en zonder script, wat blijkt, als ik de files apart inlaadt, laad de pagina zogezegd 3.5% sneller dan als ik het script gebruik. Ik zou denken dat het drastisch verlagen van aantal requests allerminst een positieve invloed zou hebben, maar blijkbaar niet...

Mensen die hier ervaring mee hebben? Tips hebben?

Hieronder het script:
PHP:
<?php
$Files = explode('|', $_GET['f']); // all the files in an array

$Success = true; // will be used to display a 404 if a file isn't found
$latestLMT = 0; // last timestamp one of the files was changed
$JS = ""; // all the javascript

foreach($Files as $File )
{
	if (file_exists($File)) 
	{
		$last_modified_time = filemtime($File);
		if($last_modified_time > $latestLMT) // file was modified after previous file
		{
			$latestLMT = $last_modified_time;
			$etag = md5_file($File);
		}
		$handle = fopen($File, "r"); // open file 
		$JS .= fread($handle, filesize($File))."\n"; // add it to string, with a new line
		fclose($handle);    
	}
	else
	{
		$Success = false; // file doesn't exist, display 404
	}
}

if($Success)
{
	//to show the header as text/javascript
	header("Content-type:text/javascript");
	header("Last-Modified: ".gmdate("D, d M Y H:i:s", $latestLMT)." GMT"); // set last modified and etag of last changed js file
	header("Etag: $etag");

	if (@strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $latestLMT ||
		trim($_SERVER['HTTP_IF_NONE_MATCH']) == $etag) {
		header("HTTP/1.1 304 Not Modified");
		exit;
	} 
	
	print $JS;
}
else
{
	header("HTTP/1.0 404 Not Found");
}

// EOF loadJS.php

SkY

Legacy Member
Mijn uitleg kan hier helemaal verkeerd zijn maar hoe ik erover denk:
Een .js file wordt toch maar 1 keer ingeladen en wordt voor de rest toch gewoon uit de browser cach van de gebruiker gehaald tot hij aangepast wordt = geen tijd verlies meer als hij eenmaal ingeladen is?
In veronderstelling dat de door u gegenereerde pagina's geen gecachete pagina's zijn moet hij wel nog élke keer dat scriptje doorlopen...

Bram

Legacy Member
Mijn gegenereerde pagina met JS (wel 400kb groot) wordt weldegelijk gecached (door een Header 304 not modified te zenden).

Ik heb het ook ff getest zonder die 304 en dan duurt het inderdaad gemakkelijk 30% langer om de pagina te laden. Ik had gewoon gedacht dat de page requests wel degelijk iets gingen uitmaken, ook al wordt alles uit de cache gehaald.

dJeez

Legacy Member
Aangezien de requests parallel uitgevoerd kunnen worden kan een pak kleine bestanden ophalen idd sneller zijn dan enkele grote bestanden (aangezien je daar steeds moet wachten tot die volledig ingeladen zijn). Maar eens ze lokaal in je cache staan zou er weinig verschil moeten zijn. Sowieso zou ik afraden van je JS in je gegenereerde pagina te steken. Wat je wel kan doen is iets als minify gebruiken eens je JS wat stabiel is.

En je kan ook Firebug/YSlow inschakelen om bottlenecks op te sporen uiteraard.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan