Cykle procesora, zużycie pamięci, czas wykonania itp.?
Dodano: Czy istnieje sposób ilościowego testowania wydajności w JavaScript poza samym postrzeganiem szybkości działania kodu?
javascript
performance
Danmine
źródło
źródło
Odpowiedzi:
Profile są zdecydowanie dobrym sposobem na uzyskanie liczb, ale z mojego doświadczenia wynika, że postrzegana wydajność jest najważniejsza dla użytkownika / klienta. Na przykład mieliśmy projekt z akordeonem Ext, który rozwinął się, aby pokazać niektóre dane, a następnie kilka zagnieżdżonych siatek Ext. Wszystko renderowało się dość szybko, żadna pojedyncza operacja nie zajęła dużo czasu, pojawiło się tylko wiele informacji naraz, więc użytkownikowi wydawało się to powolne.
„Naprawiliśmy” to, nie przez przejście do szybszego komponentu lub optymalizację jakiejś metody, ale najpierw przez renderowanie danych, a następnie renderowanie siatek za pomocą setTimeout. Tak więc informacje pojawiły się najpierw, a następnie siatki pojawiły się na miejscu później. Ogólnie rzecz biorąc, wykonanie tego w ten sposób zajęło nieco więcej czasu, ale dla użytkownika postrzegana wydajność uległa poprawie.
Te dni, profiler Chrome i inne narzędzia są powszechnie dostępne i łatwe w obsłudze, jak to
console.time()
,console.profile()
iperformance.now()
. Chrome zapewnia także widok osi czasu, który pokazuje, co zabija liczbę klatek na sekundę, gdzie może czekać użytkownik itp.Znalezienie dokumentacji dla wszystkich tych narzędzi jest naprawdę łatwe, nie potrzebujesz na to odpowiedzi SO. 7 lat później nadal powtarzam radę z mojej pierwotnej odpowiedzi i zwracam uwagę, że możesz mieć powolne uruchamianie kodu w nieskończoność, gdy użytkownik go nie zauważy, i dość szybki kod działający tam, gdzie to robią, i będą narzekać na dość szybki kod nie jest wystarczająco szybki. Lub że twoje zapytanie do API serwera trwało 220ms. Lub coś takiego. Chodzi o to, że jeśli wyjmiesz profilera i zaczniesz szukać pracy, znajdziesz ją, ale może nie być pracą, której potrzebują Twoi użytkownicy.
źródło
Zgadzam się, że postrzegana wydajność jest naprawdę najważniejsza. Ale czasami chcę tylko dowiedzieć się, która metoda zrobienia czegoś jest szybsza. Czasami różnica jest OGROMNA i warto ją poznać.
Możesz po prostu użyć timerów javascript. Ale zazwyczaj uzyskuję znacznie bardziej spójne wyniki przy użyciu natywnego Chrome (teraz także w Firefox i Safari) metod devTool
console.time()
iconsole.timeEnd()
Przykład tego, jak go używam:
Aktualizacja (4.04.2016):
Chrome Canary niedawno dodał Profilowanie na poziomie linii w zakładce źródeł narzędzi deweloperskich, która pozwala dokładnie zobaczyć, jak długo trwała każda linia!
źródło
Zawsze możemy zmierzyć czas zajęty przez dowolną funkcję według prostego obiektu daty .
źródło
performance.now()
Wypróbuj jsPerf . Jest to internetowe narzędzie do wykonywania skryptów javascript do porównywania i porównywania fragmentów kodu. Używam tego cały czas.
źródło
%timeit
wipython
powłoce REPL dla kodu Pythona.Większość przeglądarek implementuje teraz timing w wysokiej rozdzielczości
performance.now()
. Jest lepszynew Date()
od testowania wydajności, ponieważ działa niezależnie od zegara systemowego.Stosowanie
Bibliografia
źródło
performance.now()
.JSLitmus to lekkie narzędzie do tworzenia testów porównawczych JavaScript w trybie ad-hoc
Niech zbadać wydajność między
function expression
ifunction constructor
:To, co zrobiłem powyżej, to utworzenie
function expression
ifunction constructor
wykonanie tej samej operacji. Wynik jest następujący:Wynik wydajności FireFox
Wynik wydajności IE
źródło
Niektóre osoby sugerują określone wtyczki i / lub przeglądarki. Nie zrobiłbym tego, ponieważ są naprawdę przydatne tylko dla tej jednej platformy; uruchomienie testowe w przeglądarce Firefox nie przełoży się dokładnie na IE7. Biorąc pod uwagę, że 99,999999% witryn odwiedza je więcej niż jedna przeglądarka, musisz sprawdzić wydajność na wszystkich popularnych platformach.
Moją sugestią byłoby pozostawienie tego w JS. Utwórz stronę testową ze wszystkimi testami JS i wykonuj je w określonym czasie. Możesz nawet poprosić, aby AJAX opublikował wyniki z powrotem do Ciebie, aby zachować pełną automatyzację.
Następnie spłucz i powtórz na różnych platformach.
źródło
Mam małe narzędzie, w którym mogę szybko uruchomić małe przypadki testowe w przeglądarce i natychmiast uzyskać wyniki:
Test prędkości JavaScript
Możesz grać z kodem i dowiedzieć się, która technika jest lepsza w testowanej przeglądarce.
źródło
Myślę, że testowanie wydajności (czasu) JavaScript jest wystarczające. Znalazłem tutaj bardzo przydatny artykuł na temat testowania wydajności JavaScript .
źródło
Oto prosta funkcja, która wyświetla czas wykonania przekazanej funkcji:
źródło
Możesz użyć tego: http://getfirebug.com/js.html . Posiada profiler do JavaScript.
źródło
Szybka odpowiedź
W jQuery (a dokładniej w Sizzle) używamy tego (główny kontroler i open speed / index.html w przeglądarce), który z kolei używa benchmark.js . Służy do testowania wydajności biblioteki.
Długa odpowiedź
Jeśli czytelnik nie zna różnicy między testem porównawczym, obciążeniem a profilerami, najpierw przeczytaj podstawy do testowania wydajności w sekcji „readme 1st” spec.org . Jest to przeznaczone do testowania systemu, ale zrozumienie tych podstaw pomoże również w testowaniu JS perf. Niektóre najważniejsze:
Testy wydajności JS
Najlepiej byłoby, gdyby najlepszym testem wydajności byłaby własna aplikacja z własnym przełączaniem obciążenia, co trzeba przetestować: różne biblioteki, maszyny itp.
Jeśli nie jest to możliwe (i zwykle nie jest). Pierwszy ważny krok: zdefiniuj obciążenie pracą. Powinien odzwierciedlać obciążenie aplikacji. W tej rozmowie Wiaczesław Egorow mówi o gównianych obciążeniach, których należy unikać.
Następnie możesz użyć narzędzi takich jak benchmark.js, aby pomóc w zbieraniu danych, zwykle prędkości lub przepustowości. W Sizzle interesuje nas porównanie, w jaki sposób poprawki lub zmiany wpływają na wydajność systemową biblioteki.
Jeśli coś działa naprawdę źle, następnym krokiem jest poszukiwanie wąskich gardeł.
Jak znaleźć wąskie gardła? Profile
Jaki jest najlepszy sposób na profilowanie wykonywania javascript?
źródło
Czas realizacji wydaje mi się najlepszym miernikiem.
źródło
Możesz użyć console.profile w Firebug
źródło
Zwykle testuję wydajność javascript, jak długo skrypt działa. jQuery Lover podał dobry link do artykułu do testowania wydajności kodu javascript , ale artykuł pokazuje tylko, jak sprawdzić, jak długo działa kod javascript. Poleciłbym również przeczytanie artykułu zatytułowanego „5 porad dotyczących ulepszania kodu jQuery podczas pracy z dużymi zestawami danych”.
źródło
Oto klasa wielokrotnego użytku dla wydajności czasu. Przykład jest zawarty w kodzie:
źródło
UX Profiler podchodzi do tego problemu z perspektywy użytkownika. Grupuje wszystkie zdarzenia przeglądarki, aktywność sieciową itp. Spowodowane przez niektóre działania użytkownika (kliknięcie) i bierze pod uwagę wszystkie aspekty, takie jak opóźnienie, przekroczenia czasu itp.
źródło
Szukałem czegoś podobnego, ale znalazłem to.
https://jsbench.me/
Umożliwia porównanie między stronami, a następnie można również udostępniać wyniki.
źródło
Złotą zasadą jest, aby w żadnym wypadku NIE blokować przeglądarki użytkownika. Potem zwykle patrzę na czas wykonania, a następnie użycie pamięci (chyba że robisz coś szalonego, w którym to przypadku może to mieć wyższy priorytet).
źródło
Testy wydajności stały się ostatnio modnym hasłem, ale nie oznacza to, że testowanie wydajności nie jest ważnym procesem w kontroli jakości ani nawet po wysłaniu produktu. I podczas opracowywania aplikacji używam wielu różnych narzędzi, niektóre z nich wspomniane powyżej, takie jak chromowany Profiler , zwykle patrzę na SaaS lub coś innego, co mogę uruchomić i zapominam o tym, dopóki nie otrzymam tego powiadomienia, że coś poszło nie tak .
Istnieje wiele niesamowitych narzędzi, które pomogą ci kontrolować wydajność bez konieczności przeskakiwania przez obręcze tylko w celu skonfigurowania podstawowych alertów. Oto kilka, które moim zdaniem warto sprawdzić.
Aby spróbować namalować wyraźniejszy obraz, oto mały samouczek dotyczący konfigurowania monitorowania dla aplikacji reagującej.
źródło
Jest to dobry sposób na zebranie informacji o wydajności dla konkretnej operacji.
źródło