التخزين المؤقت في PHP: كيفية تسريع الموقع وتقليل الحمل على الخادم

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

التخزين المؤقت للبيانات في PHP: الإسعافات الأولية لخادمك

\n\n

تخيل: تزور موقعك المفضل، ويستغرق التحميل وقتًا طويلاً. هل هذا مألوف؟ غالبًا لا يكون السبب هو استضافة ضعيفة أو تصميم "ثقيل"، بل أن الخادم يقوم بنفس العمل في كل مرة. فهو يتصل بقاعدة البيانات من جديد، ويعيد تجميع كود HTML، ويعيد حساب الإحصائيات.

\n\n

حل هذه المشكلة هو التخزين المؤقت في PHP. إنه مثل طهي وجبة للأسبوع مقدمًا: تستهلك الوقت مرة واحدة، ثم تقوم فقط بتسخينها. في عالم تطوير الويب، يُسمى هذا "التخزين المؤقت للبيانات". يمكن لـ PHP cache المُهيأ بشكل صحيح أن يُسرّع الموقع بمقدار 10–50 مرة ويقلل الحمل على الخادم إلى الحد الأدنى.

\n\n

في هذه المقالة، سنستعرض أنواع التخزين المؤقت الموجودة، وكيفية تنفيذها باستخدام PHP، ومتى تختار الأداة المناسبة. هيا بنا!

\n\n

لماذا التخزين المؤقت أمر لا غنى عنه لأي مشروع PHP؟

\n\n

أي موقع ديناميكي يعمل بـ PHP يتبع المخطط: طلب → معالجة → استجابة. أغلى عملية هي العمل مع قاعدة البيانات (MySQL, PostgreSQL) وتوليد صفحات HTML المعقدة. إذا كان لديك 1000 زائر في الساعة، وكل طلب يقوم بـ 10 استعلامات SQL، فسيُصاب الخادم بالتوقف بسرعة.

\n\n

يحل التخزين المؤقت في PHP ثلاث مشاكل رئيسية:

\n\n
    \n
  • السرعة — يتم إرجاع البيانات من الذاكرة أو من ملف في أجزاء من الثانية؛
  • \n
  • توفير الموارد — يرتاح المعالج وقاعدة البيانات؛
  • \n
  • قابلية التوسع — يتحمل الموقع زيادة حركة المرور دون ترقية الأجهزة.
  • \n
\n\n

ولا يهم إذا كنت تكتب بلغة PHP الخالصة أو تستخدم إطار عمل (Laravel, Symfony, Yii2) — فمبادئ التخزين المؤقت للبيانات متشابهة في كل مكان.

\n\n

الأنواع الرئيسية للتخزين المؤقت في PHP

\n\n

قبل كتابة الكود، دعنا نفهم ما يمكننا تخزينه مؤقتًا بالضبط. هناك ثلاثة مستويات رئيسية:

\n\n

1. تخزين الصفحات مؤقتًا (Page Cache)

\n

أبسط وأكثر أنواع التخزين فعالية. يتم حفظ كود HTML الجاهز للصفحة في ملف أو في الذاكرة. عند الطلب المتكرر، يُرجع الخادم HTML الجاهز، متجاوزًا مفسر PHP وقاعدة البيانات. مثالي للصفحات الثابتة (الصفحة الرئيسية، المدونة، الكتالوج).

\n\n

2. تخزين البيانات والكائنات مؤقتًا (Data/Object Cache)

\n

يتم حفظ نتائج العمليات الحسابية الثقيلة، واستعلامات قاعدة البيانات، واستجابات API. على سبيل المثال، قائمة أحدث المقالات، أسعار العملات، تقييمات المستخدمين. هذا ما يُسمى عادةً التخزين المؤقت للبيانات.

\n\n

3. تخزين الكود مؤقتًا (Opcode Cache)

\n

يتم تجميع نصوص PHP إلى كود بايت. أدوات مثل OPcache تحفظ هذا الكود البايت في الذاكرة، لتجنب تجميع نفس النص في كل طلب. يتم تفعيله على مستوى الخادم ولا يتطلب كتابة كود.

\n\n

في هذه المقالة، سنركز على النوعين الأولين، حيث يمكن التحكم بهما من خلال الكود في PHP.

\n\n

تنفيذ التخزين المؤقت في PHP: من البسيط إلى المعقد

\n\n

التخزين المؤقت للملفات يدويًا

\n

أبسط طريقة للتخزين المؤقت في PHP هي حفظ البيانات في ملفات. هذا لا يتطلب تثبيت إضافات إضافية ويعمل على أي استضافة.

\n\n

إليك مثال لفئة بسيطة للتخزين المؤقت للملفات:

\n\n
<?php\nclass FileCache\n{\n    private $cacheDir;\n\n    public function __construct($cacheDir = '/tmp/php-cache/')\n    {\n        $this->cacheDir = $cacheDir;\n        if (!is_dir($this->cacheDir)) {\n            mkdir($this->cacheDir, 0755, true);\n        }\n    }\n\n    public function set($key, $data, $ttl = 3600)\n    {\n        $file = $this->getFilePath($key);\n        $content = [\n            'expires' => time() + $ttl,\n            'data' => $data\n        ];\n        file_put_contents($file, serialize($content));\n    }\n\n    public function get($key)\n    {\n        $file = $this->getFilePath($key);\n        if (!file_exists($file)) {\n            return null;\n        }\n        $content = unserialize(file_get_contents($file));\n        if ($content['expires'] < time(                

المدونات

توصيات الكتب