август 6

Evangelizing Smarty…

Днес ми мина през главата, че по-рано тази година „проповядвах“ Smarty в коментарите на един блог, и ми стана интересно в каква посока е отишла дискусията. За начало всичко беше тръгнало по заядливо-арогантния начин, който е толкова присъщ за интернет (познахте ли се, „интернет гущери“, хаха), и се радвам, че моята позиция внесе един маалко по-умерен тон (аз самия се „шлайфам“ да се оттърва от припряността и арогантността, така ще разберете защо постигнатия добър тон ме радва). Типично за мене коментарите ми са пълни с правописни, стилистично и граматично грешки. Както и да е, сега имам още аргументи, които сега реших да публикувам на блога като форма на разкаяние, че самия аз преди години бях „A Smarty Basher“ :) Признавам си. Моята глава е (или по-скоро беше) много дебела, и някои неща (или по-скоро повечето) се учат с бой практика, а не като умните глави – с прочитането на теорията. Любимият на всички „Първи Дубъл“ е правен на един античен template-engine (а сега, как се превежда това на български), който беше взаимстван и леко подобрен от този който ползвахме на работа, и който меко казано беше елементарен като кройка на цвичка и се скъсваше да прави preg_replace(); за да засади данните по местата им. После, предказармено, направих един нов template-engine, който после се оказа и публикуван на PHP-Classes.org, и с който в момента не съм особенно горд, като се изключат малкото му плюсове като тов, че маха излишните интервали, и че беше причина Данчо да ме включи в credits на дипломния му проект. Накрая на историята ето ни работим с PHP5 и Smarty, и сме недоволни само от ниското качество на хората, които кандидатсват при нас.

FlickrНие обаче не сме най-великите и най-известните. Добър аргумент за практическото приложение на Smarty е Flickr (за момент ще си затворим очите за факта, че освен Smarty се ползва и PHP4). Това е един наистина огромен heavy-duty сайт, и като съм гледал какви чудесии са правили за да оптимизират performance-а на MySQL, съм убеден, че са избрали Smarty, защото е едно от най-бързите и едновременно удобни решения:

От написаните коментари след мен изглежда само една точка не е пояснена.

„…А би ли ми описал един примерен алгоритъм за това как става тая проверка. Щото аз си го представям като – компилирай некомпилираното и виж дали съвпадат. Или ако не е толкова грубо е нещо подобно. И идеята ми е именно – за чий чеп ти трябва тая проверка, като в крайна сметка стигаме тъй или иначе до инклуда?…“ (Georgi Mateev)

Smarty има настройка за това – дали да проверява или не оригиналните шаблони (пояснение за американизираните – това са templates) за налагащи се промени на компилираните копия. По време на разработка, когато шаблоните се променят всеки едн, тази настройка е включена, и наистина преди всяко рендиране се проверява дали шаблона е бутан. Не се наемам да обеснявам как, защото това не съм го проверявал (мисля си, че е по датата на файла, а не съдържанието му), но изглежда и за целта на дискусията няма да е важно, понеже още сета ще се съглася с другата страна и ще кажа, че това наистина дава overhead. Сега, проектът е приключен, с което приключват промените на шаблоните. Преди да го пуснем да работи като истински сайт изключваме настройката за която говорихме, наред с редица други, за да нагласим проекта да работи не като за development, ами като истински сайт. Сега се прави проверка само дали има компилирано копие – и ако има, то се include-ва, а ако няма – създава си и на ново се include-ва. Ето как се маха overhead-а. Ако случайно промениш оригиналния шаблон, Smarty няма да се усети да прекомпилира – понеже както вече казах въпросната настройка е изключена. В тази ситуация за да предизвикаш прекомпилиране трябва да изтриеш компилираното копие. Eто го и на Smarty страницата (подчертал съм важното):

Smarty::$compile_check

Upon each invocation of the PHP application, Smarty tests to see if the current template has changed (different time stamp) since the last time it was compiled. If it has changed, it recompiles that template. If the template has not been compiled, it will compile regardless of this setting. By default this variable is set to TRUE.

Once an application is put into production (ie the templates won’t be changing), the compile check step is no longer needed. Be sure to set $compile_check to FALSE for maximal performance. Note that if you change this to FALSE and a template file is changed, you will *not* see the change since the template will not get recompiled

http://smarty.php.net/…/variable.compile.check.php

Ами това е. Като цяло поддържам старото си мнение всеки да ползва каквото му е удобно. Все пак, прекарайте малко време да прочетете нещата за Smarty, защото може наистина да ви се окаже полезен.

5 коментара »

  1. шаблонен двигател?

    Comment by Алек — август 6 @ 23:42

  2. На мен ми харесва „шаблонна фурна“, или „фурна за шаблони“, понеже там се `изпичат` резултатите :)

    Comment by Kaloyan — август 7 @ 08:32

  3. Методи за верификация, колкото искаш… темплейт енджъни колкото искаш…фреймуъркс..колкото искаш..всичко опира до scale-а на application-a които разработваш :)

    ПС: с това подркрепям на 50%та мнението на Калоян – ползвай това което мислиш че ще ти свърши работа :)

    Comment by Любомир Петров — август 27 @ 01:21

  4. О, да. :) Всеки да ползва каквото си иска и каквото му е най-удобно. Аз лично предпочитам една хубава библиотека от класове, които съм пипал и оптимирал, отколкото нещо оупънсорс пипано от не знам си кого и със сума ти overhead. Пък и виж какъв готин линкбейт стана :) А т’ва с dir.bg беше най-якото нещо, което съм виждал :)

    П.С. dir.bg НЕ е мащабен сайт.DB-то му е мащабно.

    Comment by Георги Матеев — септември 28 @ 18:11

  5. Браво, най накрая добри думи за смарти ;)

    Comment by Manol Trendafilov — ноември 7 @ 01:25

RSS хранилка за коментарите по тази публикация. TrackBack URI

Вашият коментар