2013-02-13 19 views
6

Chciałbym zaimplementować skrypt, który mierzy czas odpowiedzi mojego serwera (= zdalnego adresu URL) od klienta za pomocą zwykłej przeglądarki bez żadnych dodatkowych wtyczek (Java itp.).Pomiar czasu reakcji serwera (po stronie klienta)

Czekam tylko na prędkości (czas reakcji) sieci nie prędkość Ładowanie strony.

Co poleciłbyś mi zmierzyć? To musi działać na tcp/ip, nie cokolwiek innego jak ICMP (ping).

Jak obejść wdrożenie po stronie klienta? Wolałbym używać JavaScript (JQuery).


Aktualizacja: Jak muszę przekrój sprawdzanie domeny wywołania Ajax nie wydaje się być opcja

Ponadto metoda ajax nie wydaje się dokładne w ogóle. Wyniki wydają się mieć narzut około 50 ms (to prawie stała wartość, bez względu na to, jaka jest domena - myślę, że jest to czas przetwarzania pośredniego) na testowej maszynie w porównaniu do informacji z FireBug

+0

To znaczy, [tak] (http://stackoverflow.com/questions/3498503/find-out-how-long-an-ajax-request-took-to-complete?lq=1)? – Carsten

+0

Tak, ale o ile wiem, jQuery.get zwraca całą odpowiedź, w tym kod html. W tym przypadku prędkość witryny wpłynie na czas reakcji. Raczej szukam czegoś takiego jak ping. EDIT: zresztą, jQuery może (nie jestem zaznajomiony z nim) wywołać inny kod przed wywołaniem zwrotnego, która wpłynie na metodę pomiarową – Kraken

+0

czytanie o tej kwestii, wydaje się nazywa domeny krzyż z JavaScript/jQuery jest przegrana przyczyna.JSONP i proxy wydają się być odpowiedzią, a tym samym czas odpowiedzi nie ma już wartości. –

Odpowiedz

1

Utwórz zasób, który zawsze zwraca pustą odpowiedź 200 OK pod adresem URL, takim jak mysite.net/speedtest. Wtedy coś takiego:

var startTime = (new Date()).getTime(), 
    endTime; 

$.ajax({ 
    type:'GET', 
    url: 'http://mysite.net/speedtest', 
    async: false, 
    success : function() { 
     endTime = (new Date()).getTime(); 
    } 
}); 

alert('Took ' + (endTime - startTime) + 'ms'); 

który daje czas potrzebny do wysyłania żądania do serwera, plus czas potrzebny serwer załadowanie minimalnego zestawu zasobów to wymaga, aby odpowiedzieć na zapytanie.

Nowość: Twoje pytanie jest teraz niezgodne z dodatkowymi informacjami dodanych. Chcesz dostać ping klienta do adresu URL, że nie masz kontroli - to zupełnie inna sprawa niż to, co początkowo poprosił, uzyskanie czasu reakcji od serwera. Jeśli próbujesz uzyskać polecenie ping klienta na swój serwer, wywołanie ajaxa wystarczy. Jeśli próbujesz przekazać ping do innego serwera, jestem nieco zdezorientowany, jeśli chodzi o twój cel.

+0

Zostanie to ostrzeżone przed zakończeniem żądania ajax. –

+0

@RobertFricke Ups, masz rację. Naprawiłem to, dziękuję za notatkę. – AmericanUmlaut

+0

fajne ziarna. Jednak przez wygląd tego, 'endTime' jest ustawiony poprawnie, ale' alert' nadal działa przed 'success'-wywołania zwrotnego, ponieważ będzie on wykonywany bezpośrednio po wywołaniu ajax-a (przed wywołaniem wywołania zwrotnego). –

7

Trzeba tylko do czasu żądania:

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

$.ajax({ 
    //type: "GET", //with response body 
    type: "HEAD", //only headers 
    url: "/someurl.htm", 
    success: function(){ 

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

     var responseTimeMs = receiveDate - sendDate; 

    } 
}); 
+0

responseTimeMs nie jest widoczny poza zasięgiem twojego funkcja sukcesu. – AmericanUmlaut

+0

Tak, ale o ile wiem, zwraca całą odpowiedź, w tym kod HTML. W tym przypadku prędkość witryny wpłynie na czas reakcji. Czy mam rację? – Kraken

+1

Jeśli nie chcesz, aby serwer zwrócił treść odpowiedzi, użyj polecenia 'type:" HEAD "', a zwrócone zostaną tylko nagłówki. –

0
var startTime = (new Date()).getTime(), 
    endTime; 
$.ajax({ 
type: "GET", 
url: "test.html", 
dataType: "html", 
success:function(data){ 
endTime = (new Date()).getTime(); 
} 
}); 

Teraz podjąć różnicę.

0

Możesz to zrobić bardzo łatwo.

var t = Date.now(); 
var t2; 
$.ajax({ 
    url:'page', 
    success:function(){ 
     t2 = Date.now(); 
     console.log(t2-t);//the time needed to do the request 
    } 
}); 

Strona do zapytania powinna być pusta, aby naśladować dodatkowy czas ładowania.

+0

Po prostu nie mogę go opróżnić. W każdym razie myślę, że jeśli po prostu zażądam nagłówków używających rozwiązania @RobertFricke, mógłbym obejść ten problem – Kraken

+1

@kraken tak, możesz po prostu uzyskać nagłówek i problem został rozwiązany. – Licson

Powiązane problemy