باختيار محرك قالب لمشروع المذنب ، قررت مقارنة جميع المحركات الشائعة في مجتمع PHP. عادة ما يملي هذا الخيار من خلال الإطار: سيقوم السيمفوني بتغليف القوالب في Twig ، سيقوم مبرمج Laravel بتسليح نفسه بـ Blade. لكني كنت مهتمًا بالسؤال - كيف تختلف هذه الخيارات من حيث الأداء؟ بعد اختبار سبعة محركات و PHP النقي ، حصلت على إجابة. البيانات والجداول والأبطال والخاسرين - تحت الخفض!
وأشار إلى أسماء كبار المتقدمين ؛ وجد الباقي ، مسلحًا بإحصاءات GitHub ومناقشات حول Reddit. إليك القائمة:Smarty: github.com/smarty-php/smartyPlates: github.com/thephpleague/platesشارب: github.com/bobthecow/mustache.phpTwig: github.com/twigphp/TwigBlade: github.com / jenssegers / شفرةBladeOne: github.com/EFTEC/BladeOneاتيه: github.com/nette/latteإذا كنت تعرف خيارا مهما - الكتابة، وأود أن أضيف على المحك. إن Blade مندمجة إلى حد كبير في Laravel ، لذلك كان عليّ أن أقوم ببعض عمليات التنفيذ المستقلة. لسوء الحظ ، لا يدعم أي منها مكونات Blade-X.لفهم جوهر المعيار ، أسهل طريقة هي النظر إلى نسخة الكود مع PHP الخالص:$data = [
(object) [
"code" => 200,
"message" => "OK"
],
(object) [
"code" => 404,
"message" => "Not Found"
],
(object) [
"code" => 500,
"message" => "Internal Server Error"
],
];
$html = '<html><head></head><body>';
foreach ($data as $message) {
$html .= "<p>$message->code : $message->message</p>";
}
$html .= '</body></html>';
هذا اختبار اصطناعي لإخراج صفيف من ثلاثة كائنات في قالب HTML يحتوي على خاصيتين: كود HTML ووصفه المختصر.هذا ما يبدو عليه التناظرية على Twig:<html><head></head><body>
{% for message in data %}
<p>{{ message.code }} : {{ message.message }}</p>
{% endfor %}
</body></html>
وهذه شفرة:<html><head></head><body>
@foreach ($data as $message)
<p>{{ $message->code }} : {{ $message->message }}</p>
@endforeach
</body></html>
تم تشغيل الاختبارات في حاوية Ubuntu 20.04 / PHP 7.4 / Comet 0.6 على جهاز افتراضي مع 4 Ryzen 3600 نوى وذاكرة 4G:wrk --connections=500 --threads=2 --duration=10s http:
ظهر هذا الوضع ، حيث يعكس كل رسم بياني متوسط عدد الطلبات التي تمت معالجتها بنجاح في ثانية واحدة:
Pure PHP - متوقع أولاً ، ولكن بشكل غير متوقع ، أن Blade متأخر بالفعل عن النصف! ولماذا تتأخر لوحات "خفيفة الوزن" وراء غصين "قوي"؟ تستخدم جميع الأطر التخزين المؤقت المنتظم ، لذا تكون النتائج قريبة قدر الإمكان من تلك الموجودة بالفعل.في إطار مقال واحد ، لم أرغب في زيادة التحميل على القارئ بتحليل موسع للكود ، واستراتيجيات العمل ، والتخزين المؤقت للمحركات ، وتحليل معايير اختيار محرك القالب الذي يهمني. إذا كان الموضوع مثيرًا للاهتمام - سأكتب تكملة.كإعلان: انظر إلى Comet ، في المستقبل القريب - لجعله إطار PHP الأسرع والأكثر ملاءمة لإنشاء واجهات برمجة تطبيقات وخدمات صغيرة مريحة :)