ugrás a tartalomhoz

Webstopper

Joó Ádám · 2010. Aug. 8. (V), 15.07

Ahogy növekszik a webes alkalmazások komplexitása, úgy válik egyre égetőbb kérdéssé azok teljesítménye és ennek mérése.

var start = (new Date).getTime();

window.onload = function () {
	var end     = (new Date).getTime();
	var latency = end - start;
}

Ismerős a fenti kód? Ezzel több baj is van. Egyrészt maga a mérés befolyásolja az eredményeket: korábban kell betölteni a JavaScript interpretert, a kód feldolgozása késlelteti a többi erőforrás betöltését sít. Másrészt a JavaScript időbélyegek pontossága a böngészők között 7,5 ezredmásodperces eltérést mutat, ami, figyelembe véve az ezredmásodperc alatt végrehajtott műveleteket, akár 750%-os pontatlanságot is eredményezhet. Mindennek tetejébe pedig a fenti technika csak az oldal betöltésének kezdetétől számított időt jelzi, holott a felhasználó által érzékelt idő ennél a kiszolgáló és a hálózat késése miatt sokkal nagyobb.

A W3C új Web Timing ajánlástervezete erre keres megoldást egy szabványos analitikai felület definiálásával.

Előző példánk ennek használatával a következőképpen néz ki:

window.onload = function () {
	var end     = (new Date).getTime();
	var latency = end - window.performance.timing.navigationStart;
}

A fenti kód a következő felületre támaszkodik:

interface NavigationTiming {
    readonly attribute unsigned longlong navigationStart;
    readonly attribute unsigned longlong unloadEventStart;
    readonly attribute unsigned longlong unloadEventEnd;
    readonly attribute unsigned longlong redirectStart;
    readonly attribute unsigned longlong redirectEnd;
    readonly attribute unsigned longlong fetchStart;
    readonly attribute unsigned longlong domainLookupStart;
    readonly attribute unsigned longlong domainLookupEnd;
    readonly attribute unsigned longlong connectStart;
    readonly attribute unsigned longlong connectEnd;
    readonly attribute unsigned longlong requestStart;
    readonly attribute unsigned longlong requestEnd;
    readonly attribute unsigned longlong responseStart;
    readonly attribute unsigned longlong responseEnd;
    readonly attribute unsigned longlong loadEventStart;
    readonly attribute unsigned longlong loadEventEnd;
};

Ezen túl a window.performance.navigation alatt további tájékoztatást kapunk a kérés jellegéről, és ha volt, akkor az átirányítások számáról:

interface NavigationInfo {
    const unsigned short TYPE_NAVIGATE     = 0;
    const unsigned short TYPE_RELOAD       = 1;
    const unsigned short TYPE_BACK_FORWARD = 2;
    const unsigned short TYPE_NEW_WINDOW   = 3;
    const unsigned short TYPE_RESERVED     = 255;
    
    readonly attribute unsigned short type;
    readonly attribute unsigned short redirectCount;
};

Az első böngésző pedig, mely az új interfészeket saját névterében implementálja az Internet Explorer 9, melynek előzetesében a felület már elérhető. A microsoftos srácok ezen túlmenően a legfontosabb intervallumokat előre kiszámítva is megadják a window.msPerformance.timingMeasures alatt:

interface MSPerformanceTimingMeasures{
    readonly attribute unsigned longlong navigation;
    readonly attribute unsigned longlong fetch;
    readonly attribute unsigned longlong unload;
    readonly attribute unsigned longlong domainLookup;
    readonly attribute unsigned longlong connect;
    readonly attribute unsigned longlong request;
    readonly attribute unsigned longlong response;
    readonly attribute unsigned longlong domLoading;
    readonly attribute unsigned longlong domInteractive;
    readonly attribute unsigned longlong domContentLoaded;
    readonly attribute unsigned longlong domComplete;
    readonly attribute unsigned longlong load;
    readonly attribute unsigned longlong firstPaint;
    readonly attribute unsigned longlong fullyLoaded;
}
 
1

Hmm, nekem eddig megfelelt a

inf · 2010. Aug. 8. (V), 16.48
Hmm, nekem eddig megfelelt a firebug net panelja, ez miben jobb? (azon kívül, hogy szabványos)
2

Integrálható

Joó Ádám · 2010. Aug. 8. (V), 19.56
Ezt maga az alkalmazás is tudja használni, így például az adatok a háttérben adatbázisba menthetők analitikai célokra, vagy akár futás közben maga az alkalmazás is változtathat a viselkedésén az eredmények függvényében.
4

+1

janoszen · 2010. Aug. 8. (V), 21.37
+1, lájkoljuk, jó lehet a sávszél és latency függő változatokra. Ha nem elég a naftalin, berakjuk a képmentes verziót.

Update: rakjátok mán' be azt a lájkoló gombot, annyira nem bonyolult.
3

Mire ezt implementálják

janoszen · 2010. Aug. 8. (V), 21.35
Hát Te... kiváncsi leszek, mikorra implementálják ezt. Egyébként pont a minap dolgoztam egy JavaScript toolkiten (frameworknek nem nagyon nevezném), ami földobott nekem egy Firebughoz hasonló konzolt az oldalon belül. A célja egyértelműen hibakeresés/jelentés. Na abba jó lenne.