تحسين الأداء والتخزين المؤقت (Caching) في PHP
تحسين الأداء والتخزين المؤقت (Caching) في PHP
تحسين أداء التطبيقات باستخدام تقنيات التخزين المؤقت يساعد على تسريع تحميل الصفحات وتقليل استهلاك الموارد. التخزين المؤقت هو عملية تخزين البيانات التي يتم طلبها بشكل متكرر لتجنب إعادة معالجتها أو استدعائها مرارًا.
التخزين المؤقت للبيانات
استخدام التخزين المؤقت مع الملفات:
يمكنك تخزين البيانات التي يتم معالجتها بشكل مكثف في ملفات واسترجاعها لاحقًا.
<?php $cacheFile = 'cache/data_cache.txt'; $cacheTime = 3600; // مدة الصلاحية بالثواني (ساعة واحدة) // إذا كان الملف موجودًا ولم ينتهي وقته، استرجع البيانات منه if (file_exists($cacheFile) && (time() - filemtime($cacheFile)) < $cacheTime) { $data = file_get_contents($cacheFile); echo "Loaded from cache: " . $data; } else { // معالجة البيانات (مثال: استدعاء قاعدة بيانات) $data = "Dynamic Data " . date('Y-m-d H:i:s'); file_put_contents($cacheFile, $data); echo "Generated fresh: " . $data; } ?>
التخزين المؤقت في ذاكرة الوصول العشوائي (RAM)
استخدام APCu
للتخزين المؤقت:APCu
هي أداة تخزين مؤقت داخل ذاكرة الوصول العشوائي، مما يجعل استرجاع البيانات أسرع.
تثبيت APCu:
sudo apt install php-apcu
تخزين واسترجاع البيانات:
<?php // تخزين البيانات في APCu apcu_store('key', 'Cached Data', 3600); // استرجاع البيانات من APCu $data = apcu_fetch('key'); echo $data; ?>
التخزين المؤقت للصفحات
تخزين الصفحات المولدة ديناميكيًا:
يمكنك تخزين صفحات HTML المولدة لتجنب إعادة إنشائها في كل مرة.
<?php $cacheFile = 'cache/page_cache.html'; $cacheTime = 3600; if (file_exists($cacheFile) && (time() - filemtime($cacheFile)) < $cacheTime) { readfile($cacheFile); exit; } // تخزين الصفحة المولدة ob_start(); echo "<h1>This is a dynamic page</h1>"; file_put_contents($cacheFile, ob_get_contents()); ob_end_flush(); ?>
التخزين المؤقت للبيانات الموزعة
استخدام Redis:
Redis هو نظام تخزين مؤقت سريع يعتمد على الذاكرة.
تثبيت Redis:
sudo apt install redis-server php-redis
تخزين واسترجاع البيانات باستخدام Redis:
<?php $redis = new Redis(); $redis->connect('127.0.0.1', 6379); // تخزين البيانات $redis->set('key', 'Redis Cached Data'); $redis->expire('key', 3600); // مدة الصلاحية // استرجاع البيانات $data = $redis->get('key'); echo $data; ?>
تقنيات أخرى لتحسين الأداء
استخدام التخزين المؤقت للاستعلامات في MySQL:
قم بتفعيل التخزين المؤقت للاستعلامات في MySQL لتحسين الأداء.
تقليل العمليات المكلفة:
تجنب استخدام العمليات المكلفة مثل LIKE '%value%'
، واستبدلها بفهارس لتحسين الأداء.
تقليل استدعاءات قاعدة البيانات:
اجمع البيانات اللازمة في استعلام واحد بدلاً من استدعاءات متعددة.
أفضل الممارسات
- حدد البيانات التي يتم طلبها بشكل متكرر لتخزينها مؤقتًا.
- استخدم ذاكرة RAM عند الحاجة إلى سرعة عالية مثل Redis أو APCu.
- قم بمراقبة الأداء باستخدام أدوات مثل
Xdebug
أوNew Relic
. - قم بتحديث البيانات المخزنة مؤقتًا بناءً على الأحداث المهمة، مثل تغييرات قاعدة البيانات.
التخزين المؤقت هو تقنية فعالة لتحسين أداء التطبيقات، مما يساعد على تقليل زمن الاستجابة وتحسين تجربة المستخدم مع تقليل الضغط على الموارد.