Projek ini menyediakan fungsi memoize untuk meningkatkan prestasi dalam projek JavaScript atau TypeScript dengan menyimpan cache hasil panggilan fungsi yang mahal. Dengan menghafal, panggilan berulang dengan hujah yang sama akan mengembalikan hasil cache, mempercepatkan pelaksanaan.
Modul ini berfungsi seperti cangkuk useMemo react tetapi TIDAK diperlukan bertindak balas. Anda boleh menggunakan mana-mana rangka kerja atau projek javascript tulen
Pakej Npm
Github
Dalam proses berikut, apabila kaedah concatPhoneNumber dipanggil semula dengan parameter yang sama, fungsi itu tidak dilaksanakan lagi, ia mengambil hasil daripada cache.
import memofy from "memofy"; const concatPhoneNumber = (extension, number) => { // Heavy calculation // return result }; const memoizedConcatPhoneNumber = memofy(concatPhoneNumber, []); memoizedConcatPhoneNumber(90, 555); // Runs concatPhoneNumber when first run memoizedConcatPhoneNumber(90, 555); // get value from cache memoizedConcatPhoneNumber(90, 552); // Runs concatPhoneNumber because params is change
Jika anda mahu kaedah dijalankan semula dengan parameter yang sama mengikut beberapa kebergantungan, anda boleh lulus parameter deps seperti berikut.
import memofy from "memofy"; const taxRatio = 0.5; const product = { title: "Test product", price: 10 }; const calculateTax = () => { // Calculate tax by product price // Heavy calculation return taxRatio * product.price; }; const memoizedConcatPhoneNumber = memofy(calculateTax, [product, taxRatio]); calculatedPrice = calculateTax(); // Runs concatPhoneNumber when first run product.price = 40; let calculatedPrice = calculateTax(); // Runs concatPhoneNumber because product dep changed taxRatio = 0.8; calculatedPrice = calculateTax(); // Runs concatPhoneNumber because taxRatio changed
Hasil prestasi pada fungsi kompleks yang membezakan nombor perdana. Ujian Prestasi
Case | ms |
---|---|
First execute time (no caching) | > 52.08 ms |
Second execute time (caching) | < 0.03 ms |
and subsequent execution (caching) | < 0.03 ms |
Ujian telah ditulis untuk semua kes dan semua jenis parameter. Ujian
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
---|---|---|---|---|---|
All files | 100 | 100 | 100 | 100 | 0 |
lib | 100 | 100 | 100 | 100 | 0 |
index.ts | 100 | 100 | 100 | 100 | 0 |
lib/store | 100 | 100 | 100 | 100 | 0 |
CacheStore.ts | 100 | 100 | 100 | 100 | 0 |
DepsStore.ts | 100 | 100 | 100 | 100 | 0 |
Atas ialah kandungan terperinci Menghalang pelaksanaan semula fungsi javascript besar yang telah diproses sekali dengan parameter yang sama.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!