حقوق الطبع والنشر الإنجليزية للمقدمة مملوكة لرينهولد ويبر، والترجمة الصينية من تأليف يانج يانج (المعروف أيضًا باسم ديفيد كوري). يمكن استخدام النسخة ثنائية اللغة للنشر غير التجاري، ولكن يجب الإشارة إلى مؤلف النسخة الإنجليزية ومعلومات حقوق الطبع والنشر ومؤلف الترجمة الصينية. مستوى الترجمة محدود، يرجى تصحيح لي.
1. إذا كان من الممكن جعل الطريقة ثابتة، قم بإعلانها بشكل ثابت. يمكن زيادة السرعة إلى 4 مرات.
2. الصدى أسرع من الطباعة.
3. استخدم معلمات الصدى المتعددة (الترجمة: تشير إلى استخدام الفواصل بدلاً من النقاط) بدلاً من تسلسل السلسلة.
4. تحديد الحد الأقصى لعدد الحلقات قبل تنفيذ حلقة for، ولا تحسب القيمة القصوى في كل مرة تتكرر فيها.
5. قم بإلغاء تسجيل المتغيرات غير المستخدمة، وخاصة المصفوفات الكبيرة، لتحرير الذاكرة.
6. حاول تجنب استخدام __get، __set، __autoload.
7.require_once() باهظ الثمن.
8. استخدم المسار الكامل عند تضمين الملفات، وسوف يستغرق الأمر وقتًا أقل لحل مسار نظام التشغيل.
9. إذا كنت تريد معرفة الوقت الذي يبدأ فيه تنفيذ البرنامج النصي (تعليق توضيحي: يتلقى الخادم طلب العميل)، فمن الأفضل استخدام $_SERVER['REQUEST_TIME'] بدلاً من استخدام time().
10. تحل الوظائف محل التعبيرات العادية لإكمال نفس الوظيفة.
11. الدالة str_replace أسرع من الدالة preg_replace، ولكن الدالة strtr أكثر كفاءة بأربع مرات من الدالة str_replace.
12. إذا كانت وظيفة استبدال السلسلة تقبل المصفوفات أو الأحرف كمعلمات، ولم يكن طول المعلمة طويلًا جدًا، فيمكنك التفكير في كتابة جزء إضافي من رمز الاستبدال بحيث تكون كل معلمة تم تمريرها عبارة عن حرف، بدلاً من كتابة سطر واحد فقط من التعليمات البرمجية لقبول مجموعة كمعلمات للاستعلامات والاستبدالات.
13. من الأفضل استخدام عبارة فرعية انتقائية (تعليق توضيحي للترجمة: حالة التبديل) بدلاً من استخدام عبارات if و else if المتعددة.
14. يعد استخدام @ لحظر رسائل الخطأ أمرًا غير فعال على الإطلاق.
15. افتح وحدة mod_deflate الخاصة بـ Apache.
16. يجب إغلاق اتصال قاعدة البيانات عند الانتهاء من استخدامها.
17.$row['id'] أكثر كفاءة بـ 7 مرات من $row[id].
18. رسائل الخطأ باهظة الثمن.
19. حاول عدم استخدام الوظائف في حلقات for، على سبيل المثال، for ($x=0; $x < count($array); $x) ستستدعي الدالة count() في كل مرة يتم فيها التكرار.
20. زيادة المتغيرات المحلية في الأساليب هي الأسرع. تقريبًا بنفس سرعة استدعاء المتغيرات المحلية في إحدى الوظائف.
21. إن زيادة المتغير الشامل أبطأ مرتين من زيادة المتغير المحلي.
22. إن زيادة خاصية الكائن (على سبيل المثال: $this->prop++) تكون أبطأ بثلاث مرات من زيادة المتغير المحلي.
23. إن زيادة متغير محلي غير محدد تكون أبطأ بمقدار 9 إلى 10 مرات من زيادة متغير محلي محدد مسبقًا.
24. مجرد تحديد متغير محلي دون استدعائه في الوظيفة سيؤدي أيضًا إلى إبطاء السرعة (بنفس القدر مثل زيادة المتغير المحلي). من المحتمل أن تتحقق PHP لمعرفة ما إذا كان هناك متغير عام.
25. يبدو أن استدعاءات الطريقة مستقلة عن عدد الطرق المحددة في الفصل، حيث أضفت 10 طرق (قبل وبعد اختبار الطريقة) ولم يكن هناك أي تغيير في الأداء.
26. تعمل الطرق في الفئات المشتقة بشكل أسرع من نفس الطرق المحددة في الفئات الأساسية.
27. يستغرق استدعاء دالة فارغة بمعلمة واحدة وقتًا أطول من زيادة المتغيرات المحلية من 7 إلى 8 مرات. يستغرق استدعاء أسلوب مماثل ما يقرب من 15 عملية زيادة متغيرة محلية.
28. استخدم علامات الاقتباس المفردة بدلاً من علامات الاقتباس المزدوجة لإحاطة السلاسل، والتي ستكون أسرع. نظرًا لأن PHP ستبحث عن المتغيرات في سلسلة محاطة بعلامات اقتباس مزدوجة، فلن تقوم علامات الاقتباس المفردة بذلك. بالطبع، لا يمكن القيام بذلك إلا إذا لم تكن بحاجة إلى تضمين المتغيرات في السلسلة.
29. عند إخراج سلاسل متعددة، استخدم الفواصل بدلاً من النقاط لفصل السلاسل، وهو أسرع. ملاحظة: الصدى فقط يمكنه القيام بذلك، إنها "وظيفة" يمكنها أن تأخذ سلاسل متعددة كمعلمات (تعليق توضيحي: يقول دليل PHP أن الصدى عبارة عن بنية لغة، وليست وظيفة حقيقية، لذا فإن الوظيفة محاطة بعلامتي اقتباس مزدوجتين.) .
30. يقوم Apache بتحليل برنامج PHP النصي بمعدل 2 إلى 10 مرات أبطأ من تحليل صفحة HTML ثابتة. حاول استخدام المزيد من صفحات HTML الثابتة ونصوص أقل.
31. ما لم يكن من الممكن تخزين البرنامج النصي مؤقتًا، فسيتم إعادة ترجمته في كل مرة يتم استدعاؤه. عادةً ما يؤدي تقديم آلية التخزين المؤقت لـ PHP إلى تحسين الأداء بنسبة 25% إلى 100% للتخلص من الحمل الزائد للتجميع.
32. حاول تخزين أكبر قدر ممكن من ذاكرة التخزين المؤقت، يمكنك استخدام memcached. Memcached هو نظام تخزين مؤقت لكائنات الذاكرة عالي الأداء يمكن استخدامه لتسريع تطبيقات الويب الديناميكية وتقليل تحميل قاعدة البيانات. يعد التخزين المؤقت لرموز OP مفيدًا حتى لا يلزم إعادة ترجمة البرامج النصية لكل طلب.
33. عند تشغيل سلسلة ما والحاجة إلى التحقق مما إذا كان طولها يلبي متطلبات معينة، فمن الطبيعي أن تستخدم الدالة strlen(). يتم تنفيذ هذه الوظيفة بسرعة كبيرة لأنها لا تقوم بأي حسابات وتقوم فقط بإرجاع الطول المعروف للسلسلة المخزنة في بنية zval (بنية البيانات المضمنة في لغة C المستخدمة لتخزين متغيرات PHP). ومع ذلك، بما أن strlen() هي دالة، فستكون بطيئة إلى حد ما، لأن استدعاء الدالة سيمر بعدة خطوات، مثل الأحرف الصغيرة (التعليق التوضيحي: يشير إلى اسم الدالة الصغيرة، ولا يميز PHP بين أسماء الدالة الكبيرة والصغيرة )، بحث التجزئة، سيتم تنفيذه مع الوظيفة المطلوبة. في بعض الحالات، يمكنك استخدام خدعة isset() لتسريع تنفيذ التعليمات البرمجية الخاصة بك.
(المثال أدناه)
if (strlen($foo) < 5) { echo "Foo قصير جدًا"$$ }
(قارن مع النصائح أدناه)
if (!isset($foo{5})) { echo “Foo is Too short”$$ }
يحدث أن استدعاء isset() أسرع من strlen() لأنه، على عكس الأخير، isset() عبارة عن بنية لغة، مما يعني أن تنفيذه لا يتطلب البحث عن وظيفة وأحرف صغيرة. وهذا يعني أنك في الواقع لا تنفق الكثير من النفقات العامة في كود المستوى الأعلى للتحقق من طول السلسلة.
34. عند إجراء زيادة أو إنقاص للمتغير $i، سيكون $i++ أبطأ من ++$i. هذا الاختلاف خاص بـ PHP ولا ينطبق على اللغات الأخرى، لذا يرجى عدم تعديل كود C أو Java الخاص بك وتتوقع أن يصبح أسرع على الفور، فهو لن يعمل. ++$i أسرع لأنه يتطلب 3 تعليمات فقط (رموز التشغيل)، بينما يتطلب $i++ 4 تعليمات. تقوم الزيادة اللاحقة في الواقع بإنشاء متغير مؤقت يتم زيادته لاحقًا. زيادة البادئة تزيد مباشرة على القيمة الأصلية. هذا هو الأكثر
35. ليس بالضرورة أن يكون كائن التوجه (OOP) غالبًا ما يكون مكلفًا، وكل طريقة واستدعاء كائن يستهلك الكثير من الذاكرة.
36. لا يلزم تنفيذ جميع هياكل البيانات في الفئات، فالمصفوفات مفيدة أيضًا.
37. لا تقسم الطرق كثيرًا، فكر مليًا في الكود الذي تنوي إعادة استخدامه حقًا؟
38. يمكنك دائمًا تقسيم التعليمات البرمجية إلى طرق عندما تحتاج إلى ذلك.
39. حاول استخدام عدد كبير من وظائف PHP المضمنة.
40. إذا كان هناك الكثير من الوظائف التي تستغرق وقتًا طويلاً في التعليمات البرمجية الخاصة بك، فيمكنك التفكير في تنفيذها كامتدادات C.
41. قم بتعريف الكود الخاص بك. سيخبرك المدقق بأجزاء الكود التي تستغرق وقتًا طويلاً. يتضمن مصحح أخطاء Xdebug إجراءات فحص تعمل على تقييم السلامة العامة للتعليمات البرمجية الخاصة بك وتكشف عن الاختناقات في التعليمات البرمجية الخاصة بك.
يمكن استخدام 42.mod_zip كوحدة Apache لضغط بياناتك على الفور وتقليل حجم نقل البيانات بنسبة 80%.
43. نوع من عمليات التحسين، كما يفعل مُحسِّن PHP الخاص بـ Zend. إنها فكرة جيدة أن تضع هذا التحسين في الاعتبار لأنه ليس كل أدوات تحسين الأوامر تقوم بنفس التحسينات، وهناك عدد كبير من موفري خدمة الإنترنت (ISP) والخوادم التي لم يتم تثبيت أدوات تحسين الأوامر عليها. مقال رائع آخر حول تحسين PHP، كتبه جون ليم.