Pozwól nam zrozumieć, w jaki sposób _.memoize
prace, trwa funkcję, która musi być memoized jako pierwszy argument i buforuje wynik powrotu funkcji dla danego parametru. Następnym razem, gdy wywołana funkcja zostanie wywołana z użyciem tego samego argumentu, użyje wyniku z pamięci podręcznej i można uniknąć czasu wykonania tej funkcji. Dlatego bardzo ważne jest, aby skrócić czas obliczeń.
Jak wspomniano, powyższa funkcja fibonaci, którą zapamiętał, działa doskonale, ponieważ argument ma typ pierwotny.
Problem występuje, gdy trzeba zapamiętać funkcję, która akceptuje obiekt. Aby rozwiązać ten problem, _.memoize
akceptuje opcjonalny argument hashFunction
, który będzie używany do mieszania danych wejściowych. W ten sposób można jednoznacznie identyfikować obiekty za pomocą własnych funkcji skrótu.
Domyślna implementacja _.memoize
(przy użyciu domyślnej funkcji skrótu) zwraca pierwszy argument w obecnej postaci - w przypadku JavaScript zwróci [Object object]
.
Tak np.
var fn = function (obj){ some computation here..}
var memoizedFn = _.memoize(fn);
memoizedFn({"id":"1"}) // we will get result, and result is cahced now
memoizedFn({"id":"2"}) // we will get cached result which is wrong
dlaczego domyślny ma funkcję w _.memoize jest funkcją (x) {x} Powrót
problemu można uniknąć przez przepuszczanie funkcji mieszającej
_.memoize(fn, function(input){return JSON.stringify(input)});
Było to prawdziwe pomocą mi kiedy to za pomocą _.memoize do funkcji, która była praca z argumentami tablic.
Mam nadzieję, że pomaga to wielu osobom w ich pracy.
Naprawiono błędy gramatyczne i dodano dodatkowe informacje. –