"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > يمنع إعادة تنفيذ وظائف جافا سكريبت الكبيرة التي تمت معالجتها مرة واحدة بنفس المعلمة.

يمنع إعادة تنفيذ وظائف جافا سكريبت الكبيرة التي تمت معالجتها مرة واحدة بنفس المعلمة.

تم النشر بتاريخ 2024-08-29
تصفح:434

Prevents re-execution of large javascript functions that have been processed once with the same parameter.

com.memofy

آلية التخزين المؤقت (المذكرة) للوظائف المنفذة بنفس المعلمات (1.14 كيلوبايت فقط)

يوفر هذا المشروع وظيفة حفظ لتحسين الأداء في مشاريع JavaScript أو TypeScript عن طريق التخزين المؤقت لنتائج استدعاءات الوظائف باهظة الثمن. من خلال الحفظ، ستعيد المكالمات المتكررة بنفس الوسائط النتيجة المخزنة مؤقتًا، مما يؤدي إلى تسريع التنفيذ.

تعمل هذه الوحدة مثل خطاف useMemo الخاص بـ React ولكنها ليست مطلوبة للتفاعل. يمكنك استخدام أي إطار عمل أو مشاريع جافا سكريبت خالصة

حزمة Npm
جيثب

سمات

  • حفظ الوظائف: يقوم بتخزين نتائج استدعاءات الوظائف بنفس الوسيطات.
  • تتبع التبعية: يقوم بتحديث ذاكرة التخزين المؤقت إذا تغيرت التبعيات.
  • المرونة: قابلة للاستخدام في كل من مشاريع JavaScript وTypeScript.
  • الحل الأفضل للعمليات التي تتطلب وحدة المعالجة المركزية أو العمليات الحسابية المعقدة
  • يتم حذف الوظائف المنفصلة من الذاكرة. يتم أيضًا حذف ذاكرات التخزين المؤقت التابعة لهذه الوظيفة.
  • مخزن ذاكرة التخزين المؤقت المستند إلى WeakMap
  • WeakMap يقطع الطرق التي لا يمكنها التواصل مع الروابط المرجعية الضعيفة ويطلق أداة تجميع البيانات المهملة للبدء

حالة الاستخدام

بدون معلمات deps

في العملية التالية، عندما يتم استدعاء أسلوب 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

مع المعلمة Des

إذا كنت تريد تشغيل الطريقة مرة أخرى بنفس المعلمة وفقًا لبعض التبعيات، فيمكنك تمرير المعلمة 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
بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/ahmetilhn/prevents-re-execution-of-large-javascript-functions-that-have-been-processed-once-with-the-same-parameter-1ici؟ 1. في حالة وجود أي انتهاك، يرجى التواصل مع [email protected] لحذفه.
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3