2010-03-25 35 views
6

Pracuję nad wewnętrznym systemem korporacyjnym, który ma front-end z wykorzystaniem serwera Tomcat.Jak mogę monitorować czas renderowania w przeglądarce?

  1. Jak mogę monitorować czas renderowania określonych stron w przeglądarce (IE6)?
  2. Chciałbym móc zapisać wyniki w pliku dziennika (osobny plik dziennika lub dziennik dostępu Tomcat).

EDYCJA: Najlepiej byłoby monitorować renderowanie na klientach uzyskujących dostęp do stron.

+0

Znasz "Skrzypek" (https://www.fiddler2.com/fiddler2/version.asp)? – XpiritO

+0

Fiddler może mierzyć czas potrzebny na wykonanie żądania i przesłanie go do klienta, ale jeśli strona jest ważna lub duża javascript, opóźnienie będzie większe, gdy przeglądarka przetworzy DOM i javascript. Jest to szczególnie ważne w przypadku IE6. – driis

+1

"Skrzypek nie jest potrzebny": D – adpd

Odpowiedz

6

Jeśli przeglądarka ma włączoną obsługę JavaScript, jedną z rzeczy, które możesz zrobić, jest napisanie wbudowanego skryptu i wysłanie go w kodzie HTML. Skrypt będzie zrobić dwie rzeczy:

  1. rekordowym czasie obecny system w zmiennej JS (jeśli masz szczęście czas mógłby z grubsza odpowiadają czasowi rozruchu strona rendering).
  2. Dołącz funkcję JS do zdarzenia pageLoad. Ta funkcja ponownie zapyta o bieżący czas systemowy, odejmie czas rozpoczęcia od kroku 1 i wyśle ​​go na serwer wraz z lokalizacją strony (lub unikalnym identyfikatorem, który można dynamicznie wstawić do skryptu wbudowanego na serwerze).
<script language="JavaScript"> 
var renderStart = new Date().getTime(); 
window.onload=function() { 
    var elapsed = new Date().getTime()-renderStart; 
    // send the info to the server 
    alert('Rendered in ' + elapsed + 'ms'); 
} 

</script> 

... usual HTML starts here ... 

trzeba by upewnić się, że strona nie zastępują onload później w kodzie, ale dodaje do listy zamiast obsługi zdarzeń.

+0

+1 - To brzmi jak coś, co obecnie mam na myśli. Dobrze jest uzyskać potwierdzenie tej linii myślenia. Ktoś myśli, że to niewłaściwe podejście? – adpd

+6

To jest teraz przestarzałe. To było najlepsze, co mogłeś zrobić w 2010 roku, ale w 2012 roku większość przeglądarek obsługuje specyfikację W3C Performance Timing i jest to o wiele lepszy sposób na uzyskanie tych informacji. – Ian

+0

To nie działa. Mierzy czas, aż wszystko zostanie załadowane, ale nie zostanie renderowane. Spróbuj wygenerować duży SVG. Zdarzenie 'onload' zostaje wywołane, gdy znany jest rozmiar obrazu SVG, ale użytkownik może nie widzieć go przez pewien czas, dopóki nie zostanie renderowany. –

0

W odniesieniu do technik nieinwazyjnych, Hammerhead mierzy całkowity czas ładowania (w tym wykonanie JavaScript), ale tylko w Firefoksie.

Widziałem użyteczne wyniki, gdy fragment kodu JavaScript mógł zostać dodany globalnie, aby zmierzyć początek i koniec każdej operacji ładowania strony.

0

Spójrz na Selenium - oferują one zdalne sterowanie, które może automatycznie uruchamiać różne przeglądarki (np. IE6), ładować strony, testować określoną zawartość na stronie. Na końcu generowane są raporty, które pokazują również czasy renderowania.

0

Ponieważ inni publikują odpowiedzi, które korzystają z innych przeglądarek, myślę, że ja też. Chrome ma bardzo szczegółowy system profilowania, który rozkłada czas renderowania strony i pokazuje czas potrzebny na każdy krok po drodze.

Co do IE, warto rozważyć napisanie wtyczki. Wydaje się, że na rynku jest niewiele takich narzędzi. Może mógłbyś to sprzedać.

+0

Zgadzam się z (zbyt) "kilkoma narzędziami" na rynku IE. Pisanie wtyczki może nie być złym pomysłem. Mogę rzucić okiem na tamtą. Dzięki za sugestię w Chrome, ale komputery klienckie muszą uruchomić IE6 na czas, ponieważ są to zasady IT firmy. Kiedy pojawi się aktualizacja, na pewno będzie to IE7 lub IE8. Gdybym tylko miał luksus innych przeglądarek ... – adpd

0

W przeglądarce Firefox można używać Firebug do monitorowania czasu ładowania. Dzięki wtyczce YSlow możesz nawet uzyskać rekomendacje, jak poprawić wydajność.

7

Navigation Timing API dostępny jest w nowoczesnych przeglądarkach (IE9 +) z wyjątkiem Safari:

function onLoad() { 
    var now = new Date().getTime(); 
    var page_load_time = now - performance.timing.navigationStart; 
    console.log("User-perceived page loading time: " + page_load_time); 
} 
Powiązane problemy