Evangelizing Smarty…
Ð”Ð½ÐµÑ Ð¼Ð¸ мина през главата, че по-рано тази година „проповÑдвах“ Smarty в коментарите на един блог, и ми Ñтана интереÑно в каква поÑока е отишла диÑкуÑиÑта. За начало вÑичко беше тръгнало по заÑдливо-Ð°Ñ€Ð¾Ð³Ð°Ð½Ñ‚Ð½Ð¸Ñ Ð½Ð°Ñ‡Ð¸Ð½, който е толкова приÑъщ за интернет (познахте ли Ñе, „интернет гущери“, хаха), и Ñе радвам, че моÑта Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ Ð²Ð½ÐµÑе един маалко по-умерен тон (аз ÑÐ°Ð¼Ð¸Ñ Ñе „шлайфам“ да Ñе оттърва от припрÑноÑтта и арогантноÑтта, така ще разберете защо поÑÑ‚Ð¸Ð³Ð½Ð°Ñ‚Ð¸Ñ Ð´Ð¾Ð±ÑŠÑ€ тон ме радва). Типично за мене коментарите ми Ñа пълни Ñ Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸Ñни, ÑтилиÑтично и граматично грешки. Както и да е, Ñега имам още аргументи, които Ñега реших да публикувам на блога като форма на разкаÑние, че ÑÐ°Ð¼Ð¸Ñ Ð°Ð· преди години бÑÑ… „A Smarty Basher“ :) Признавам Ñи. МоÑта глава е (или по-Ñкоро беше) много дебела, и нÑкои неща (или по-Ñкоро повечето) Ñе учат Ñ Ð±Ð¾Ð¹ практика, а не като умните глави – Ñ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ð½ÐµÑ‚Ð¾ на теориÑта. ЛюбимиÑÑ‚ на вÑички „Първи Дубъл“ е правен на един античен template-engine (а Ñега, как Ñе превежда това на българÑки), който беше взаимÑтван и леко подобрен от този който ползвахме на работа, и който меко казано беше елементарен като кройка на цвичка и Ñе ÑкъÑваше да прави preg_replace();
за да заÑади данните по меÑтата им. ПоÑле, предказармено, направих един нов template-engine, който поÑле Ñе оказа и публикуван на PHP-Classes.org, и Ñ ÐºÐ¾Ð¹Ñ‚Ð¾ в момента не Ñъм оÑобенно горд, като Ñе изключат малкото му плюÑове като тов, че маха излишните интервали, и че беше причина Данчо да ме включи в credits на Ð´Ð¸Ð¿Ð»Ð¾Ð¼Ð½Ð¸Ñ Ð¼Ñƒ проект. ÐÐ°ÐºÑ€Ð°Ñ Ð½Ð° иÑториÑта ето ни работим Ñ PHP5 и Smarty, и Ñме недоволни Ñамо от ниÑкото качеÑтво на хората, които кандидатÑват при наÑ.
Ðие обаче не Ñме най-великите и най-извеÑтните. Добър аргумент за практичеÑкото приложение на 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…
Ðми това е. Като цÑло поддържам Ñтарото Ñи мнение вÑеки да ползва каквото му е удобно. Ð’Ñе пак, прекарайте малко време да прочетете нещата за Smarty, защото може наиÑтина да ви Ñе окаже полезен.
шаблонен двигател?
Comment by Ðлек — август 6 @ 23:42
Ðа мен ми хареÑва „шаблонна фурна“, или „фурна за шаблони“, понеже там Ñе `изпичат` резултатите :)
Comment by Kaloyan — август 7 @ 08:32
Методи за верификациÑ, колкото иÑкаш… темплейт енджъни колкото иÑкаш…фреймуъркÑ..колкото иÑкаш..вÑичко опира до scale-а на application-a които разработваш :)
ПС: Ñ Ñ‚Ð¾Ð²Ð° подркрепÑм на 50%та мнението на КалоÑн – ползвай това което миÑлиш че ще ти Ñвърши работа :)
Comment by Любомир Петров — август 27 @ 01:21
О, да. :) Ð’Ñеки да ползва каквото Ñи иÑка и каквото му е най-удобно. Ðз лично предпочитам една хубава библиотека от клаÑове, които Ñъм пипал и оптимирал, отколкото нещо оупънÑÐ¾Ñ€Ñ Ð¿Ð¸Ð¿Ð°Ð½Ð¾ от не знам Ñи кого и ÑÑŠÑ Ñума ти overhead. Пък и виж какъв готин линкбейт Ñтана :) Ð Ñ‚’ва Ñ dir.bg беше най-Ñкото нещо, което Ñъм виждал :)
П.С. dir.bg ÐЕ е мащабен Ñайт.DB-то му е мащабно.
Comment by Георги Матеев — септември 28 @ 18:11
Браво, най Ð½Ð°ÐºÑ€Ð°Ñ Ð´Ð¾Ð±Ñ€Ð¸ думи за Ñмарти ;)
Comment by Manol Trendafilov — ноември 7 @ 01:25