يوفر هذا المشروع وظيفة حفظ لتحسين الأداء في مشاريع JavaScript أو TypeScript عن طريق التخزين المؤقت لنتائج استدعاءات الوظائف باهظة الثمن. من خلال الحفظ، ستعيد المكالمات المتكررة بنفس الوسائط النتيجة المخزنة مؤقتًا، مما يؤدي إلى تسريع التنفيذ.
تعمل هذه الوحدة مثل خطاف useMemo الخاص بـ React ولكنها ليست مطلوبة للتفاعل. يمكنك استخدام أي إطار عمل أو مشاريع جافا سكريبت خالصة
حزمة Npm
جيثب
في العملية التالية، عندما يتم استدعاء أسلوب concatPhoneNumber مرة أخرى بنفس المعلمات، لا يتم تنفيذ الوظيفة مرة أخرى، فهي تجلب النتيجة من ذاكرة التخزين المؤقت.
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
إذا كنت تريد تشغيل الطريقة مرة أخرى بنفس المعلمة وفقًا لبعض التبعيات، فيمكنك تمرير المعلمة deps على النحو التالي.
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
ينتج الأداء عن دالة معقدة تميز الأعداد الأولية. اختبار الأداء
قضية | آنسة |
---|---|
وقت التنفيذ الأول (بدون تخزين مؤقت) | > 52.08 مللي ثانية |
وقت التنفيذ الثاني (التخزين المؤقت) | |
والتنفيذ اللاحق (التخزين المؤقت) |
تم كتابة الاختبارات لجميع الحالات ولجميع أنواع المعلمات. الاختبارات
ملف | % ستمتس | ٪ فرع | % الوظائف | % الخطوط | أرقام الأسطر المكشوفة |
---|---|---|---|---|---|
جميع الملفات | 100 | 100 | 100 | 100 | 0 |
ليب | 100 | 100 | 100 | 100 | 0 |
index.ts | 100 | 100 | 100 | 100 | 0 |
ليب/متجر | 100 | 100 | 100 | 100 | 0 |
CacheStore.ts | 100 | 100 | 100 | 100 | 0 |
DepsStore.ts | 100 | 100 | 100 | 100 | 0 |
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3