قائمة طعام
مجاني
التسجيل
الصفحة الرئيسية  /  النصيحة/ مترجمين PHP مجانيين. مجموعة مختارة من المجمعين عبر الإنترنت: نقوم بتشغيل واختبار الكود مباشرة في المتصفح. كيف يعمل المترجم الفوري

مترجمين PHP مجانيين. مجموعة مختارة من المجمعين عبر الإنترنت: نقوم بتشغيل واختبار الكود مباشرة في المتصفح. كيف يعمل المترجم الفوري

غالبًا ما يتم تجميع PHP من المصدر على أنظمة شبيهة بنظام Unix. من المرجح أن يقوم أولئك الذين يستخدمون نظام تشغيل Windows بتنزيل PHP وتثبيته من الحزم الثنائية. وعلى الرغم من أنني لا أوافق على أنه أسهل في الاستخدام ، إلا أن الحل المترجم مسبقًا يعمل أنظمة يونكسهناك بعض الفوائد التي يمكن أن تأتي مع تجميع الملفات الثنائية من المصدر. الكل في الكل:

  • لديك فرصة الكون المثالىالمنتج النهائي عند تجميعه. ربما تريد تمديد محددالذي يقوم بالتجميع مباشرة إلى الملف الثنائي بدلاً من تحميله كمكتبة خارجية. أو ربما تريد إيقاف تشغيل ما هو متاح عادة بشكل افتراضي.
  • يمكنك القيام بحيلة ، في وقت التجميع ، إذا لزم الأمر ، والتي يمكن أن تحسن الأداء لبيئة معينة (بالطبع ، هذا يفترض أنك تعرف بالفعل ما تفعله في هذه الحالة. لن تقرأ هذا المقال !).
  • قد يكون التجميع هو الطريقة الوحيدة لجعل الأشياء تعمل إذا كانت الثنائيات المترجمة مبنية على إصدارات أقدم مع دعم البرامج والمكتبة وأنت الآن على نظام جديد.

تحذير:يمكن أن يكون التجميع محبطًا ، خاصة على Windows! يجب أن تتأكد من أن بيئة الإنشاء قد تم إعدادها بشكل صحيح ، وأن تتعلم كيفية استخدام المترجم وأدوات البناء الأخرى كما هو متوقع ، وأن تفي بأي مكتبات تبعية. نأمل أن يكون هذا المقال هو خطوتك الأولى في التغلب على العديد من هذه العقبات.

تهيئة بيئة البناء

تمت كتابة PHP بلغة C ، وبالتالي فإن مترجم C ضروري إذا كنت تنوي إنشاء PHP من المصدر. C ++ هي مجموعة فائقة من C ، لذا يجب أن يكون مترجم C ++ الجيد قادرًا على ترجمة كود C ، وعلى الرغم من أن هذا ليس هو الحال دائمًا. بالنسبة لنظام التشغيل Windows ، يتوفر Visual Microsoft و C + + Express (والذي سيُطلق عليه لاحقًا VC + +) مجانًا على موقع Microsoft على الويب. تم استخدام إصدار 2010.

عند اختيار إصدار مترجم ، يجب أن تضع في اعتبارك كيف ستقوم بتشغيل PHP. إذا كان عليك العمل مع mod_php من ثنائيات Apache المجمعة رسميًا وتريد تجميع PHP باستخدام Visual Studio 6 ، لأن هذا هو إصدار مجمع Apache. يجب أن تستهدف الوحدة نفس مكتبة وقت التشغيل مثل Apache ، في هذه الحالة msvcrt.dll. إذا كنت تقوم ببناء Apache من المصدر أيضًا ، أو إذا كنت تنوي تشغيل PHP كـ FastCGI أو CLI ، فهذه ليست مشكلة وسيعمل 2010 بشكل جيد.

يجب عليك أيضًا تثبيت ملفات البرمجيات Windows Development Kit (SDK بعد ذلك). تعطينا SDK ملفات رأس مهمة لـ منصات Windowsالتي نحتاج إلى تجميعها بنجاح. هذا أيضًا ، تم استخدام الإصدار 7.1.

قم بتثبيت المترجم ثم SDK. لن أناقش التثبيت ، لأن كلاهما لديه معالج تثبيت رسومي يرشدك خلال العملية بأكملها.

بمجرد أن يكون لديك مترجم فعال لإنشاء ، قم بتنزيل Binary Tools and Known Packages من windows.php.net. تحتوي حزمة الأدوات الثنائية (أنا أستخدم أرشيف 20110915) على أدوات تطوير مثل re2c و bison وبعض الأوامر الإضافية التي ستحتاجها لإنشاء PHP. حزمة معروفة (أنا أستخدم أرشيف 5.4 لأن هذا هو نفس إصدار PHP الذي سأقوم بتجميعه) يحتوي على الحد الأدنى من الرؤوس والاعتمادات المكتبية اللازمة ، على سبيل المثال zlib.h.

ربما يكون من نافلة القول أنك تريد تنزيل مصدر PHP أيضًا من windows.php.net. في وقت كتابة هذا التقرير ، الإصدار الحالي هو PHP 5.4.6 ، لذلك سترى رقم الإصدار هذا في الأمثلة.

إنها فكرة جيدة أن تصنع مساحه العمل، حيث يمكنك فك شفرة المصدر وتجميعها بحيث لا تؤثر على باقي نظامك. قم بإنشاء مجلد C: \ PHP-Dev ليكون بمثابة دليل العمل الخاص بك ثم قم بفك ضغط الأرشيف الثنائي والأدوات فيه.

بعد ذلك ، قم بفك محتويات الأرشيف ، مصدر PHP في C: \ PHP-Dev الآن لديك php5.4 في مجلد المصدر ، ثم استخرج أرشيفه في مجلد deps sibling. يجب أن تبدو بنية الدليل كما يلي:

افتح موجه أوامر Windows SDK الذي تم تثبيته باستخدام SDK (ابدأ => مايكروسوفت ويندوز SDK => موجه أوامر Windows SDK) وقم بتنفيذ الأوامر التالية:

Setenv / release / xp / x86 cd C: \ PHP-Dev bin \ phpsdk_setvars.bat

يفضل استخدام وحدة تحكم SDK في سطر الأوامر قبل وحدة تحكم cmd.exe العادية لأنها تحدد الكثير متغيرات البيئةخاص بالتجميع مصدر الرمز... يجب أيضًا إجراء تجميعات الأوامر لاحقًا في وحدة التحكم هذه.

تعيين setenv بعض خصائص البناء للبيئة ، وفي هذه الحالة يتم تعيين بيئة إنشاء Windows XP 32 بت الهدف. يمكنك محاولة البناء باستخدام / x64 إذا كنت تبحث عن مغامرة. تعريف مختلف إصدارات Windowsمثل / Vista ، على الأرجح مشاكل الخروج بسبب بعض التعريفات الغريبة في البرامج النصية (لا تزال PHP تريد أن تكون متوافقة مع XP). ما لم تكن تعرف حقًا ما تفعله ، فمن الأكثر أمانًا الالتزام بالقيم الموصى بها التي استخدمتها أعلاه.

