فيما يتعلق بكفاءة تنفيذ PHP، هناك العديد من المقالات الخاصة على الإنترنت، ومعظمها عبارة عن مناقشات بين معسكرات PHP وJava. ستؤدي جوانب التطبيق المختلفة وبيئات التنفيذ المختلفة إلى اختلاف أكبر في الكفاءة. لا تشير التطبيقات "الكبيرة" المذكورة هنا إلى التنفيذ المحدد لمواقع الويب الكبيرة مثل Google وeBay وYahoo. أتمنى فقط أن يعمل نظامك بشكل أسرع وأكثر سلاسة، وأن يتمكن من استضافة المزيد من المستخدمين عبر الإنترنت يمكن أن يقدم PHP القليل من المساعدة للمبتدئين.
لا تشير التطبيقات "الكبيرة" المذكورة هنا إلى التنفيذ المحدد لمواقع الويب الكبيرة مثل Google وeBay وYahoo. وليس لدي أي نية لإقناع القراء بالتخلي عن مفاهيمهم ومعتقداتهم وأكثر سلاسة ويمكنه استضافة المزيد من المستخدمين عبر الإنترنت، وآمل أن يقدم بعض المساعدة للمبتدئين في PHP.
فيما يتعلق بكفاءة تنفيذ PHP، هناك العديد من المقالات الخاصة على الإنترنت، يبدأ معظمها بالنقاش بين معسكري PHP وJava، وينتهي بتوقعات غير مؤكدة، ومن النادر أن نرى نتيجة واضحة. في الواقع، من الصعب استخلاص كفاءة تنفيذ البرنامج من المقارنة. ستؤدي جوانب التطبيق المختلفة وبيئات التنفيذ المختلفة إلى اختلاف أكبر في الكفاءة. ويجب أيضًا تقييم الكفاءة. يعلم الجميع أن لغة التجميع منخفضة المستوى للغاية ويمكنها كتابة برامج فعالة للغاية، ومع ذلك، نادرًا ما أرى أي شخص يستخدم التجميع لتطوير الويب ولديه القدرة على كتابة البرامج في التجميع يبدو أن المبرمجين الأكفاء يستحقون احترام الجميع، هاها~ لا نحتاج إلى مناقشة الفرق بين PHP والتجميع، طالما أننا نعرف الفرق بين PHP الخاص بنا و PHP الخاص بالأشخاص الآخرين.
بداية، لنكن واضحين بشأن فرضية هذه المقالة: يجب أن يكون هناك خادم واحد أو أكثر يمكنك التحكم فيه بنفسك، وليس مساحة مضيف افتراضية. بعد كل شيء، هناك بالفعل العديد من الأعمال الكلاسيكية والأطر الناضجة للأنظمة ذات الأغراض العامة التي يمكن تشغيلها على مضيفين افتراضيين، وقد تم إرث العديد من مفاهيمها وتطويرها من قبل العديد من مستخدمي PHP الحاليين. المزيد والمزيد من ما يسمى بـ "الأطر" هناك، فهي مثل النجوم في السماء، لا أريد أن أكتب عنها بعد الآن، لأن مستواي ليس جيدًا جدًا، ولا أستطيع كتابة أي شيء. جديد، وحتى لو كتبته، فسوف يضحك الناس. ثانيًا، هناك الكثير من المقالات المكتوبة حول هذا الأمر، وهناك الكثير من الآراء هي السبب الأكبر الذي يتسبب في وفاة العديد من المبرمجين العباقرة المستقبليين.
هناك فرق كبير في تحسين الكفاءة بين البرامج التي يتم تنفيذها على خادم مخصص والبرامج التي يمكن تشغيلها على مضيف افتراضي. بالطبع، يمكنك تثبيت مجموعة من الأقراص على واحد أو حتى مجموعة من الخوادم المستقلة دون تعديل، ولكن هل تحصل حقًا على أقصى قدر من الأداء؟ هل أنت حقًا تستحق هذه المجموعة من الخوادم؟
ويعني الخادم المستقل أن المستخدم يتمتع بالتحكم الكامل في الجهاز، بما في ذلك تثبيت البرامج وحذفها، وتكوين معلمات النظام، وحتى تعديل كود المصدر. استنادًا إلى منصة الأجهزة المفتوحة هذه، لا ينعكس الأداء في السرعة فحسب، بل يشمل أيضًا الأمان والاستقرار وما إلى ذلك. على عكس المضيفين الظاهريين، يجب على المستخدمين تكوين معلمات خادم الويب، وتثبيت وتكوين PHP، وقواعد البيانات، وتثبيت جميع أنواع الأشياء الفوضوية (كما أحب أن أقول) بأنفسهم، وبالطبع يجب أن يكونوا مسؤولين عنها.
أولاً، دعونا نطرح بعض المصطلحات: وقت التنفيذ، القالب، تغليف قاعدة البيانات، ذاكرة التخزين المؤقت، المخزن المؤقت، التجزئة، البرنامج الخفي، وcrontab.
يعلم الجميع أن وقت التنفيذ هو الوقت الذي يستغرقه تشغيل البرنامج من البداية إلى النهاية. نظرًا لأن الويب عابر وعديم الحالة، فإن وقت التنفيذ يعد مؤشرًا على كفاءة تنفيذ برنامج الويب، وهو غير مناسب لقياس برامج C/S أو برامج الخلفية لأن العديد منها يعمل بشكل مستمر. من الأمثلة النموذجية لوقت تنفيذ الصفحة هو الوقت المعروض أسفل صفحة منتدى Discuz، وعادةً ما تتراوح مدة Discuz من بضعة مللي ثانية إلى عشرات المللي ثانية، اعتمادًا على النظام الأساسي المستخدم وكمية البيانات وضغط النظام الحالي.
الجميع على دراية بالنماذج، على الرغم من أن العديد من الأشخاص يستخدمونها فقط، إلا أنهم لا يعرفون سبب استخدامها. تعتبر القوالب تقليديًا طريقة لتقسيم الطبقات المنطقية في البنية العليا لـ MVC، فهي تفصل طبقة العرض عن الطبقة السفلية، وفي الاستخدام الفعلي، تسهل تقسيم العمل بين المبرمجين ومصممي الواجهة. ومع ذلك، في كثير من الحالات الآن، وبسبب الاستخدام غير السليم للقوالب، بدلا من تعزيز تقسيم العمل والتعاون بين المبرمجين ومصممي الواجهات، أصبحت السبب الرئيسي للكراهية المتبادلة بين المبرمجين والفنانين (أعتقد أنني قلت هذا في (منشور سابق) ، يشتكي العديد من الأشخاص من أنهم يضطرون إلى قضاء الكثير من الوقت في تنظيم القوالب.
يبدو أن تغليف قاعدة البيانات أكثر ارتباطًا بـ Java، فهو يوفر واجهة استدعاء موحدة لأنظمة قواعد البيانات المختلفة، وعادة ما تكمل بعض الفئات المغلفة أيضًا بعض المهام مثل فحص SQL والتصفية وما إلى ذلك. تعد عبوات DB وPEAR DB وAdodb وما إلى ذلك في PHPLIB كلها مشهورة ويستخدمها العديد من الأشخاص.
يبدو أن ذاكرة التخزين المؤقت والمخزن المؤقت هما نفس الشيء، تسمى ذاكرة التخزين المؤقت ذاكرة التخزين المؤقت ويسمى المخزن المؤقت التخزين المؤقت. في مفهوم الأجهزة، الغرض من ذاكرة التخزين المؤقت هو توصيل جهازين بسرعات مختلفة، مثل المسجلات والذاكرة، وحدة المعالجة المركزية وناقل PCI، ناقل IDE والقرص الصلب. المعنى الأصلي لـ Buffer هو حاجز يشبه الزنبرك، وهو شيء يستخدم لتقليل أو امتصاص صدمة التأثير. المخزن المؤقت هو طريقة للوصول المسبق للبيانات تُستخدم لتخزين البيانات مؤقتًا ونقلها بسرعة مختلفة عن سرعة الاستقبال. يمكن تحديث طريقة تحديث المخزن المؤقت تلقائيًا وفقًا للفواصل الزمنية، بينما تولي ذاكرة التخزين المؤقت مزيدًا من الاهتمام لـ "معدل الدخول" وتضع كمية صغيرة من البيانات التي يتم استخدامها بشكل متكرر في الفترة الزمنية الحالية في جهاز عالي السرعة لسهولة القراءة والكتابة. في تطوير البرامج، على الرغم من عدم وجود أجهزة عالية السرعة أو منخفضة السرعة، يمكن أن يكون لمصادر البيانات كفاءات مختلفة في القراءة والكتابة. بالنسبة لكمية صغيرة من البيانات، عادةً ما تكون قراءة الملفات النصية وكتابتها أكثر كفاءة من الوصول إلى قاعدة البيانات، كما أن كفاءة قراءة وكتابة الملفات النصية نفسها على tmpfs أفضل من كفاءة الإدخال والإخراج المباشر للقرص. ينعكس المخزن المؤقت بشكل أكبر في اتصالات العمليات وقوائم الانتظار، وفي كثير من الحالات، لا يكون ذلك بسبب عدم قدرة المتلقي على القراءة بشكل أسرع، ولكن لأنه ليست هناك حاجة للقراءة بشكل أسرع.
العملية الخفية هي برنامج يتم تنفيذه بشكل مستمر في الخلفية وعادةً ما تلعب دورًا في مراقبة العمليات والتحكم فيها وتوفير الخدمات الخارجية. على سبيل المثال، يمكن فهم Apache نفسه على أنه عملية خفية، على الرغم من أنه يتكون في الواقع من العديد من العمليات التي يتم تحديثها بشكل متكرر (تم إصلاح العملية الرئيسية).
Crontab هو برنامج مجدول لنظام التشغيل UNIX/Linux، وهو يشبه إلى حد ما "المهام المجدولة" في Windows، فهو يحدد فترة زمنية معينة أو نقطة زمنية معينة لتنفيذ برنامج معين. يتم استخدامه عادةً لإكمال التحديثات التلقائية ومسح البيانات المؤقتة والعمليات الأخرى التي يتم إجراؤها تلقائيًا مرة واحدة خلال فترة زمنية.
مفهوم خاص آخر (خاصة للأشخاص الذين اعتادوا على تطوير النظام العام) هو أنه بعد أن يكون لدينا خادم مستقل، ليست هناك حاجة إلى تقييد أنفسنا بالوظائف التي يمكن أن توفرها PHP عندما نصبح أسياد النظام دون علمنا يجب أن نعمل بجد لتحقيق ذلك. هناك أشياء كثيرة يمكننا استخدامها. PHP ليست كلية القدرة (هذا أمر مؤكد)، ويمكن تعويض عيوبها الوظيفية بالكامل بواسطة لغة Perl، باعتبارها لغة عامة، يمكن أن توفر لغة Perl المزيد من الخيارات الوظيفية، ووحداتها كثيفة مثل الحصباء. توفر اللغة غير الرسمية والمنحرفة ما لا نهاية طاقة. بالنسبة لأوجه القصور في أداء PHP، يمكن استخدام لغة C للتعويض عنها. أساس PHP موروث من C. تم تطوير PHP نفسها أيضًا بواسطة C. ومن المعقول تمامًا استخدام C لتوسيع PHP.
Linux نفسه مدعوم من قبل C وPerl (أقول هذا حتى لا أبالغ في وضع Perl. يمكنك معرفة عدد نصوص Perl الموجودة في Linux القياسي ومعرفة ما إذا كان النظام يبدو وكأنه شخص معاق بدون Perl). ورثت PHP معظم تركيباتها من لغة C، وتعلمت معظم ميزات الويب ووظائفها والرمز "$" الذي يبدو متناقضًا مع المصدر المفتوح من Perl (كان PHP عبارة عن برنامج نصي من نوع Perl في أيامه الأولى).
دعنا نحلل بعض الأكواد البرمجية التي أستخدمها (ملاحظة: ينطبق على خوادم Linux المستقلة. يبدو أنني قد تخليت عن التطوير واسع النطاق لنظام التشغيل Windows والمضيفين الظاهريين لفترة طويلة). ويستخدم بعض الأساليب التي قد تكون مألوفة أو غير مألوفة أو غير طبيعية. نظامي هو RedHat AS3، لا شيء مميز، إصدار PHP هو 4.4.0، وMySQL هو 4.1. لم أكتب أبدًا عن عمد تعليمات برمجية يجب أن تستخدم الميزات الجديدة لـ PHP5 إلا إذا كان ذلك ضروريًا حقًا.
دليل جذر الويب الخاص بي موجود ضمن /www.Apache ويتم تثبيت PHP ضمن /usr/local/ افتراضيًا، MySQL عبارة عن إصدار ثنائي تم تنزيله وتجميعه، كما أتركه هناك. نظرًا لأنه للاختبار فقط، لا أريد أن يبدو الأمر فوضويًا. أما بالنسبة للمشاريع الفعلية، خاصة في حالة الخوادم المتعددة، فأنت بحاجة إلى نشر نظامك جيدًا.
ولجعل بنية النظام أكثر وضوحًا، قمت بوضع جميع الملفات التي أحتاج إلى استخدامها في الدليل الثانوي.
فيما يلي بعض المقتطفات من ملف الرأس المشترك /includes/kernel/common.inc.php:
﹤?php
إذا (! محدد('IN_BSG')) {
مخرج؛
}
?﹥
يضمن الكود أعلاه أنه لا يمكن استدعاؤه إلا بواسطة البرامج القانونية ولن يتم تضمينه بواسطة ملفات أخرى. إذا لم يحدد البرنامج المنفذ ثابت "IN_BSG"، فسوف ينتهي بعد تضمين common.inc.php هذا.
﹤؟ فب
list($usec, $sec) = Explosion(" ", microtime());
$page_time_start = $usec + $sec;
?﹥
ربما يكون الجميع على دراية بهذين الخطين، اللذين يستخدمان لحساب وقت بدء تنفيذ البرنامج. وقبل انتهاء البرنامج يتم حساب ذلك مرة أخرى لمعرفة الوقت المستغرق لتنفيذ البرنامج. إذا كنت لا تهتم بهذا، يمكنك التعليق عليه بأمان.