2009-08-05 9 views

Odpowiedz

11

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.

+4

+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? ^^ –

+0

Myślę, że to był donald knuth – Breton

+2

Jest to faktycznie czynnik, gdy przechodzisz przez 130MB obiektów Float32Array. –

1

Dla prędkości nie ma znaczącej różnicy.

Dla stylu Math.max jest znacznie bardziej czytelny i dlatego jest najlepszą opcją.

0

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.

3

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.

6

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.

+0

Dziękuję. Za pomocą testu otrzymałem następujące wyniki: 'function' -> 7% wolniej,' Math.min' -> 1% wolniej, 'if' -> najszybciej. – Luke

Powiązane problemy