يخرج سكريبت phpsdk_setvars.bat إلى بعض الإضافات متغيرات البيئة، تمكنت عملية الإنشاء من العثور على أدوات ثنائية.

ضع في اعتبارك أن كل متغيرات الإعداد هذه هي مجرد جلسات مؤقتة لوحدة التحكم. إذا قمت بإغلاق كل شيء بسرعة للعودة إلى الترجمة لاحقًا ، فستحتاج إلى تشغيل الأمر مرة أخرى ، وإذا لم تقم بذلك ، فستتلقى أخطاء مثل ما يلي ، عند تشغيل التكوين لاحقًا ، لن تتمكن من المتابعة:

التحقق من bison.exe ... خطأ: مطلوب البيسون

التأكد من أن لديك بيئة البناء الصحيحة والمصادر المطلوبة وعدم التبعيات هو أصعب جزء من العملية. الآن تم إعداد بيئتك من المصدر والتبعيات ، حان وقت التجميع!

ترجمة PHP

من سطر أوامر SDK ، انتقل إلى مجلد مصدر PHP وقم بتشغيل buildconf. الأمر مسؤول عن إنشاء ملفات التكوين ، والتي سيتم إنشاؤها بواسطة Makefile للتحكم في عملية الترجمة.

بعد اكتمال buildconf (لا يستغرق الأمر سوى ثانية واحدة) ، قم بتشغيل config --help - وشاهد التعليمات الخاصة بالميزات التي تريد تمكينها / تعطيلها ، ثم قم بتشغيل التكوين مرة أخرى بأي خيار تريده. إنها لفكرة جيدة أن تتحقق من عطلة نهاية الأسبوع قبل التبديل ، حيث ستحذرك إذا لم يتوفر أي من التبعيات المطلوبة. إذا حدث هذا ، فيمكنك إما تثبيت التبعيات وإعادة تشغيل الإعداد مرة أخرى ، أو ضبط المكالمة لتعطيل الامتدادات التي تحتاجها.

أخيرًا ، قم بتشغيل NMAKE لبدء التحويل البرمجي.

القرص المضغوط C: \ PHP-Dev \ php5.4 buildconf تكوين n قم بإجراء اختبار

في حالة فشل أي تكوين أو NMAKE ، تكون المشكلة أحد أمرين: أولاً ، لم يتم تكوين البيئة بشكل صحيح ، وثانيًا ، لقد قمت بتمكين ميزة تعتمد على المكتبات الخارجية والمكتبات غير مثبتة على نظامك. تحقق مرة أخرى من أنك قمت بإنشاء البيئة وفقًا للإرشادات أعلاه ، وأنه تم تكوين أي مكتبات إضافية قد تكون مطلوبة في إطار العمل.

عند اكتمال عملية تجميع NMAKE الأولى ، ستجد عمليات التجميع الجديدة الخاصة بك ملفات PHPفي المجلد Release_TS. يعمل اختبار NMAKE على تشغيل أخطاء جديدة مزدوجة عبر الجرافة للتأكد من أن كل شيء يعمل كما ينبغي. يتم إرسال نتائج اختبارات NMAKE إلى فريق ضمان الجودة ، والذي يعتمد عليهم لتحسين PHP ، لذلك قد يستغرق الأمر بضع دقائق للبدء ، إنها مشكلة كبيرة.

في هذه المرحلة ، يمكنك أيضًا الاستفادة من خطوة NMAKE الإضافية الإضافية ، والتي سيتم إنشاؤها أرشيفات مضغوطةوثنائيات للنسخ.

تجميع ملحقات

هناك طريقتان لتجميع امتدادات PHP: بشكل ثابت وديناميكي. يتم تجميع الامتداد المترجم بشكل ثابت إلى ثنائي PHP ، بينما الامتداد المترجم ديناميكيًا هو DLL منفصل يمكن تحميله لاحقًا عبر ملف php.ini. عادةً ما يتم تجميع الإضافات وفقًا لحالة DLL ، على الرغم من وجود بعض المزايا للتجميع الثابت أيضًا ، إلا أنه يعتمد في النهاية على احتياجاتك.

لتجميع امتدادات PHP على Windows ، قم باستخراج مجلد مصدر الامتداد إلى المجلد ext ، دليل مصدر PHP. بعد ذلك ، أعد تكوين البرنامج النصي عن طريق تشغيل buildconf - force وإعادة ترجمة PHP باستخدام الخطوات المناسبة لتمكين الامتداد.

كمثال ، دعنا نجمع امتداد AOP بشكل ثابت. قم بتنزيل الكود المصدري من PECL ، وقم بفك ضغطه إلى مجلد في ext. ثم اتبع هذه الخطوات:

القرص المضغوط C: \ PHP-Dev \ php5.4 buildconf - فرض تكوين --enable-aop nmake

باستخدام الخيار --force ، يجبره buildconf على استعادة نص التكوين. بعد ذلك ، قم بتشغيل config --help وسترى خيارًا لتمكين الامتداد الجديد في الإخراج. في هذه الحالة ، يكون - تمكين- AOP.

عندما ينتهي nmake ، ستحتاج إلى ثنائي PHP مبني حديثًا مع PHP مع AOP.

ستكون الإضافات متاحة كملف DLL ، وليست مخبوزة في PHP ، يمكنك اتباع نفس الخطوات المذكورة أعلاه ، ولكن تحديد "Shared" كقيمة للتخصيص ، كما يسمح الخيار.

Buildconf --force تكوين --enable-aop = Shared

نتيجة لذلك ، سيكون ملف DLL في المجلد Release_TS مع ملف PHP الثنائي ، وسينتهي التجميع ، وفي هذه الحالة يكون الاسم php_aop.dll.

ملاحظة.

لا يزال التجميع على Windows صعبًا بعض الشيء ، خاصة عندما يتعلق الأمر بالملحقات. تعد القدرة على التجميع من المصدر مهارة جيدة ، خاصة إذا كنت تريد تغيير PHP لاحقًا.

تم إعداد المقال لك ، فريق الموقع
المقالة الأصلية:
ترجمه فيكتور كليم

أليكسي رومانينكو:اسمي أليكسي رومانينكو ، أعمل لدى RBC. موضوع هذا الحديث مثير للجدل إلى حد ما. يبدو ، لماذا نجمع نصوص PHP عندما يبدو أن كل شيء يعمل على هذا النحو؟

ربما يكون السؤال الرئيسي هو: "لماذا؟" بشكل عام ، الغرض من هذا العرض هو محاولة فهم ما إذا كانت هناك حاجة لمثل هذا التجميع ، وإذا كان الأمر كذلك ، فلماذا وبأي شكل ولمن.

ما هو مترجم PHP؟

أولاً ، نظرة عامة بسيطة على ماهية مترجم PHP. سأخبرك كيف تعمل ، ما هي وكيف يمكنك تسريعها.

أول وحدة وظيفية هي ما يسمى SAPI (Server API) ، والتي توفر واجهة للوصول إلى PHP من عملاء مختلفين (Apache ، نوع من خادم CGI (واجهة البوابة العامة) ، وغيرها). يوجد أيضًا SAPI مضمن ، والذي يسمح لك بتضمين PHP في أي تطبيق.

