w JavaScript, lepiej jest to zrobić:prędkość i styl Math.max vs trójskładnikowych operatora w JavaScript
var h = th > ch ? th : ch;
lub
var h = Math.max(th, ch);
?
w JavaScript, lepiej jest to zrobić:prędkość i styl Math.max vs trójskładnikowych operatora w JavaScript
var h = th > ch ? th : ch;
lub
var h = Math.max(th, ch);
?
Drugi wydaje mi się bardziej przejrzysty, ponieważ pokazuje raczej zamiar niż wdrożenie.
Wątpię w bardzo wiele sytuacji, w których jakakolwiek różnica w wydajności spowodowałaby jakąś zauważalną różnicę i to prawdopodobnie zależy od wdrożenia.
+1 w tym: z Math.max, ludzie czytający twój kod ** immeditaly ** rozumieją, co próbujesz zrobić; z?:, będą musieli pomyśleć co najmniej przez jedną lub dwie sekundy ... Jeśli masz 300 linii kodu, to już kilka minut straciłeś myśli bez prawdopodobnie dobrego powodu (z wyjątkiem niektórych naprawdę krytycznych części twojego zastosowanie, tego typu mikro-optymalizacja jest prawdopodobnie bezcelowa) - kto powiedział coś o przedwczesnej optymalizacji i źródle wszelkiego zła? ^^ –
Myślę, że to był donald knuth – Breton
Jest to faktycznie czynnik, gdy przechodzisz przez 130MB obiektów Float32Array. –
Dla prędkości nie ma znaczącej różnicy.
Dla stylu Math.max jest znacznie bardziej czytelny i dlatego jest najlepszą opcją.
Math.max() działa dokładnie tak samo, jak napisano jako pierwszy. Używa operatora potrójnego do zwrócenia max. Więc jeśli chcesz zaoszczędzić trochę nanosekundy, możesz użyć pierwszej metody, aby uniknąć wezwania do funkcji. Jednak, IMHO, ta różnica naprawdę nie wpływa na wydajność, chyba że masz mnóstwo Math.max do zrobienia.
W trybie mono JIT może wstawiać metody Math.Min i Math.Max i zapewniać lepszą wydajność w porównaniu do niestandardowych, wbudowanych implementacji. Będzie używać specjalnych instrukcji, jeśli są dostępne dla sprzętu. Więc pewnego dnia, jeśli w JavaScript jest jakiś JIT (Google V8?) Prawdopodobnie będzie to pewna korzyść z wydajności dla klasy Math użytkownika.
Zgodnie z tym testem jsperf, instrukcja if jest najbardziej wydajna.
http://jsperf.com/math-min-vs-if-condition-vs/2
Jednak zgadzam się, że Math.max/Math.min jest bardziej czytelny.
Dziękuję. Za pomocą testu otrzymałem następujące wyniki: 'function' -> 7% wolniej,' Math.min' -> 1% wolniej, 'if' -> najszybciej. – Luke
Oto test JSPerf który pozwala przetestować go w przeglądarce (ów):
http://jsperf.com/math-min-vs-if-condition-vs/13
moich testów na kilku przeglądarkach wskazują, że Math.min, trójoperandowy operator i if wykonać podobnie.
Jeśli nic więcej, w przypadku prostych pytań dotyczących prędkości zawsze masz możliwość przetestowania go samodzielnie w swoich rękach. – Amber