не нужно подгружать смартивские 300 кб кода смарти шаблон PHP: <?php /* Smarty version 2.6.18, created on 2008-10-08 17:07:43 compiled from shot_text.tpl */ ?> <?php $_from = $this->_tpl_vars['result']; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); }if (count($_from)): foreach ($_from as $this->_tpl_vars['key'] => $this->_tpl_vars['val']): ?> <table width=80% border=1 align=center> <tr> <td> Name <a href="/<?php echo $this->_tpl_vars['val']['id_cat']; ?> /<?php echo $this->_tpl_vars['val']['id_post']; ?> .html"><?php echo $this->_tpl_vars['val']['name']; ?> (<?php echo $this->_tpl_vars['val']['numcomment']; ?> )</a><br> Text <?php echo $this->_tpl_vars['val']['full_text']; ?> <br> data <?php echo $this->_tpl_vars['val']['data']; ?> <br> pass <?php echo $this->_tpl_vars['val']['macros']['pass']; ?> <br> link <?php echo $this->_tpl_vars['val']['macros']['link']; ?> <br> fulllink: <?php $_from = $this->_tpl_vars['val']['fullcat']; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); }if (count($_from)): foreach ($_from as $this->_tpl_vars['k'] => $this->_tpl_vars['v']): ?> <a href="/<?php echo $this->_tpl_vars['k']; ?> /" ><?php echo $this->_tpl_vars['v']; ?> </a> > <?php endforeach; endif; unset($_from); ?> <br> <?php if ($this->_tpl_vars['val']['adm_fulleditpost']): ?><a href="<?php echo $this->_tpl_vars['val']['adm_fulleditpost']; ?> ">[ Полный Редактор Публикаций ]</a><?php endif; ?> <a href="<?php echo $this->_tpl_vars['val']['adm_editpost']; ?> ">[ Изменить ]</a> || <a href="<?php echo $this->_tpl_vars['val']['adm_delpost']; ?> ">[ Удалить ]</a> </td> </table> <?php endforeach; endif; unset($_from); ?> <br> <?php echo $this->_tpl_vars['page']; ?> пхп натив PHP: <?for($i=0,$c=count($result);$i<$c;$i++){?> <table width=80% border=1 align=center> <tr> <td> Name <a href="/<?=$result[$i]['id_cat'];?>/<?=$result[$i]['id_post'];?>.html"><?=$result[$i]['name'];?> (<?=$result[$i]['numcomment'];?>)</a><br> Text <?=$result[$i]['full_text'];?><br> data <?=$result[$i]['data'];?><br> pass <?=$result[$i]['macros']['pass'];?><br> link <?=$result[$i]['macros']['link'];?><br> fulllink: <?foreach ($result[$i]['fullcat'] as $k=>$v){?> <a href="/<?=$k;?>/" ><?=$v;?></a> > <?}?> <br> <?if ($result[$i]['adm_fulleditpost']){?><a href="<?=$result[$i]['adm_fulleditpost'];?>">[ Полный Редактор Публикаций ]</a><?}?> <a href="<?=$result[$i]['adm_editpost'];?>">[ Изменить ]</a> || <a href="<?=$result[$i]['adm_delpost'];?>">[ Удалить ]</a> </td> </table> <?}?> <br> <?=$page;?> хотя правдо странно, действительно не такие уж и большие различия, а скорость резко возросла... но это факт =)
MiksIr Потому что это целая процедура инициализации. А когда таких плагинов десятками? Mr.M.I.T. Имхо, оптимизация собирается из мелочей. Убралась большая часть Smarty. Во вторых, прямой доступ к массиву быстрее чем через объекты. + у тебя for а не foreach, что тоже даёт определённые преимущества в скорости. К тому же ты не копируешь массивы, как это делается в шаблоне Smarty, что тоже весьма не мало важно. Поиграйся вокруг этих вариантов, поймёшь что является причиной тормозов
во вообщем =) PHP: <? class tpl { public $tpldir,$opt; private $vars,$tplcache,$globalvars,$cachedir; function __construct($tpldir) { $this->tpldir=$tpldir; $this->cachedir="sis/cache"; if ($this->opt['cache_dir'])$this->cachedir=$this->opt['cache_dir']; } function set($name,$value=0) { if (!is_array($name)) { $this->vars[$name]=$value; }else if(is_array($name) && count($name)) { foreach($name as $key=>$val) { $this->vars[$key]=$val; } }else { trigger_error("Ошибка: Не указано значение переменной", E_USER_ERROR); } } function set_global($name,$value=0) { if (!is_array($name)) { $this->globalvars[$name]=$value; }else if(is_array($name) && count($name)) { foreach($name as $key=>$val) { $this->globalvars[$key]=$val; } }else { trigger_error("Ошибка: Не указано значение переменной", E_USER_ERROR); } } function load($tplname,$cacheon=false) { if (!$this->tplcache[$tplname]) { $fp=@file_get_contents($this->tpldir.'/'.$tplname); if ($fp) { $fp=get_magic_quotes_gpc()?stripslashes($fp):$fp; $this->tplcache[$tplname]=$fp; } }else { $fp=$this->tplcache[$tplname]; } if (!$fp) trigger_error("Ошибка: Шаблон ".$this->tpldir.'/'.$tplname." не найден",E_USER_ERROR); extract($this->vars); $_GLOBALS=$this->globalvars; ob_start(); eval("?".">".$fp."<?"); $res=ob_get_contents(); ob_clean(); if ($this->opt['cache_on'] || $cacheon) $this->cache_save($tplname,$res); return $res; } function clear() { $this->vars=array(); } function is_cached($tplname) { $fd=$this->cachedir.'/'.md5($_SERVER['REQUEST_URI']).$tplname.'.ch'; if (file_exists($fd) && time()-filemtime($fd)<=$this->opt['cache_time']){ return true; }else{ if (file_exists($fd)) unlink($fd); return false; } } function get_cache($tplname) { $fd=$this->cachedir.'/'.md5($_SERVER['REQUEST_URI']).$tplname.'.ch'; return file_get_contents($fd); } private function cache_save($tplname,$res) { if (@file_put_contents($this->cachedir.'/'.md5($_SERVER['REQUEST_URI']).$tplname.".ch",$res)) { }else { trigger_error("Ошибка: Не могу кешировать шабло $tplname в папку $dir",E_USER_ERROR); } } } ?> да, плевать на причину, пусть афторы смарти разбираются, главное результат!
мож я тормоз, но нэйтив это когда инклудится html со вставками <?php ... ?> или как? Елс да тогда почему Psih native это гавно?
инициализация - это инклуд файла и вызов функци из него? ну, классов тоже много бывает, и все они инклудятся, инклудятся ))
Плагин вряд ли просто так инклюдится - он ещё регистрируется в системе что такой есть. Так что хочешь-нехочешь, а он скорее всего перебирает всё что есть в папке с плагинами. А это просто капец извините за мой французкий.
А_а бла_А ..... так надож в кавычки тогда "Native PHP гавно, неудобно, некрасиво!", ну как я понял это типа цитата... ты ж всё время за найтив был.
Psih, ну это нужно смотреть. В конце концов, перебор плагинов - это ошибки логики... их можно исправлять. Что ж делать, любой продукт не идеален. Я вот не вижу причины, почему сматри нужно сразу все плагины сканить. Да и потом, вы можете написать в одном файле все функции и поподключать их при инициализации смарти руками. Вот и не будет файлов, если они пугают. В общем, это все механизмы... а определяют все не они, а руки.
Короче я думаю ваще в топку Smarty, потому что они признали свой позор. Теперь всем стало понятно что они писали 1с на 1с...