الجزء الرئيسي الثاني هو PHP Core ، الذي يتعامل مع الطلبات ، وينفذ جميع الشبكات ، نظام الملفاتومن خلال تحليل النصوص نفسها.

الجزء العالمي الثالث هو Zend Engine ، الذي يجمع نصوصنا في بعض الرموز الثانوية ، وينفذها على الجهاز الظاهري ويتعامل مع إدارة الذاكرة (ينفذ مخصصات شاملة).

من أهم وأكبر الأجزاء هي وحدة Extentions ، والتي تنفذ 99٪ مما نستخدمه في PHP. هذه إما "أغلفة" لبعض المكتبات ، أو وظائف ، أو فئات ، أو مكتبات مدمجة ، إلخ. يمكننا أيضًا كتابة الامتدادات الخاصة بنا.

كيف يتم تنفيذ البرنامج النصي نفسه؟

أولا. يتم إجراء التحليل المعجمي - يتم تحميل الملف وتحليله ، ويتم ترجمة جميع الرموز من مجموعة هذا الملف إلى مجموعة معينة من الرموز المميزة ، والتي نعمل معها بعد ذلك.

تقوم مرحلة الإعراب بتوزيع هذه الرموز المميزة. بناءً على هذا التحليل ، يتم تجميع بنية نحوية معينة ، والتي سيتم على أساسها إنشاء رمز البايت لاحقًا.

في النهاية ، ينفذه محرك Zend. يتم إرسال النتيجة إلى العميل.

نحن نتحدث عن أحمال عالية. إذا قمت بإعادة إنتاج مخطط الإجراءات هذا في كل مرة معهم ، فسيعمل كل شيء ببطء شديد. عندما تصل عدة مئات أو آلاف الطلبات إلى مترجمنا في نفس الوقت ، فإن السرعة ببساطة ليست موجودة.

لكن هناك حلول. لقد كانوا معروفين لفترة طويلة.

كيف نحقق التسارع؟

الحل الأبسط والأرخص والأكثر تجريبًا هو التخزين المؤقت للرمز البايت. بدلاً من المرور بمراحل الإعراب والتحليل ، نقوم فقط بتخزين الرمز الثانوي الخاص بنا مؤقتًا. هناك امتدادات خاصة لهذا - وهي معروفة جيدًا لكل من عمل مع PHP - وهي APC و eAccelerator و Xcache وما إلى ذلك. يقوم محرك Zend فقط بتنفيذ الرمز الثانوي.

الخيار الثاني هو التنميط الكود ، وتحديد الاختناقات. يمكننا إعادة كتابة شيء ما كملحقات PHP (سيكون امتدادًا C / C ++) وجمعه واستخدامه كوحدات نمطية.

الخيار الثالث أكثر عالمية - انسَ أمر PHP وأعد كتابة كل شيء. بشكل عام ، المتغير له الحق في الحياة ، ولكن فقط في حالة عدم وجود كود php كافٍ. في المشاريع الكبيرة والكبيرة (أو تلك التي كانت موجودة منذ فترة طويلة) ، عادةً ما تتراكم كثيرًا ، وستستغرق إعادة كتابة كل شيء وقتًا طويلاً. لن تسمح لك متطلبات العمل بالقيام بذلك. بشكل عام ، كتابة شيء ما بلغة PHP ، على سبيل المثال ، لخادم الواجهة الأمامية ، ليست طويلة جدًا ، لأنها لغة بسيطة. يتيح لك القيام بأشياء تستغرق وقتًا أطول بسرعة في اللغات منخفضة المستوى.

هنالك الخيار البديلالذي انتشر مؤخرًا هو تجميع PHP في مكان ما ، إلى شيء أسرع.

دعونا نجمع شيئا؟

بكلمة "تجميع" أعني ترجمة كود البرنامج النصي PHP إلى شيء آخر ، إلى كود آخر.

في هذه الحالة ، يمكن أن يكون من نوعين.

الكود الأصلي هو نوع من الملفات الثنائية التي يمكن تنفيذها على جهاز فعلي.

كود غير أصلي. من الممكن تجميع بعض الرموز الثنائية التي يمكن تنفيذها على جهاز افتراضي آخر ، على سبيل المثال ، على JVM.

ما الذي يمكنك استخدامه لتجميع الكود الأصلي من PHP؟

مترجم Roadsend. تتمة لها الغراب. يوجد أيضًا PHC (هذا هو مترجم PHP مفتوح المصدر). في الآونة الأخيرة ، ظهرت أيضًا HipHop (Facebook).

فيما يلي نظرة عامة سريعة على ما يمكنك القيام به للتعليمات البرمجية غير الأصلية. بقدر ما أعرف ، هناك 3 خيارات عمل. هذا هو إنشاء رمز بايت لجافا وتوليد الرمز الثانوي لـ .Net: Quercus و Project Zero و Phalanger. لن أفكر في التحويل البرمجي إلى كود غير أصلي ، لأننا لا نستخدمه. دعنا نعود إلى التجميع إلى الكود الأصلي.

في رأيي ، أقدم مترجم هو Roadsend. بدأ تطويره منذ وقت طويل ، في عام 2002. كان هذا في الأصل تطبيقًا تجاريًا. تم إغلاقه ، فقط في عام 2007 تم إصداره في المصدر المفتوح. هناك جدا مخطط معقدالتحويل البرمجي: يتم استخدام مترجم Bigloo للغة النظام ، وبعد ذلك يتم إنشاء الكود الأصلي. لا يستخدم هذا المترجم محرك Zend.

يمكننا إما إنشاء ثنائي منفصل قابل للتنفيذ أو إنشاء وحدة نمطية لـ Apache. من الممكن أيضًا إنشاء ثنائي يعمل كخادم ويب. لكنها لا تعمل. لا أعرف لماذا ، لكنه لا يعمل معي على الإطلاق.

بقدر ما أعرف ، لا يتم العمل على Roadsend حاليًا. ولدت من جديد باسم مشروع Raven ، والذي تمت إعادة كتابته بالكامل في C ++. كتجميع ، فإنه يستخدم LLVM لإنشاء التعليمات البرمجية.

تشغيل هذه اللحظةكل شيء يبدو واعدًا جدًا.

لكنها لا تزال في مرحلة الخلق. حتى في الوثائق هناك تلميحات بأننا لن ننشئ ثنائيات. انتظر.

سيكون كل شيء محزنًا إذا لم يكن لدينا الرعاية الصحية الأولية. إنه مترجم مفتوح المصدر. لقد كان قيد التطوير منذ 2005. أحد عيوبه: أنه يستخدم SAPI مضمن. نحن لا نتخلى عن آلة جافا ، محرك Zend. في الأساس ، يترجم كود PHP إلى كود وحدة امتداد PHP. ثم يقوم بالتجميع ، لكن عملية التنفيذ تستخدم محرك Zend مرة أخرى.

مثال على استخدام الرعاية الصحية الأولية

إنه مشابه جدًا لطريقة عملنا ، على سبيل المثال ، مع المجمعين التقليديين ، دول مجلس التعاون الخليجي. الأول يوضح أن هناك ثنائيًا واحدًا ، يمكننا أيضًا إنشاء رمز "C". نظرًا لاستخدام نفس gcc داخليًا بعد إنشاء هذا الرمز ، يمكننا استخدام تلك العلامات المخصصة للتحسين وأشياء أخرى.

