ما هي طرق التخزين المؤقت المتاحة، بخلاف الملف أو قاعدة البيانات؟

StackOverflow https://stackoverflow.com/questions/4062

  •  08-06-2019
  •  | 
  •  

سؤال

أعرف حاليًا طريقتين فقط لتخزين البيانات مؤقتًا (أستخدم PHP ولكني أفترض أن نفس الشيء سينطبق على معظم اللغات).

  1. احفظ ذاكرة التخزين المؤقت في ملف
  2. احفظ ذاكرة التخزين المؤقت في حقل قاعدة بيانات كبير

هل هناك أي طرق أخرى (وربما أفضل) للتخزين المؤقت أم أن الأمر بهذه البساطة حقًا؟

هل كانت مفيدة؟

المحلول

ربما تريد توضيح ما تريد تخزينه مؤقتًا بشكل أكثر دقة.لديك كل هذه الفرص للتخزين المؤقت:

  • الوصول إلى قاعدة البيانات حيث تقوم بتخزين البيانات مؤقتًا أولاً لضبط نظام RDBMS الخاص بك بشكل صحيح، ثم استخدام طبقة لتفويض القرار لاكتشاف استعلامات متعددة لنفس البيانات (مع أدوبي على سبيل المثال.)
  • استخراج الحسابات من الحلقات في الكود لذلك لا تحسب نفس القيمة عدة مرات. إليك طريقتك الثالثة:تخزين النتائج في الجلسة للمستخدم.
  • الترجمة المسبقة لكود PHP مع امتداد مثل ذاكرة التخزين المؤقت لـ APC.بهذه الطريقة لن تضطر إلى تجميع كود PHP نفسه لكل طلب.
  • الصفحة المرسلة للمستخدم التأكد من أنك تقوم بتعيين علامات META الصحيحة (افعل شيئًا جيدًا للعالم ولا تستخدم ETL على الأقل للضرورة المطلقة)؛أو ربما جعل الصفحات الديناميكية ثابتة تمامًا (مع وجود عملية مجمعة تنشئ صفحات بتنسيق .html)؛أو باستخدام ذاكرة التخزين المؤقت للوكيل مثل حبار.
  • الجلب المسبق وبهذا أشير إلى كل تلك الفرص المتاحة لك لتحسين تجربة المستخدم فقط من خلال القيام بالأشياء بينما لا ينظر المستخدم في طريقك.على سبيل المثال، التحميل المسبق لعلامات IMG في ملف HTML، وضبط نظام RDBMS لإجراء عملية الضبط المسبق، والحوسبة المسبقة للنتائج التي تخزن الحسابات المعقدة في قاعدة البيانات، وما إلى ذلك.

من تجربتي، أراهنك أنه يمكن تحسين الكود الخاص بك كثيرًا قبل أن نبدأ في الحديث عن التخزين المؤقت للأشياء.فكر، على سبيل المثال، في مدى جودة تنظيم التنقل في موقعك ومدى تحكمك في تجربة المستخدم.ثم تحقق من الكود الخاص بك باستخدام أداة مثل XDebug.

تحقق أيضًا من مدى جودة إجراء استعلامات SQL الخاصة بك ومدى جودة فهرسة جداولك.ثم تحقق من الكود الخاص بك مرة أخرى للبحث عن فرص لتطبيق القاعدة "اقرأ عدة مرات ولكن اكتب مرة واحدة فقط"

استخدم أداة بسيطة مثل YSlow للتلميح إلى أشياء بسيطة أخرى لتحسينها.تحقق من الكود الخاص بك مرة أخرى بحثًا عن فرص لوضع المنطق في المتصفح (عبر JavaScript)

نصائح أخرى

يمكنك أيضًا تخزين ذاكرة التخزين المؤقت في الذاكرة وهو أكثر كفاءة.يحاول com.memcached.

Seconding memcached، يقوم بالأشياء البسيطة بشكل جيد ويمكنه التوزيع وكل موسيقى الجاز إذا كنت في حاجة إليها أيضًا

إذا كنت تستخدم Apache، فيمكنك استخدام mod_rewrite للتخزين المؤقت لصفحات الويب الخاصة بك بشكل ثابت.لنفترض أنك تستخدم PHP، وأن لديك طلبًا لـ "/somepage.php".في ملف .htaccess الخاص بك، قمت بوضع ما يلي:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^$ # let's not cache urls with queries
RewriteCond %{REQUEST_METHOD} ^GET$ # or POST/PUT/DELETE requests
RewriteCond static_cache/%{REQUEST_URI} -s # Check that this file exists and is > 0 bytes
RewriteRule (^.*$) static_cache$1 [L] # If all the conditions are met, we rewrite this request to hit the static cache instead

إذا أصبحت ذاكرة التخزين المؤقت فارغة، فسيتم التعامل مع الطلب بواسطة برنامج php النصي الخاص بك كالمعتاد، لذا أصبح الأمر الآن مجرد جعل برنامج php الخاص بك يخزن HTML الناتج في ذاكرة التخزين المؤقت.إن أبسط طريقة للقيام بذلك هي استخدام قاعدة htaccess أخرى لإلحاق ملفين من ملفات php مسبقًا بجميع طلبات php الخاصة بك (قد تكون هذه فكرة جيدة أو لا تكون، اعتمادًا على التطبيق الذي تستخدمه):

php_value auto_prepend_file "pre_cache.php"
php_value auto_append_file "post_cache.php"

ثم ستفعل شيئًا كهذا:

pre_cache.php:

ob_start();

post_cache.php:

$result = ob_get_flush();
if(!$_SERVER['QUERY_STRING']) { # Again, we're not caching query string requests
  file_put_contents("static_cache/" + __FILE__, $result);
}

مع بعض التعبيرات العادية الإضافية في ملف .htaccess، ربما يمكننا البدء في التخزين المؤقت لطلبات سلسلة الاستعلام أيضًا، لكنني سأترك ذلك كتمرين للقارئ :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top