0Pricing
PHP Academy · درس

OPcache: التخزين المؤقت للرمز الثانوي

مكّنوا OPcache واضبطوه لإزالة تكلفة إعادة تجميع البرامج النصية

OPcache: التخزين المؤقت للرمز الثانوي درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.

كيف يعمل PHP عادةً

من دون OPcache، يتسبب كل طلب في أن ينفّذ PHP الخطوات التالية: قراءة ملف ‎.php‎ من القرص، وتحليله إلى AST، وتجميعه إلى رموز تشغيل (bytecode)، ثم تنفيذ رموز التشغيل.

ما الذي يفعله OPcache

يخزّن OPcache رموز التشغيل المجمّعة في الذاكرة المشتركة. وفي الطلبات اللاحقة، يتجاوز PHP خطوتَي التحليل والتجميع وينتقل مباشرةً إلى التنفيذ.

تأثير الأداء

يوفّر OPcache عادةً تحسنًا في معدل المعالجة بمقدار 2 إلى 5 أضعاف لتطبيقات PHP، من دون الحاجة إلى إجراء أي تغييرات على الشيفرة.

تمكين OPcache

يأتي OPcache مضمّنًا مع PHP 5.5+ ويكون مفعّلًا افتراضيًا في كثير من التوزيعات. تحقّق من ذلك باستخدام php -m | grep -i opcache.

# php.ini:
[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=0

إعدادات OPcache الأساسية

اضبط هذه الإعدادات لبيئة الإنتاج:

# php.ini:
opcache.memory_consumption=256      ; MB of shared memory
opcache.interned_strings_buffer=16  ; MB for interned strings
opcache.max_accelerated_files=20000 ; max scripts to cache
opcache.validate_timestamps=0       ; disable for production!
opcache.revalidate_freq=0           ; how often to check timestamps

validate_timestamps=0

في بيئة الإنتاج، عيّن validate_timestamps=0 لتعطيل فحوصات نظام الملفات عند كل طلب؛ إذ سيستخدم PHP رموز التشغيل المخزنة مؤقتًا دائمًا. وبعد النشر، أعد ضبط التخزين المؤقت.

إعادة ضبط OPcache

امسح التخزين المؤقت بعد نشر شيفرة جديدة.

<?php
opcache_reset(); // from a PHP script
// Or restart PHP-FPM:
$ kill -USR2 $(cat /run/php-fpm.pid)

opcache_get_status()

استعلم عن إحصاءات OPcache أثناء التشغيل لمراقبة معدل الإصابة واستخدام الذاكرة.

<?php
$status = opcache_get_status();
echo "Hit rate: ".$status["opcache_statistics"]["opcache_hit_rate"]."%";

التحميل المسبق (PHP 7.4+)

يحمّل التحميل المسبق في OPcache ملفات إطار العمل إلى الذاكرة المشتركة عند بدء الخادم، مما يلغي حتى وقت التجميع الإضافي للطلب الأول للفئات الأساسية.

# php.ini:
opcache.preload=/srv/app/preload.php
opcache.preload_user=www-data

التجميع باستخدام JIT (PHP 8.0+)

قدّم PHP 8 التجميع باستخدام JIT (في الوقت المناسب) فوق OPcache، إذ يحوّل رموز التشغيل إلى شيفرة آلة أصلية. وتظهر أكبر فائدة في المهام كثيفة استخدام وحدة المعالجة المركزية، بينما تكون الفائدة محدودة في تطبيقات الويب المعتادة التي تعتمد على عمليات الإدخال والإخراج.

# php.ini:
opcache.jit_buffer_size=100M
opcache.jit=1255

الفئات غير القابلة للتغيير

يمكن لـ OPcache مشاركة السلاسل الداخلية وتعريفات الفئات غير القابلة للتغيير بين عمليات العمال، مما يقلل استهلاك الذاكرة لكل عملية.

ملخّص

مكّن OPcache في بيئة الإنتاج باستخدام validate_timestamps=0. وامسح التخزين المؤقت بعد عمليات النشر باستخدام opcache_reset() أو أعد تشغيل PHP-FPM. راقب معدل الإصابة باستخدام opcache_get_status().

تحقق سريع

ما إعداد php.ini الذي ينبغي أن تكون قيمته 0 في بيئة الإنتاج لتحقيق أقصى أداء لـ OPcache؟

الأسئلة الشائعة

هل درس «OPcache: التخزين المؤقت للرمز الثانوي» مجاني؟

نعم — نص درس «OPcache: التخزين المؤقت للرمز الثانوي» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.

ماذا ستتعلم في «OPcache: التخزين المؤقت للرمز الثانوي»؟

مكّنوا OPcache واضبطوه لإزالة تكلفة إعادة تجميع البرامج النصية تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟

لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «OPcache: التخزين المؤقت للرمز الثانوي»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟

نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تحليل أداء PHP باستخدام Xdebug
  2. OPcache: التخزين المؤقت للرمز الثانوي
  3. تحسين استعلامات قاعدة البيانات
  4. إدارة الذاكرة ونصائح الأداء
← العودة إلى PHP Academy