كان حول تطبيق يعمل على سطر الأوامر.

لبدء تشغيل تطبيق ويب ، تحتاج إلى تنفيذ عدة خطوات ، إنه أمر صعب للغاية. أولاً ، تحتاج إلى إنشاء امتداد (Extention) ، ثم تجميع الكود ، ثم توصيله بطريقة ما (إما ديناميكيًا أو ثابتًا).

الفوائد الرئيسية للرعاية الصحية الأولية

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

بالمناسبة ، تتمثل إحدى المزايا الإضافية لـ PHC في أنه يمكنك إنشاء عمل XML للنص البرمجي بناءً على كيفية إنشاء XML ، وقد يكون هذا مفيدًا في بعض الأحيان.

سلبيات

في رأيي ، هذا ثنائي غير مكتمل ، لأنه لا يزال يعتمد على محرك Zend. هناك أيضًا بعض الصعوبة فيما يتعلق بالاتصال بمشاريع الويب.

الشيء الرئيسي

ربما لم يكن هذا الحديث ليحدث إذا لم يظهر حل HipHop ، وهو حل من Facebook. قام منشئوها أيضًا بتجميع قدر كبير من كود PHP وفكروا لفترة طويلة في ما يجب فعله به.

بقدر ما أفهم ، بعد رفض خيارات إعادة كتابة كل شيء ، تقرر كتابة مترجم (في هذه الحالة ، إلى كود C ++). المشروع صغير نسبيًا ؛ تم طرحه رسميًا فقط في فبراير من هذا العام. تتم ترجمة كود PHP إلى كود C ++ ثم يتم إنشاؤه باستخدام الأدوات القياسية لنظام التشغيل الخاص بك. صحيح ، حتى الآن يتم دعم نظام التشغيل Linux فقط.

بالأمس فقط ، سألت ممثل Facebook عن هذا القرار. قال إنه في الوقت الحالي ، يتم تجميع 100٪ من كود PHP من خلال HipHop. الخامس شكل نقيالكود لا يعمل من خلال مترجم PHP. مرة أخرى ، أعلن المبدعون عن انخفاض كبير في حمل المعالج.

الوظيفة الرئيسية للهيب هوب

يقوم بإنشاء الملف الثنائي نفسه مباشرة ، والذي يمكن تنفيذه في سطر الأوامر. هناك خيار من هذا القبيل لتشغيله كخادم ويب متدفق. يوجد أيضًا مصحح أخطاء مدمج منفصل. يمكنهم تصحيح البرامج النصية محليًا وعن بعد (ستعمل كخادم).

عملية البناء غير بديهية إلى حد ما. هناك وصف ، لكن لم يتم جمعه في كل مكان. في الوقت الحالي ، كما قلت ، يتم تجميع كل شيء في نظام Linux ، بالإضافة إلى "شحذ" كل شيء مبدئيًا لـ 64 بت. على الرغم من أنه يتم الآن دعم 32 بتًا تجريبيًا. لكنني تمكنت من جمع وإصلاح بعض الشيء - بشكل عام ، فعل كل هذا ، لأنه لن يحدث افتراضيًا.

بالإضافة إلى ذلك ، لديهم إصدارات خاصة بهم من libcore ، وفي رأيي ، هناك مكتبتان تحتاجان أيضًا إلى التصحيح. بشكل عام ، عملية البناء ليست بهذه البساطة.

عند الإخراج بعد الإنشاء ، نحصل على ملف hphp معين ، وهو مترجم لرمز PHP الخاص بنا إلى C ++. إذا نظرنا إلى الأعلام ، فهناك عدد غير قليل منهم. لقد أبرزت هنا بعض العناصر الأساسية التي قد تحتاجها.

كما ملف التكوين(config) يمكننا استخدام ملف HDF من خلال تحديد التوجيهات المختلفة. يمكننا تعيين مستوى الأخطاء والأشياء الأخرى هناك (HDF هو كل شيء في شكل منظم). أيضًا ، يمكننا أخذ التكوين نفسه من قاعدة البيانات أو استخدامه مباشرة في سطر الأوامر.

نقوم بتعيين مستوى التسجيل أثناء التجميع: إظهار جميع الأخطاء أو عرض التحذيرات أيضًا ، معلومة اضافية، أو احتفظ بشكل عام بسجل كامل لكل ما يحدث.

هناك توجيه مفيد للغاية وهو input_list = FILE ، والذي يسمح لنا بتحديد قائمة البرامج النصية التي نريد تجميعها. وتجدر الإشارة أيضًا إلى التوجيه البطيء. يمكننا تحديد جميع ملفات المشروع - تلك التي سيتم تجميعها.

مثال على بدء تجميع نص PHP

تم تثبيت المستوى الثالث من التسجيل ، ها هو تمامًا معلومات عامةبمرور الوقت ، يمكنك معرفة مقدار ما استغرقته. في الواقع ، النص بسيط جدًا. هذه هي عبارة "Hello، World" المعتادة ، لقد التقطت للتو لقطة شاشة.

الملف "الأثقل" هو برنامجنا الثنائي ، حجمه 28 ميغا بايت. في الواقع ، يبلغ وزن برنامجنا "Hello، World" 28 ميغا بايت. أود أن أشير إلى أنه بالإضافة إلى خط "Echo" Hello، World! القياسي ، فإن هذا الثنائي يتضمن الكثير. فهو خادم ويب كامل ، وخادم كامل للإدارة.

ماذا نحصل؟

لدينا "Hello ..." في C ++ ، والتي تؤدي وظيفة تتكون من سطر واحد "echo" Hello، World ". بالإضافة إلى ذلك ، يتم تحميل الكثير من أشياء الجهات الخارجية. كما نرى ، هذا هو ملف كامل في C ++.

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

هذا - الوضع ، هذا هو وضع التشغيل لبرنامجنا. يمكننا تشغيله إما مباشرة (من سطر الأوامر) أو في وضع خادم الويب أو برنامج خفي كامل. هناك خياران آخران ، لكنهما غير ذي صلة.

التكوين المستخدم بنفس التنسيق. لم أعطي توجيهات لأن هناك الكثير منها. يتم تضمين التوثيق مع HipHop. إنه ليس موجودًا على موقع wiki ، ولكن يتم توفير الوثائق مع مجموعة أدوات التوزيع ، حيث يتم وصف كل شيء بوضوح. لم أكن أتوقع حتى أن يكون الوصف مفصلاً للغاية ، فهو يتيح تكوينًا مرنًا جدًا للحل.

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

إطلاق مثال

على سبيل المثال ، حددنا المنفذ 9999 للبث ، ومن خلال تنفيذ طلبات http البسيطة ، يمكننا تلقي إما الإحصائيات ، أو بطريقة ما إدارة الخادم ، أو تلقي بعض المعلومات الإضافية. بشكل عام ، هذا مريح للغاية.

خيار الحالة

من الممكن ضبط حالة الخادم بتنسيقات مدمجة متنوعة (xml ، json ، html). في الواقع ، يتم توفير معلومات حول العملية الرئيسية للخادم نفسها والمعالجات - الخيوط التي تعالج الطلبات.

