Niedawno odziedziczyłem bibliotekę, istnieje metoda aktualizacji, która istnieje w klasie. Oto przykład.Optymalizacja Micro, czy jest ona zoptymalizowana w każdym razie przez nowoczesne przeglądarki?
onPointerMove(pointer, x, y, isPressed){
var floor = Math.floor;
var cx = this.currentX;
var cy = this.currentY;
var tm = this.toolManager;
}
Ten rodzaj kodu występuje głównie w materiałach o krytycznym znaczeniu dla wydajności. Większość pozostałych projektów nie została napisana w ten sposób.
- Podłoga jest używana dwukrotnie. Z pewnością buforowanie go w zmiennej lokalnej po prostu wymusza jakiś "tymczasowy" przydział pamięci za każdym razem, gdy jest uruchamiany? Jak to jest szybsze niż po prostu szukanie funkcji?
- This.currentX odwołuje się wiele razy podczas całego ciała funkcji, ale buforuje to naprawdę szybciej? Pomyślałbym, że
this.currentX
nie powoduje problemów z wyszukiwaniem, ale może się mylę. Ponieważ dzieje się to z pozostałym kodem w przykładzie, wszystkie te właściwości są buforowane.
Czy to nie ma większego znaczenia w nowoczesnych silnikach JavaScript? Zakładam, że optymalizacje takie jak ta, jeśli są one szybsze .... Będą brane jako dane do optymalizacji w każdym razie wewnątrz V8. Na przykład, jeśli Math.round został wywołany 20 razy w funkcji, to czy silnik i tak by go zapisał?
Spodziewałbym się również takich rzeczy jak buforowanie o wiele, zanim "dla niego" jest również kolejnym przykładem tego, co do którego zakładam, że zoptymalizowane silniki do wykonania w każdym razie podczas interpretacji kodu (ponownie, tylko JEŚLI to nawet robi różnicę).
Wszystko, co naprawdę chcę wiedzieć, to ... od tego dnia, czy powinienem robić te mikrooptymalizacje (dla przeglądarek zimozielonych) i optymalizować mój kod, czy też trochę się przesunąć od 2010 roku (kiedy czytam Wydajność JavaScript)
Dzięki!
Nie optymalizuj (szczególnie: poświęć czytelność/łatwość konserwacji), chyba że masz problem i użyłeś profilera, aby znaleźć wąskie gardło/problem. Przy okazji: możesz odpowiedzieć na większość, jeśli nie wszystkie, pytań w twoim poście, jeśli po prostu użyłeś profilera (lub innego sposobu pomiaru). Po prostu zbuduj testówkę i profiluj/mierz. Proste. Chciałbym wskazać [jsperf.com] (http://jsperf.com/), ale obecnie nie działa. – RobIII
Dzięki za wskazanie profilowania RobIII! Dodałem go do mojej listy rzeczy do zrobienia, która lepiej ją przetwarza. – Clark