تمپلیت‌انجین‌های PHP

مدتی قبل یه مقاله‌طوری در مورد PHP Template Engine نوشته بودم که متاسفانه هنوز هیچ‌جا منتشر نکردم. این مقاله خیلی تکمیل نیست و می‌شه بهتر بشه، ولی فعلا همین جوری می‌زارمش اینجا تا شاید برای کسی مفید باشه 🙂

 

تمپلیت انجین چیست؟

Template Engine (تمپلیت انجین) معمولاً با نام‌های موتور الگوی وب، موتور تمپلیت و موتور قالب وب معرفی می‌شود.

در اکثر معماری‌ها و ساختارهای برنامه‌نویسی پیشنهاد می‌شود لایه نمایشی جدا از دیگر لایه‌ها باشد. تمپلیت انجین امکان جداسازی کدهای لایه نمایشی را از منطق برنامه‌های تحت وب می‌دهد به طوری که منطق برنامه به صورت جداگانه‌ای از کدهای نمایشی، عملیات خود را انجام می‌دهند و به این ترتیب طراحان وب و برنامه‌نویسان به صورت جداگانه یک ساختار وب را طرحی می‌کنند.

در حال حاضر Template Engine‌های زیادی برای PHP وجود دارد که می‌توان به Blade, Mustache, Smarty, Twig, Haanga, PHPTAL, Dwoo, RainTPL, Savant, Volt اشاره کرد. در ادامه به بررسی و Benchmark هر کدام می پردازیم.

 

نمونه کد PHP برای لایه نمایشی:

 

نمونه کد تمپلیت انجین برای لایه نمایشی:

 

چرا از تمپلیت انجین استفاده کنیم؟

مزیتی که در تمپلیت انجین‌ها بیشتر مطرح می‌شود جداسازیfront-end از back-end می‌باشد و در زمان توسعه به توسعه‌دهنده‌های front-end امکانات و راحتی بیشتری می‌دهد، همچنین برنامه‌نویس back-end خودش را درگیر front-end نمی‌کند.

توسط تمپلیت‌انجین‌ها لایه نمایشی در پروژه به خوبی قابل کنترل است و برنامه‌نویس‌ها به راحتی آن را مدیریت می‌کنند.

مزیت مهم دیگری که می‌توان به آن اشاره کرد قابلیت استفاده از قالب‌های مختلف بر روی یک داده است، به طور مثال خروجی یک محتوا می‌تواند به حالت‌های مختلفی با رنگ‌بندی و طراحی‌های متفاوت ایجاد شود و یا حتی در قالب جداگانه به RSS و API‌های مختلف تبدیل شود.

مزیت دیگر امنیت بالاتر است به دلیل اینکه همه مقادیر قبل از درج در تمپلت می‌توانند escape شود.

همچنین ساده شدن عیب‌یابی را می‌توان یکی دیگر از مزیت‌ها و دلایل استفاده دانست.

 

نمونه کد PHP برای لایه نمایشی:

 

نمونه کد تمپلیت انجین برای لایه نمایشی:

 

مثال انعطاف‌پذیری در تمپلیت‌انجین:

 

معرفی برخی از تمپلیت انجین‌ها:
Blade: خودش را تمپلیت‌انجین ساده و در عین حال قدرت‌مند می‌داند، Blade در فرم‌ورک Laravel استفاده می‌شود.

نمونه تعریف تمپلیت توسط Blade:

نمونه استفاده از تمپلیت Blade:

 

Mustache: این تمپلیت انجین در زبان‌های مختلفی مانند Ruby, JavaScript, Python, Erlang, node.js, PHP, Perl, Objective-C, Java, C#/.NET, Android, C در دسترس است و با منطق پایینی کار می‌کند.

نمونه کد Mustache:

 

Smarty: یکی از معروف‌ترین تمپلیت‌انجین‌های PHP که با وجود قدیمی بودن همچنان با قدرت در حال پیشرفت است و تا کنون سه نسخه اصلی منتشر کرده است. در بین تمپلیت‌انجین‌ها محبویت خوبی دارد.

 

Twig: خودش را انعطاف پذیر، سریع و امن می‌داند و یکی از قدرتمند‌ترین‌ها است. به دلیل استفاده در فرم‌ورک Symfony و پشتیبانی توسط Fabien Potencier خیلی معروف شده است. همچنین در برنامه‌های زیادی مانند CMS دروپال نیز استفاده می‌شود.

 

Volt: توسط زبان C برای PHP نوشته شده است و سرعت خوبی دارد. فرم‌ورک Phalcon نیز از این تمپلیت‌ انجین استفاده می‌کند.