إحصائيات إضافية

في الواقع ، يتم توفير الكثير من الإحصاءات. نظرًا لأن HipHop يعمل بشكل أصلي مع memcache و SQL كـ MySQL ، فإنه يوفر معلومات مفصلةلجميع العمليات التي يتم إجراؤها معه.

إحصائيات كاملة للعمل مع الذاكرة

هناك جدا ميزة مفيدة- احصائيات التطبيق. استخدام وظائف اضافيه HipHop نفسه بلغة PHP ، يمكننا كتابة الإحصائيات في نصوصنا ، والتي نحصل عليها بعد ذلك من خلال الوصول المنتظم إلى http.

تصحيح

كما قلت ، من الممكن استخدام "التصحيح" المدمج لتصحيح البرامج النصية. هذا ملائم للغاية ، لأن مترجم hphpi يعمل بطريقة مشابهة لما قمنا بتجميعه. هناك اختلاف في "سلوك" البرامج النصية عند تنفيذها في PHP القياسي وعند استخدام بعض البيانات من البرامج المجمعة. لتصحيح ما تم تجميعه ، كتب Facebook مترجمًا منفصلاً.

في الحالة الأولى ، قم بتشغيل الكود باستخدام المفتاح "-f" وانظر كيف يتصرف الملف ؛ يذهب كل الإخراج إلى stdout. أو يمكننا تشغيله في وضع التصحيح والدخول إلى مصحح الأخطاء التفاعلي. إنه مشابه جدًا لـ GDB القياسي: يمكنك أيضًا تعيين نقاط التوقف والتشغيل وإدخال القيم المتغيرة والتتبع والمزيد.

واحد من فرص إضافية

لدينا برنامج خرج بعد التجميع. يمكن استخدامه كخادم RPC. نقوم بتشغيل الطلبات عبر http ، وباستدعاء وظيفة params ، يمكننا تمرير المعلمة إما كمصفوفة json أو كمعامل منفصل. سنقوم بإرجاع json ، والتي تُرجع نتائج هذه الوظائف. إنها مريحة للغاية - الوظيفة المطلوبة مدمجة بالفعل منذ البداية.

سلبيات الهيب هوب

لا يتم دعم تراكيب اللغة ووظائفها مثل Eval () و create_function () و preg_replace () مع / e حاليًا في HipHop ، على الرغم من أنها جميعها مماثلة لـ Eval (). صحيح ، في الإصدارات الأخيرة ، في رأيي ، لا يزال بإمكانك تمكين Eval () عبر config. لكن لا ينصح بذلك. بشكل عام ، يعد استخدام EVAL () أمرًا سيئًا.

المزايا الرئيسية للهيب هوب

بالطبع ، الميزة الرئيسية هي الدعم من Facebook. إنه يعمل ويتطور بنشاط كبير. مجتمع من المطورين يتطور حول هذا المشروع. تمت كتابة تطبيق PHP جديد تمامًا.

كما قلت ، الإضافة هي أن الكود الأصلي يتم إنشاؤه. مكاسب الأداء المزعومة عن طريق تقليل تكلفة استخدام المعالج (تؤكد الاختبارات ذلك).

إنه مرن للغاية في تكوينه. لقد فوجئت بسرور بوجود عدد غير قليل من الخيارات للتخصيص. أعتقد أن هذا يرجع إلى حقيقة أن المشروع يعمل بالفعل. يتم زيادة كل ما يتم استخدامه.

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

تمت كتابة وثائق جيدة جدًا لهذا الحل. ميزة أخرى: إنه حل جاهز حقًا للاستخدام في الإنتاج (على سبيل المثال - Facebook).

سلبيات

العيب الرئيسي هو أنه يتم دعم عدد محدود نوعًا ما من الوحدات النمطية حاليًا. على سبيل المثال ، عند العمل مع قاعدة بيانات ، يمكننا فقط استخدام الوظائف للعمل مع MySQL. لا يوجد دعم PostgreSQL هنا.

هناك أيضًا لحظة مثل تعقيد التجميع ، الذي ذكرته بالفعل. توجد مشكلات في البناء على أنظمة 32 بت. لكن هذا ، على ما أعتقد ، سيتم تصحيحه قريبًا. حتى الآن ، تم استخدام التجميع من PHP 5.2 فقط. لم يتم دعم الإصدار 5.3 حتى الآن ، ولكن سيتم دعمه كما وعدنا.

ما الذي لا يجب توقعه من التجميع بشكل عام ومن HipHop بشكل خاص؟

لن يؤدي التجميع بأي حال من الأحوال إلى تسريع استعلامات SQL البطيئة مقابل قاعدة البيانات. لو عنق الزجاجة- هذه قاعدة ، ثم قم بتجميعها أو عدم تجميعها ، فلن يكون هناك معنى من هذا.

لا يؤدي التجميع إلى تسريع تحميل الإحصائيات ، بل الديناميكيات فقط. يجعل التصحيح أكثر صعوبة. على الأرجح ، اعتاد الكثير على حقيقة أن كل شيء تم تصحيحه في PHP بكل بساطة. عند تجميعها ، لن يعمل هذا بعد الآن. على الرغم من أن Facebook ، كما أشرت ، جعل هذه العملية سهلة قدر الإمكان ، فبدونها سيكون من الصعب تجميعها في كل مرة.

لا تتوقع أن يكون هذا نوعًا من "الحل الفضي" الذي سيحل جميع مشاكلك. في الواقع ، يحل التجميع مجموعة ضيقة إلى حد ما من المشاكل. إذا كانوا كذلك ، فقد يساعد ذلك.

ما هي المشاكل التي يحلها التجميع؟

إنه يقلل الحمل على وحدة المعالجة المركزية ، لأنه عند العمل بنشاط مع PHP مع عدد كبير من الطلبات ، يزداد العبء عليها بشدة. بالطبع أود إجراء بعض الاختبارات.

اختبارات

الاختبار الأول (الأبسط) هو عملية مكلفة إلى حد ما تستغرق وقتًا طويلاً لإكمالها. في الاختبارات ، حاولت تجريد نفسي ، وليس تقديم طلبات باستخدام بعض الموارد الخارجية.

يقع الحمل بالكامل على المعالج. أظهر الاختبار أن HipHop "فاز" على الجميع: فهو يعمل أسرع مرة ونصف تقريبًا من مترجم PHP القياسي. اجتاز مركز الرعاية الصحية الأولية هذا الاختبار ببطء شديد.

بالنسبة لاختبار الأداء الثاني ، قمت بأخذ نص PHP الرسمي الذي يمكن تنزيله من SVN. يؤدي عددًا من الوظائف التي تؤدي عمليات الفرز والتخصيص والتجميع - عمليات مكلفة للغاية من حيث الرياضيات.

كان HipHop في الصدارة مرة أخرى. علاوة على ذلك ، مع PHP القياسي ، يكون الفارق الزمني حوالي 3 مرات. كان أداء الرعاية الصحية الأولية أفضل هنا ، ولكن ضعف أداء HipHop.

