Webstopper
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;
}
■
Hmm, nekem eddig megfelelt a
Integrálható
+1
Update: rakjátok mán' be azt a lájkoló gombot, annyira nem bonyolult.
Mire ezt implementálják