Dwoo: در اوایل سال ۲۰۰۸ شروع به کار کرد و یکی از تمپلیت‌ انجین‌های قدیمی است. تا کنون دو نسخه استیبل داشته است.

RainTPL: تمپلیت انجین بسیار ساده که بر روی راحتی تمرکز دارد و خیلی سریع و راحت می‌توان آن را آموخت.

Haanga: از سینتکس Django استفاده می‌کند. در ابتدا به سفارش Menéame (شبکه اجتماعی اسپانیایی با محوریت خبر) ساخته شده بود ولی بعد از آن در دسترس عمومی قرار گرفته است. معروف نیست ولی یکی از تمپلیت‌ انجین‌هایی است که حافظه کمی مصرف می‌کند.

 

مقایسه و Benchmark تمپلیت‌انجین‌ها:
تمپلیت‌انجین‌های زیادی وجود دارد که برخی ساده‌تر و دارای امکانات کمتری هستند و در نتیجه سبک‌تر هستند و برخی نیز امکانات‌ بیشتری دارند و این باعث می‌شود سنگین‌تر شوند. به همین دلیل نمی‌توانیم سبک بودن تمپلیت را ملاک بر بهتر بودن آن بدانم چون ممکن است یک تمپلیت انجین امکانات مهمی را نداشته باشد و این باعث سبک شدن آن شود. بهتر است نسبت به پروژه و ابعاد آن همچنین امکاناتی که نیاز داریم تمپلیت‌انجین مورد نظر را انتخاب کنیم.

تمپلیت انجین Dwoo، بنچ‌مارکی را در سایت رسمی خود، از برخی از تمپلیت‌انجین‌ها منتشر کرده است که در کد آن‌ها حلقه‌های تستی وجود داشت.

Execution time

Memory

Engine

10507

317 KB

dwoo 1.1.1

2845

73 KB

haanga 1.0.4

650

36 KB

php 5.5.3

6699

327 KB

phptal 1.2.2

4234

280 KB

raintpl 2.7.0

3172

102 KB

savant 3.0.1

10675

1 MB

smarty 3.1.11

14255

610 KB

twig 1.12.2

8134

666 KB

twig 1.5.1

 

با اضافه کردن کد زیر به پایین کد‌های نمونه‌ای که در مثال‌های تمپلیت‌انجین‌ها نوشته بودیم می‌توانیم چنین تست مشابهی همانند جدول بالا ایجاد کنیم تا Benchmark آن‌ها را از نظر مقدار مصرف حافظه و زمان اجرا بررسی کنیم.

در ابتدای کدها اضافه می‌کنیم:

 

در انتهای کدها اضافه می‌کنیم:

 

 

Smarty

Twig

0.684497

0.598434

Memory

50 Rows

0.023710

0.025444

Time

0.685134

0.619461

Memory

1000 Rows

0.023761

0.028100

Time

 

مقایسه دیگری که می‌توان بر روی تمپلیت‌انجین‌ها انجام داد بر روی امکانات آن‌ها می‌باشد، به طور مثال در جدول زیر پشتیبانی از چندزبانه بودن بررسی شده است.

i18n

Engine

Yes

CodeCharge Studio

Dwoo

Histone template Engine

MiniTemplator

Yes

Mustache

RainTPL

Yes

Smarty

StringTemplate

Yes

Twital

Yes

Tonic

Yes

Twig

vlibTemplate

همچنین مجوز تمپلیت‌‌انجین‌ها در جدول زیر وجود دارد.

License

Engine

Proprietary

CodeCharge Studio

BSD License

Dwoo

Apache License

Histone template Engine

GNU LGPL

MiniTemplator

MIT License

Mustache

GNU LGPL

RainTPL

GNU LGPL

Smarty

BSD[2]

StringTemplate

open-source

Twital

BSD

Tonic

BSD

Twig

Artistic License

vlibTemplate

 

منابع:

  • http://www.sitecrafting.com/blog/top-5-php-template-engines/
  • http://www.sitecrafting.com/blog/top-5-php-template-engines/
  • http://laravel.com/docs/5.1/blade
  • http://mustache.github.io/
  • https://github.com/bobthecow/mustache.php
  • http://www.smarty.net/
  • http://twig.sensiolabs.org/
  • https://docs.phalconphp.com/en/latest/reference/volt.html
  • http://dwoo.org/
  • http://fabien.potencier.org/templating-engines-in-php.html
  • http://9px.ir/learn/what-is-a-template-engine/
  • http://stackoverflow.com/questions/436014/why-should-i-use-templating-system-in-php
  • http://gonzalo123.com/2011/01/17/php-template-engine-comparison/
  • https://github.com/rainphp/raintpl3
  • http://dwoo.org/benchmark/loop/