تُستخدم PHP في الغالب للتدفقات التي تتعامل مع طلبات http - وهذا شيء يجب مراعاته.

العديد من التكوينات القياسية(Apache مع PHP و Nginx مع fpm-php و APC القابل للتوصيل للتخزين المؤقت للكود). الخيار الخامس هو الهيب هوب.

لأكون صادقًا ، لم أجري الاختبارات على خادم ، ولكن على جهاز كمبيوتر محمول. الأرقام ، بالطبع ، قد لا تتوافق تمامًا مع الواقع ، ولكن في هذه الحالة تكون النتائج طبيعية. تجدر الإشارة إلى أنه مع زيادة الحمل ، يزداد عدد الطلبات والعدد الإجمالي للطلبات في وقت واحد. التالي هو RPS. تم اختبار الصفحة القياسية ، والتي تضم 10 من بعضها شوائب بسيطة... في الأساس ، هذا هو اختبار PHP كمترجم.

سؤال من الجمهور:ما هي الأرقام في الخلية - ثواني؟

أليكسي رومانينكو:هذا هو إطار في الثانية.

هنا يمكننا أن نستنتج أنه مع الزيادة في عدد الطلبات المتزامنة ، فإن HipHop يتصرف بشكل جيد للغاية.

يمكن ملاحظة أن استخدام APC هو ممارسة قياسية. يظهر أنه يضيف ، على سبيل المثال ، مثل Apache ، مكاسب في الأداء تبلغ حوالي مرتين. لدى Nginx هذا أيضًا. لكن حقيقة أن Nginx بطيء لا يعني أن هذه الحزمة أسوأ. مجرد اختبار محدد. إذا اختبرنا هنا بالفعل ، فسوف "يموت" Apache عند الطلبات البطيئة.

على الأرجح ، أريد أن أفهم ما إذا كنا بحاجة إليها أم لا.

متى يجب أن تفكر في التجميع؟

على الأرجح ، هذا ضروري في الحالة التي نرى فيها أن عنق الزجاجة لدينا هو وحدة المعالجة المركزية. إذا "واجهنا" وحدة المعالجة المركزية ، باستخدام PHP كمترجم قياسي ، فمن المحتمل أن يكون من المفيد التفكير في حقيقة أنه ، ربما ، يمكن تجميع جزء من المشروع.

في بعض الحالات التي تحتاج فيها إلى استقلالية تطبيقك للتشغيل ، من غير المحتمل أن تنجح هذه الطريقة.

تقليل عدد الخوادم. عندما يكون هناك الكثير من الخوادم ، فعن طريق خفض الأداء إلى النصف ، تقريبًا ، نقوم أيضًا بخفض العدد إلى النصف. عندما يكون خادمًا واحدًا ، فلا معنى له ، ولكن عندما يكون هناك 100-200 ، فمن المحتمل أن يكون ذلك منطقيًا.

السبب الرئيسي لبدء Facebook في استخدام HipHop هو وجود كميات كبيرة من أكواد PHP التي لا يمكن إعادة كتابتها (أو لا يوجد أحد ، أو أنها باهظة الثمن). تعد زيادة الإنتاجية بمقدار الضعف أمرًا جيدًا بالفعل.

ربما كل شيء. في انتظار الأسئلة.

أسئلة وأجوبة

سؤال من الجمهور:أهلا. من فضلك أخبرني إذا كان لديك أي أمثلة أخرى على تطبيقات Hiphop الناجحة إلى جانب Facebook. هل ترغب في نقل موقع ويب RBC ، على سبيل المثال ، إلى HipHop؟ أليكسي رومانينكو:سأبدأ مع الثاني. من الصعب ترجمة موقع RBC. حول التنفيذ الناجح. جمعت وحدة PHP بنفسي ، وتم تجميعها بنجاح. أيضًا ، على حد علمي ، يتم تجميع لوحة PHP Bunty بنجاح. عدد من المنظمات ، في الواقع ، تستخدم بالفعل التجميع. ستظهر الاختبارات الإضافية مدى تبرير استخدام هذا المشروع. سؤال من الجمهور:هل يمكنك إعطاء مثال على منظمة تستخدمه؟ أليكسي رومانينكو:بصراحة ، لن أخبرك الآن ، لكن هذا هو الغرب. بقدر ما أعرف ، لا أحد يستخدمه هنا. سؤال من الجمهور:ما الفرق في وقت التشغيل بخلاف عدم وجود دعم لبعض الميزات التي ذكرتها. ما مدى خطورة ترجمة مشروع حي؟ أليكسي رومانينكو:الفرق هو أن أي برنامج مترجم يمكن أن يتعطل. ربما ستظهر بعض المشاكل التي لم يتم تحديدها بعد. في الواقع ، هناك عدد من الاختلافات في "سلوك" لغة PHP نفسها. لم أذكرهم ، لأنه يمكن العثور على معلومات أكثر تفصيلاً في الوثائق. كتب فريق Facebook مترجمهم الخاص ، والذي يعادل في الواقع 99.9٪ المترجم الذي سيعمل في شكل مترجم. من الأفضل اختبار الكود الخاص بك ليس باستخدام مترجم PHP قياسي ، ولكن كما قلت ، hphpi لـ PHP.

يمكن إعادة بناء جميع برامج التحويل البرمجي لـ PHP المجانية المعروضة هنا نصوص PHPفي رمز الآلة الذي يمكن تشغيله على جهاز كمبيوتر دون تحميل مترجم PHP خاص ، أو تجميعها في واجهة سطر أوامر من خلال رمز ثنائي (للتثبيت ، تحتاج إلى NET أو Mono framework أو Java bytecode (حيث آلة افتراضيةجافا للتثبيت)).

يمكن أن تكون هذه المجمعات مفيدة لمجموعة متنوعة من الأغراض: يمكنهم تسريع تنفيذ البرنامج النصي الخاص بك لأنه لم يعد يتم تفسيرهم في وقت التشغيل ؛ أو بفضلهم ، يمكنك توزيع تطبيقاتك دون الكشف عن شفرة المصدر (التي تتطلبها البرامج النصية التجارية الأخرى). أعتقد أنهم يعملون أيضًا في الحالة التي يريد فيها شخص ما كتابة برامج PHP تعتمد على الإنترنت وتوزيعها باستخدام وظيفة سطح المكتب القابلة للتشغيل (على عكس تطبيقات الويب العادية التي تعمل على الخادم) ، كل هذا ممكن لأن PHP سهلة- لتعلم لغة البرمجة ، وفي جوهرها ، تحتوي على العديد من الوظائف المضمنة مع الوصول إلى الإنترنت. (في هذه الحالة ، يتعين عليك إما إعادة توزيع التطبيقات باستخدام خادم ويب مضمن ، أو استخدام مترجم يقوم بتجميع الخادم في تطبيقك.)

بالمناسبة ، إذا كنت تريد استخدام التعتيم في التعليمات البرمجية الخاصة بك ، فيجب أن تعلم أن هذا ممكن أيضًا عند استخدام مسرع PHP... تقدم هذه المسرعات أيضًا زيادة في سرعة تنفيذ البرنامج النصي الخاص بك.

