За последние 24 часа нас посетили 15798 программистов и 1541 робот. Сейчас ищут 747 программистов ...

Smarty 3

Тема в разделе "Прочие вопросы по PHP", создана пользователем флоппик, 19 окт 2008.

  1. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    не нужно подгружать смартивские 300 кб кода
    смарти шаблон
    PHP:
    1. <?php /* Smarty version 2.6.18, created on 2008-10-08 17:07:43
    2.          compiled from shot_text.tpl */ ?>
    3. <?php $_from = $this->_tpl_vars['result']; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); }if (count($_from)):
    4.     foreach ($_from as $this->_tpl_vars['key'] => $this->_tpl_vars['val']):
    5. ?>
    6. <table width=80% border=1 align=center>
    7. <tr>
    8. <td>
    9. Name <a href="/<?php echo $this->_tpl_vars['val']['id_cat']; ?>
    10. /<?php echo $this->_tpl_vars['val']['id_post']; ?>
    11. .html"><?php echo $this->_tpl_vars['val']['name']; ?>
    12.  (<?php echo $this->_tpl_vars['val']['numcomment']; ?>
    13. )</a><br>
    14. Text <?php echo $this->_tpl_vars['val']['full_text']; ?>
    15. <br>
    16. data <?php echo $this->_tpl_vars['val']['data']; ?>
    17. <br>
    18. pass <?php echo $this->_tpl_vars['val']['macros']['pass']; ?>
    19. <br>
    20. link <?php echo $this->_tpl_vars['val']['macros']['link']; ?>
    21. <br>
    22. fulllink:
    23.    <?php $_from = $this->_tpl_vars['val']['fullcat']; if (!is_array($_from) && !is_object($_from)) { settype($_from, 'array'); }if (count($_from)):
    24.     foreach ($_from as $this->_tpl_vars['k'] => $this->_tpl_vars['v']):
    25. ?>
    26.          <a href="/<?php echo $this->_tpl_vars['k']; ?>
    27. /" ><?php echo $this->_tpl_vars['v']; ?>
    28. </a> >
    29.    <?php endforeach; endif; unset($_from); ?>
    30. <br>
    31. <?php if ($this->_tpl_vars['val']['adm_fulleditpost']): ?><a href="<?php echo $this->_tpl_vars['val']['adm_fulleditpost']; ?>
    32. ">[ Полный Редактор Публикаций ]</a><?php endif; ?> <a href="<?php echo $this->_tpl_vars['val']['adm_editpost']; ?>
    33. ">[ Изменить ]</a> ||  <a href="<?php echo $this->_tpl_vars['val']['adm_delpost']; ?>
    34. ">[ Удалить ]</a>
    35. </td>
    36. </table>
    37. <?php endforeach; endif; unset($_from); ?>
    38. <br>
    39. <?php echo $this->_tpl_vars['page']; ?>
    40.  
    пхп натив
    PHP:
    1. <?for($i=0,$c=count($result);$i<$c;$i++){?>
    2. <table width=80% border=1 align=center>
    3. <tr>
    4. <td>
    5. Name <a href="/<?=$result[$i]['id_cat'];?>/<?=$result[$i]['id_post'];?>.html"><?=$result[$i]['name'];?> (<?=$result[$i]['numcomment'];?>)</a><br>
    6. Text <?=$result[$i]['full_text'];?><br>
    7. data <?=$result[$i]['data'];?><br>
    8. pass <?=$result[$i]['macros']['pass'];?><br>
    9. link <?=$result[$i]['macros']['link'];?><br>
    10. fulllink:
    11.    <?foreach ($result[$i]['fullcat'] as $k=>$v){?>
    12.          <a href="/<?=$k;?>/" ><?=$v;?></a> >
    13.    <?}?>
    14. <br>
    15. <?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>
    16. </td>
    17. </table>
    18. <?}?>
    19. <br>
    20. <?=$page;?>
    21.  
    хотя правдо странно, действительно не такие уж и большие различия, а скорость резко возросла...
    но это факт =)
     
  2. dwoo.org попробуй?
     
  3. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    MiksIr
    Потому что это целая процедура инициализации. А когда таких плагинов десятками?

    Mr.M.I.T.
    Имхо, оптимизация собирается из мелочей. Убралась большая часть Smarty. Во вторых, прямой доступ к массиву быстрее чем через объекты. + у тебя for а не foreach, что тоже даёт определённые преимущества в скорости. К тому же ты не копируешь массивы, как это делается в шаблоне Smarty, что тоже весьма не мало важно.
    Поиграйся вокруг этих вариантов, поймёшь что является причиной тормозов :)
     
  4. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    сделал кеширование,
    результат 0.007
    ваащее, вот только кеш приходится часто обновлять...
     
  5. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    во вообщем =)
    PHP:
    1. <?
    2. class tpl {
    3. public $tpldir,$opt;
    4. private $vars,$tplcache,$globalvars,$cachedir;
    5.   function __construct($tpldir) {
    6.       $this->tpldir=$tpldir;
    7.       $this->cachedir="sis/cache";
    8.       if ($this->opt['cache_dir'])$this->cachedir=$this->opt['cache_dir'];
    9.   }
    10.   function set($name,$value=0) {
    11.       if (!is_array($name)) {
    12.           $this->vars[$name]=$value;
    13.       }else if(is_array($name) && count($name)) {
    14.           foreach($name as $key=>$val) {
    15.               $this->vars[$key]=$val;
    16.           }
    17.       }else {
    18.           trigger_error("Ошибка: Не указано значение переменной", E_USER_ERROR);
    19.       }
    20.   }
    21.   function set_global($name,$value=0) {
    22.       if (!is_array($name)) {
    23.           $this->globalvars[$name]=$value;
    24.       }else if(is_array($name) && count($name)) {
    25.           foreach($name as $key=>$val) {
    26.               $this->globalvars[$key]=$val;
    27.           }
    28.       }else {
    29.           trigger_error("Ошибка: Не указано значение переменной", E_USER_ERROR);
    30.       }
    31.   }
    32.   function load($tplname,$cacheon=false) {
    33.        if (!$this->tplcache[$tplname]) {
    34.            $fp=@file_get_contents($this->tpldir.'/'.$tplname);
    35.            if ($fp) {
    36.                $fp=get_magic_quotes_gpc()?stripslashes($fp):$fp;
    37.                $this->tplcache[$tplname]=$fp;
    38.            }
    39.        }else {
    40.            $fp=$this->tplcache[$tplname];
    41.        }
    42.        if (!$fp) trigger_error("Ошибка: Шаблон ".$this->tpldir.'/'.$tplname." не найден",E_USER_ERROR);
    43.         extract($this->vars);
    44.         $_GLOBALS=$this->globalvars;
    45.       ob_start();
    46.         eval("?".">".$fp."<?");
    47.        $res=ob_get_contents();
    48.        ob_clean();
    49.        if ($this->opt['cache_on'] || $cacheon) $this->cache_save($tplname,$res);
    50.        return $res;
    51.   }
    52.   function clear() {
    53.       $this->vars=array();
    54.   }
    55.   function is_cached($tplname) {
    56.     $fd=$this->cachedir.'/'.md5($_SERVER['REQUEST_URI']).$tplname.'.ch';
    57.     if (file_exists($fd) && time()-filemtime($fd)<=$this->opt['cache_time']){
    58.         return true;
    59.     }else{
    60.         if (file_exists($fd)) unlink($fd);
    61.         return false;
    62.     }
    63.   }
    64.   function get_cache($tplname) {
    65.     $fd=$this->cachedir.'/'.md5($_SERVER['REQUEST_URI']).$tplname.'.ch';
    66.     return file_get_contents($fd);
    67.   }
    68.   private function cache_save($tplname,$res) {
    69.       if (@file_put_contents($this->cachedir.'/'.md5($_SERVER['REQUEST_URI']).$tplname.".ch",$res)) {
    70.       }else {
    71.          trigger_error("Ошибка: Не могу кешировать шабло $tplname в папку $dir",E_USER_ERROR);
    72.       }
    73.   }
    74. }
    75. ?>
    да, плевать на причину, пусть афторы смарти разбираются, главное результат!
     
  6. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    ?
     
  7. kostyl

    kostyl Guest

    мож я тормоз, но нэйтив это когда инклудится html со вставками <?php ... ?> или как?
    Елс да тогда почему Psih native это гавно?
     
  8. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    kostyl
    Читать надо внимательнее что пишу, уважаемый, внимательнее.
     
  9. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    инициализация - это инклуд файла и вызов функци из него?
    ну, классов тоже много бывает, и все они инклудятся, инклудятся ;)))
     
  10. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Плагин вряд ли просто так инклюдится - он ещё регистрируется в системе что такой есть. Так что хочешь-нехочешь, а он скорее всего перебирает всё что есть в папке с плагинами. А это просто капец извините за мой французкий.
     
  11. kostyl

    kostyl Guest

    А_а бла_А ..... так надож в кавычки тогда "Native PHP гавно, неудобно, некрасиво!", ну как я понял это типа цитата... ты ж всё время за найтив был.
     
  12. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    :?:
     
  13. MiksIr

    MiksIr Активный пользователь

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Psih, ну это нужно смотреть. В конце концов, перебор плагинов - это ошибки логики... их можно исправлять. Что ж делать, любой продукт не идеален. Я вот не вижу причины, почему сматри нужно сразу все плагины сканить.
    Да и потом, вы можете написать в одном файле все функции и поподключать их при инициализации смарти руками. Вот и не будет файлов, если они пугают.
    В общем, это все механизмы... а определяют все не они, а руки.
     
  14. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    :?: :!:
     
  15. kostyl

    kostyl Guest

    Короче я думаю ваще в топку Smarty, потому что они признали свой позор. Теперь всем стало понятно что они писали 1с на 1с...