Czy istnieje pakiet, który pomaga mi testować kod JavaScript? Nie mam na myśli Firebuga i takich narzędzi.
Muszę porównać 2 różne funkcje JavaScript, które wdrożyłem. Bardzo dobrze znam moduł Perl's Benchmark ( Benchmark.pm ) i szukam czegoś podobnego w JavaScript.
Czy nacisk na benchmarking kodu JavaScript przesadził? Czy mogę uciec z synchronizacją tylko jednego uruchomienia funkcji?
javascript
benchmarking
Jonowy mors
źródło
źródło
Odpowiedzi:
Po prostu wykonaj kilka iteracji każdej funkcji. Jedna iteracja prawdopodobnie nie wystarczy, ale (w zależności od tego, jak złożone są twoje funkcje) gdzieś bliżej 100 lub nawet 1000 iteracji powinno załatwić sprawę.Firebug ma również profiler, jeśli chcesz zobaczyć, które części funkcji spowalniają ją.Edycja: dla przyszłych czytelników poniższa odpowiedź zalecająca JSPerf powinna być poprawną odpowiedzią. Usunąłbym mój, ale nie mogę, ponieważ został wybrany przez OP. Benchmarking to znacznie więcej niż tylko wykonywanie wielu iteracji, a JSPerf zajmie się tym za Ciebie.
źródło
jsperf.com to strona docelowa do testowania wydajności JS. Zacznij tam. Jeśli potrzebujesz frameworka do wykonywania własnych testów z wiersza poleceń lub skryptów, użyj Benchmark.js , biblioteki, na której zbudowana jest witryna jsperf.com.
Uwaga: każdy, kto testuje kod JavaScript, powinien zapoznać się z pułapkami związanymi z „mikropunktami” (małe testy ukierunkowane na określoną funkcję lub operację, a nie bardziej złożone testy oparte na wzorcach kodu w świecie rzeczywistym). Takie testy mogą być przydatne, ale są podatne na niedokładność ze względu na sposób działania nowoczesnych środowisk wykonawczych JS. Warto obejrzeć prezentację Wiaczesława Jegorowa na temat wydajności i testów porównawczych, aby poczuć naturę problemu (ów).
Edycja: Usunięto odniesienia do mojej pracy JSLitmus, ponieważ nie jest już ona odpowiednia ani przydatna.
źródło
Dodanie do miksu szybkiego timera, który może się przydać:
Idealnie byłoby, gdyby został umieszczony w klasie i nie używany jako globalny, tak jak zrobiłem to na przykład w celach powyżej. Używanie tego byłoby całkiem proste:
źródło
performance.now()
zamiastDate()
developer.mozilla.org/en-US/docs/Web/API/Performance/nowPo prostu prosty sposób.
źródło
Korzystałem z tej prostej implementacji odpowiedzi @musicfreaks. Nie ma żadnych funkcji, ale jest naprawdę łatwy w użyciu. To
bench(function(){return 1/2;}, 10000, [], this)
obliczy 1/2 10000 razy.źródło
Naprawdę trudno jest napisać przyzwoite testy porównawcze dla różnych przeglądarek. Samo mierzenie wstępnie zdefiniowanej liczby iteracji kodu nie jest w ogóle niezawodne .
Jak już zasugerował @broofa, sprawdź jsPerf . Używa Benchmark.js za kulisami.
źródło
pisząc niestandardowy skrypt porównawczy, pamiętaj, że niektóre przeglądarki stosują manipulacje dom tylko po zakończeniu funkcji, w której są zdefiniowane. Więcej szczegółów tutaj http://www.quirksmode.org/blog/archives/2009/08/when_to_read_ou.html
źródło
Jeśli potrzebujesz czegoś prostego, możesz to zrobić:
Oto przykład kodu
źródło