معلومات مفيدة لأولئك الذين لا يعرفون ذلك بعد الرواية الرسميةيمكن تنزيل مترجم PHP من موقع PHP على الويب: معالج النص الفائق.

مترجمين PHP مجانيين لكتابة نصوص برمجية أصلية أو .NET أو Java bytecode.

بامبالام (جديد)

ينتج هذا البرنامج بشكل مستقل تطبيقات الويندوز EXE لشفرة مصدر PHP. إنه ليس مترجمًا حقيقيًا للكود الأصلي لأنه يقوم فقط بتشفير الكود المصدري ويتضمن مترجم PHP ، ولكن هذا البرنامج مناسب بالتأكيد للأشخاص الذين يبحثون عن مجمعين للكود الأصلي والبايت. بحلول الوقت الذي تمت فيه كتابة البرنامج بالكامل ، كانت بيئة التنفيذ الخاصة به مدمجة في PHP 4.4.4 (لم يتم تحديث البرنامج منذ عام 2006). الكود المصدري لـ Bambalam موجود في المجال العام.

فالنجر (لـ .NET)

يقوم Phalanger بترجمة كود PHP الخاص بك إلى CLI bytecode (.exe أو.dll). يمكن تشغيل هذا البرنامج من خلال .NET 4.0 أو Mono framework. يمكن أن يستخدم كود PHP أي كائنات .NET ومكتبات إضافية التمديد القياسيبي أتش بي. يمكن أن يكون تجميع NET الناتج إما موقعًا أو مخفيًا. هذا البرنامجتقوم أيضًا بإصدار قوالب لتمكنك من إنشاء تطبيقات PHP باستخدام Visual Studio. تم إصدار البرنامج بموجب ترخيص Apache.

HipHop لـ PHP (للرمز الأصلي)

يترجم HipHop كود PHP الخاص بك إلى كود C ++ ، والذي تم تجميعه لاحقًا باستخدام مترجم GNU C ++ ، إلى ملف تنفيذي كود ثنائي... يدعم المترجم جميع ميزات PHP 5.3 (بالطبع ، باستثناء شيء مثل تقييم ()). يعمل ويجمع التعليمات البرمجية لـ 64 بت Linux و FreeBSD. نظرًا لأن البرنامج موزع في شكل مصدر ، يجب عليك تجميعه يدويًا (بنفسك). تم إصداره بموجب ترخيص PHP.

Roadsend PHP (للرمز الأصلي).

ينتج مترجم Roadsend PHP ثنائيات الآلة (ملفات قابلة للتنفيذ) لنظامي التشغيل Windows و Linux. لا تقتصر البرامج النصية الخاصة بك على برامج وحدة التحكم ( سطور الأوامر): يمكن بناؤها باستخدام خوادم ويب مدمجة تسمح لها بالعمل بالطريقة التي تعمل بها على موقع الويب ، حتى لو كان موقعك كذلك. نظام مخصص... تم تحرير المترجم تحت رخصة جنو GPL وتشغيلها تحت GNU LGPL. لسوء الحظ ، توقف البرنامج عن تطويره النشط.

المشروع صفر (لجافا)

(ملاحظة: يبدو أن هذا البرنامج قد توقف عن العمل الآن. أصبح الموقع بعيد المنال لمدة نصف عام الآن.) يتضمن Project Zero مترجمًا و CLR يمكنه تجميع كود PHP الخاص بك إلى Java bytecode وتنفيذه. لاحظ أن Project Zero هو أكثر من مجرد مترجم PHP / وقت تشغيل ؛ إنه إطار عمل متقدم يسمح لك بتحسين تطبيقات الويب باستخدام PHP أو Groovy (لغة برمجة نصية أخرى). هذا المترجم متاح لأنظمة Windows و Mac OS X و Linux. للعمل مع هذا المترجم ، تحتاج إلى تنزيل Java Development Kit.

أي من المجمعين المقترحين تفضل؟ أو هل لديك مترجم مفضل آخر؟ اترك ملاحظاتك وتعليقاتك أدناه ، وسنقرأها بكل سرور ونعيدها.

العلامات: مترجمي PHP ، ترجمة البرنامج النصي

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

أدناه سنتحدث عن المجمعين الذين يسمحون لك بالتجميع كود phpفي C ++ ، وفي الملف القابل للتنفيذ. هكذا تطبيقات PHPيتم تنفيذها مباشرة بواسطة المعالج ، متجاوزًا المترجم.

دعنا نتحقق مما إذا كان كل شيء جيدًا في الممارسة.

كيف يعمل المترجم

هناك خطوتان لتفسير كود PHP:

  1. تحليل التعليمات البرمجية وإنشاء أكواد التشغيل (أكواد تشغيل Zend) - التعليمات التي يفهمها المترجم الفوري.
  2. تنفيذ أكواد التشغيل.

بينما تفسح المرحلة الأولى نفسها جيدًا للتحسين (باستخدام ذاكرة التخزين المؤقت لرمز التشغيل) ، فإن الثانية مغلقة نوعًا ما - يكون المترجم الفوري دائمًا وسيطًا بين مجموعة من التعليمات والمعالج الذي ينفذها. بدون مترجم ، لا يستطيع المعالج معرفة ما يجب فعله مع أكواد التشغيل.

للتخلص من رابط المترجم الفوري ، تم اختراع المجمعين ، وأشهرهم وأحدثهم هو HipHop من Facebook. دعونا نشعر به أقرب.

الهيب هوب PHP

تمت كتابة HipHop بواسطة مطوري Facebook وهو تطبيق:
  1. يحسن كود PHP
  2. يحول إلى C ++
  3. يولد من تطبيقك خادم ويب متعدد مؤشرات الترابط يقوم بتنفيذه
  4. يجمع إلى التعليمات البرمجية القابلة للتنفيذ باستخدام g ++

وبالتالي ، فإن كود PHP هو إدخال ، ومخرج الخادم هو جزء من الوظيفة المكتوبة.

دعنا نتحقق من كيفية تعامل HipHop مع تجميع تطبيق مكتوب باستخدام إطار عمل ، مثل Wordpress.

ترجمة وورد

بعد تثبيت HipHop في المجلد src / hphp / ، نحصل على ملف hphp ، وهو المترجم. قبل البدء في التجميع ، نضع متغيرات البيئة:

القرص المضغوط .. # انتقل إلى المجلد الذي يحتوي على تصدير hiphop HPHP_HOME = `pwd` تصدير HPHP_LIB =` pwd` / bin export CMAKE_PREFIX_PATH = `/ bin / pwd` /../

و اذهب!

قم بتنزيل Wordpress وفك ضغط الأرشيف:

Wget http://wordpress.org/latest.tar.gz tar zxvf latest.tar.gz

انسخ wp-config-sample.php إلى wp-config.php وحدد إعدادات الاتصال بقاعدة البيانات (في إعدادات المضيف ، حدد 127.0.0.1 ، وليس المضيف المحلي).

للحصول على تجميع ناجح ، تحتاج إلى تصحيح الووردبريس قليلاً:

  1. افتح wp-include / js / tinymce / plugins / spellchecker / class / SpellChecker.php واستبدل: function & loopback (/ * args .. * /) (return func_get_args () ؛) مع الوظيفة والاسترجاع (/ * args .. * /) ($ ret = func_get_args () ؛ إرجاع $ ret ؛)
  2. في wp-include / query.php ، بدلاً من if (! Isset ($ q ["suppress_filters"])) $ q ["suppress_filters"] = false؛ أدخل $ q ["suppress_filters"] = صحيح ؛

