Patrzę na takie metody:

function aa() {
    var start = new Date().getTime();
    $.ajax({
        cache: false,
        url: href + params.param,
        dataType: 'html'
    })
    .done(function (responseText) {
        xx();
    })
    .fail(function (jqXHR, textStatus, errorThrown) {
        yy();
    })
    .always(function () {
        zz(start);
    });
};

function zz(start) {
    var end = new Date().getTime();
    var elapsed = end.getMilliseconds() - start.getMilliseconds();
}

Po pierwsze. Czy jest to ważny sposób na zmierzenie czasu, jaki potrzebuje? Jest też inny sposób, w jaki mogłem to zrobić. Na przykład jest jakiś sposób, jaki mógłbym przeczytać coś z nagłówka Ajax i jeśli tak, jak mogłem to przeczytać?

Uwaga Szukam rozwiązania w kodzie, więc mogę zgłosić czasy na stronie HTML.

2
Samantha J T Star 29 sierpień 2012, 04:47

5 odpowiedzi

Najlepsza odpowiedź

Jest to absolutnie ważny sposób na pomiar czasu pomiędzy, gdy wystawiona zostanie wniosek, a gdy dane są zwracane. Celem jest zmierzenie czasu, który klient widzi przekazanie między wydaniem żądania a otrzymywanie odpowiedzi, więc użycie zegara klienta jest idealne. (Zwykle chcesz uniknąć porównania czasu, które obejmują synchronizację zegarów serwera i klienta; za pomocą nagłówka HTTP Date: zrobi to tylko to.)

Istnieją dwie rzeczy, które zrobiłbym, aby poprawić:

  • Najpierw Bind the always Handler. Ponieważ Deferred Callbacks są wykonywane w kolejności, które są dodawane, wiązanie {x2}} najpierw nie będziemy mieli pomiaru wyrzuconych przez kosztowne operacje obliczeniowe w obszarze done.

  • Nie ma potrzeby instancji obiektów Date. Statyczne Date.now() zwraca bieżący czas w MS jako numer.

Można nawet wykonać upłynął obliczenia w zasięgu, więc jest dostępny dla wywołania zwrotów done / fail.

function aa() {
    var start = Date.now(), elapsed;
    $.ajax({
        cache: false,
        url: href + params.param,
        dataType: 'html'
    })
    .always(function () {
        elapsed = Date.now() - start;
    });
    .done(function (responseText) {
        xx(elapsed);
    })
    .fail(function (jqXHR, textStatus, errorThrown) {
        yy(elapsed);
    });
};
1
josh3736 29 sierpień 2012, 01:33

Firebug dla Firefoksa powie ci, jak długo zajmuje połączenie

0
Alex Reynolds 29 sierpień 2012, 00:51

Twierdzę, że twój sposób jest dość czysty. Nie ma nic wbudowanego do odpowiedzi, która mówi, jak długo trwa żądanie, chyba że tam umieściłeś. Jeśli spróbujesz wykonać jakiś rejestrowanie po stronie serwera, to nie uwzględnia czasu na żądanie, aby przejść przez drut.

0
golf 29 sierpień 2012, 00:57

Być może uruchomić jakiś komputerowy komputer, który po prostu przeładowuje stronę co raz na jakiś czas i zachowuje własny dziennik ... Wysyłanie alertu, jeśli transfer zajmie zbyt długo.

Pod * NIX można zautomatyzować to za pomocą prostego skryptu i wget i / lub curl.

0
Jeremy J Starcher 29 sierpień 2012, 01:06

Jeśli używasz Ruby lub .NET, możesz spojrzeć na miniprofiler. To zrobi to, co chcesz. A może możesz sprawdzić, jak to robi w środku.

0
Alexandre Jobin 29 sierpień 2012, 01:23