وورد بريس جاهز.

Hiphop "تحتاج إلى تحديد قائمة بالملفات التي سنقوم بتجميعها - احصل عليها واحفظها في files.list:

تجد. -name "* .php"> files.list

كل شيء جاهز للتجميع ، فلنبدأ:

$ HPHP_HOME / src / hphp / hphp --input-list = files.list -k 1 --log = 3 --force = 1 - cluster-count = 50

بعد الانتهاء من تنفيذ الأمر ، في المجلد المؤقت (في بداية الترجمة ، سيعرض hphp مساره ، شيء مثل "/ tmp / hphp_ptRgV1") سنحصل على خادم الويب المترجم. لنبدأ (إذا كان هناك شيء معلق في المنفذ 80 ، على سبيل المثال apache أو nginx - يجب عليك أولاً التوقف لتحرير المنفذ):

Sudo / tmp / hphp_6s0pzd / program -m server -v "Server.SourceRoot =` pwd` "-v" Server.DefaultDocument = index.php "-c $ HPHP_HOME / bin / mime.hdf

هاهو! بالانتقال إلى http: // localost ، سترى مدونة Wordpress تعمل.

أداء

دعونا نرى ما إذا كان سيكون هناك مكاسب في الأداء مقارنة بالإصدار غير المجمع من WordPress الذي يعمل على apache2. فيما يلي رسوم بيانية لاعتماد سرعة إنشاء الصفحة على عدد المستخدمين المتزامنين.

كما ترى ، فإن النتائج مروعة: تعمل المدونة المجمعة بمعدل 6 مرات أسرع! متوسط ​​عدد الطلبات المعالجة في الثانية في 9 غير المجمعة ، وفي 50 المترجمة! لا أعرف عنك ، لكن هذه النتائج أدهشتني ، لم أكن أتوقع مثل هذه الزيادة القوية في الأداء.

لخص

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

إلى هذا الموضوع:

إذا أعجبك المنشور - انقر فوق Google +1 - فسأكون متحمسًا أكثر لكتابة المزيد ولطيفة.

تأتي لغات البرمجة في نسختين: مترجم ومترجم. ما هي لغة PHP؟ للإجابة على هذا السؤال ، نحتاج إلى فهم المصطلحات.

يُطلق على البرنامج الذي يترجم التعليمات البرمجية المكتوبة بلغة برمجة إلى أخرى اسم المترجم. المترجم هو أيضًا مترجم. يترجم كود اللغة عالي المستوى إلى كود الآلة. تنشئ عملية التحويل البرمجي ملفًا ثنائيًا قابل للتنفيذ يمكن تشغيله بالفعل بدون مترجم.

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

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

بقدر ما يتعلق الأمر بلغة PHP ، فهي ليست مترجمًا ولا مترجمًا. PHP عبارة عن تقاطع بين مترجم ومترجم. دعنا نحاول معرفة ذلك ونرى كيف تعالج PHP الكود.

تأمل الصورة:

يمكننا أن نرى أن PHP تتكون من كتلتين شبه مستقلتين - مترجم ومترجم فوري. لماذا كنت بحاجة لفعل هذا؟ بالطبع لأسباب تتعلق بالأداء.

يتم تقديم النص كمدخلات إلى PHP. يترجمها (يترجمها) ، بفحص بناء الجملة ، إلى كود ثانوي خاص (تمثيل داخلي). ثم تقوم PHP بتنفيذ الرمز الثانوي (وليس رمز البرنامج نفسه) دون إنشاء ملف قابل للتنفيذ.

يعد Bytecode أكثر إحكاما من رمز البرنامج العادي ، لذلك من الأسهل (والأسرع) تفسيره (التنفيذ). احكم بنفسك: يتم إجراء التحليل مرة واحدة فقط في مرحلة الترجمة ، ويتم تنفيذ "المنتج شبه النهائي" بالفعل - رمز البايت ، وهو أكثر ملاءمة لهذه الأغراض. لذلك ، PHP هي مترجم أكثر من كونها مترجم. كان هذا "العمل المزدوج" ضروريًا للأغراض التالية.

ضع في اعتبارك حلقة:

لـ (أنا = 0 ؛ أنا<10; i++) { Operator_1; Operator_2; Operator_3; ............ Operator_99; Operator_100; }

هذه الدورة سوف "تدور" 10 مرات. لكل من هذه الممرات العشرة ، يجب على المترجم و 100 أسطر من التعليمات البرمجية. وفيه تحتاج إلى تحليل وتنفيذ 10 * 100 = 1000 سطر من التعليمات البرمجية! إذا قمت بترجمة الدورة بأكملها إلى رمز بايت مرة واحدة ، فسيتعين عليك تحليلها 10 مرات أقل! هذا يعني أن البرامج النصية ستعمل أسرع 10 مرات!

اتضح أن PHP هو.

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

من الجدير بالذكر أن PHP الإصدار 3 كان "مترجمًا" "خالصًا" ، ومنذ PHP 4 ، أصبحت البرامج النصية أسرع في التنفيذ ، حيث أن PHP 4 (و PHP5) مترجم مفسر.

تعمل لغة Perl ، التي يطلق عليها دائمًا اسم مترجم ، بنفس الطريقة تمامًا - فهي تترجم نص البرنامج إلى تمثيل داخلي ، ثم تستخدم الكود الناتج في وقت التشغيل. لذلك يمكنك القول أن PHP الإصدار 4 هو مترجم مثل Perl.

لذلك ، فنحن مضطرون لاستنتاج أن PHP هي مترجم مع كتلة ترجمة مضمنة تعمل على تحسين مسار الترجمة الفورية.

استخدام مترجم (وبالتالي PHP) له مزايا لا يمكن إنكارها:

  • لا داعي للقلق بشأن تحرير الذاكرة المخصصة ، فلا داعي لإغلاق الملفات عند الانتهاء من العمل معهم - سيتم تنفيذ جميع الأعمال الروتينية بواسطة المترجم الفوري ، حيث يتم تنفيذ البرنامج تحت سيطرته اليقظة ؛
  • لا تحتاج إلى التفكير في أنواع المتغيرات ، ولا تحتاج أيضًا إلى تعريف متغير قبل استخدامه لأول مرة ؛
  • يتم تبسيط برامج التصحيح واكتشاف الأخطاء إلى حد كبير - يتمتع المترجم الفوري بالسيطرة الكاملة على هذه العملية ؛
  • في سياق تطبيقات الويب ، يتمتع المترجم الفوري أيضًا بميزة مهمة جدًا - لا يوجد خطر من "تجميد" الخادم إذا لم يعمل البرنامج بشكل صحيح.

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

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

<<< Назад
(ما الجديد في PHP5؟)
المحتوى إلى الأمام >>>
(الترحيل إلى PHP 5.3)

إذا كان لديك المزيد من الأسئلة أو كان هناك شيء غير واضح - فمرحبا بكم في