За последние 24 часа нас посетили 17960 программистов и 1643 робота. Сейчас ищут 1828 программистов ...

Шаблонизатор

Тема в разделе "Решения, алгоритмы", создана пользователем Danilka, 30 апр 2008.

  1. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    cms-lite
    Я передумал
     
  2. cms-lite

    cms-lite Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    53
    Симпатии:
    0
    Полезная ссылка для тех, кто хочет больше знать о шаблонизаторах:
    http://habrahabr.ru/tag/шаблонизатор/
     
  3. Koc

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

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    cms-lite, кэп, перелогиньтесь?
     
  4. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    А еще можно с кешированием
    PHP:
    1. <?php
    2. /*
    3.         (c)2010 Vasilii B. Shpilchin
    4.        
    5.         Шаблонизатор
    6. */
    7. class view
    8. {  
    9.     // Конфигурация кеша
    10.     const CACHE_SWITCH  = 0;
    11.     const CACHE_DIR     = './cache';
    12.     private $cfname     = null;
    13.     // Буфер переменных
    14.     private $_vars = array();
    15.     // Шаблон (путь, файл)
    16.     private $_path = null;
    17.     // Сгенерированый контент
    18.     protected $_content = null;
    19.     // Установка шаблона
    20.     public function __construct($_path)
    21.     {
    22.         $this -> _path = $_path;
    23.         $this -> cfname = self::CACHE_DIR.'/'.md5($this -> _path);
    24.     }
    25.    
    26.     public function cName($name)
    27.     {
    28.         $this -> cfname = self::CACHE_DIR.'/'.md5($name);
    29.     }
    30.    
    31.     public function __set($var, $val)
    32.     {
    33.         $this -> _vars[$var] = $val;
    34.     }
    35.    
    36.     public function __get($var)
    37.     {
    38.         if (isset($this -> $var))
    39.         {
    40.             return $this -> $var;
    41.         }
    42.         return $this -> _vars[$var];
    43.     }
    44.    
    45.     public function flush()
    46.     {
    47.         if (self::CACHE_SWITCH == 1)
    48.         {
    49.             $cfname = $this -> cfname.'.cache';
    50.             $cached = null;
    51.             $vardump = $this -> vars_dump();
    52.             if (file_exists($cfname))
    53.             {
    54.                 $cached = unserialize(file_get_contents($cfname));
    55.             }
    56.             if ($vardump == $cached[0])
    57.             {
    58.                 $this -> _content = &$cached[1];
    59.             }
    60.             else
    61.             {
    62.                 $cache = array($this -> vars_dump(), $this -> getcc());
    63.                 file_put_contents($cfname, serialize(&$cache));
    64.                    
    65.             }
    66.         }
    67.         echo $this;
    68.     }
    69.    
    70.     private function getc()
    71.     {
    72.         if ($this -> _content === null)
    73.         {
    74.             extract($this -> _vars);
    75.             ob_start();
    76.             include($this -> _path);
    77.             $this -> _content = ob_get_clean();
    78.         }
    79.         return $this -> _content;
    80.     }
    81.    
    82.     private function getcc()
    83.     {
    84.         foreach ($this -> _vars as $var => $data)
    85.         {
    86.             if (is_object($data))
    87.             {
    88.                 $this -> _vars[$var] = $data -> getcc();
    89.             }
    90.         }
    91.         return $this -> getc();
    92.     }
    93.    
    94.     private function vars_dump()
    95.     {
    96.         $vdump = array(0 => $this -> _path, 1 => array());
    97.         foreach ($this -> _vars as $name => $val)
    98.         {
    99.             if (is_object($val))
    100.             {
    101.                 $vdump[1][$name] = $val -> vars_dump();
    102.             }
    103.             else
    104.             {
    105.                 $vdump[1][$name] = $val;
    106.             }
    107.         }
    108.         return $vdump;
    109.     }
    110.    
    111.     public function __toString()
    112.     {
    113.         if ($this -> _content !== null)
    114.         {
    115.             return $this -> _content;
    116.         }
    117.         else
    118.         {
    119.             return $this -> getc();
    120.         }
    121.     }
    122. }
    по тестам - вдвое быстрее inlclde'ов кучки шаблонов, и немного медленнее, если обнаруживается неактуальность кеша (проверка происходит каждый раз). Кеширование работает при вызове метода flush. В логике (если тольк кеширование ни в коем случае не нужно) надо вызывать его. В шаблонах напротив для корректной работы надо делать echo. Если делать в логике flush и в каком-нибудь шаблоне, это приведет к дублированию данных данных шаблона в кеше, сгененированом по вызову контроллера.
     
  5. cms-lite

    cms-lite Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    53
    Симпатии:
    0
    PHP:
    1.  
    2. <?
    3. public function __toString()
    4. {
    5.  /*
    6.      вот это, по-моему, лишнее
    7.     if ($this -> _content !== null)
    8.     {
    9.         return $this -> _content;
    10.     }
    11.     else
    12.     {
    13.  */
    14.           return $this -> getc();
    15.   /*}*/
    16. }
    17. ?>
    18.  
    а можно примерчик с использованием метода flush() ?
     
  6. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Можно, но не нужно.

    Последний код ужасен полностью.
     
  7. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Бенчмарк
    PHP:
    1. <?php
    2. include('view.inc.php');
    3. $start = microtime(1);
    4. for ($i = 0; $i < 100; $i++)
    5. {
    6.     $view = new view('./tpls/1.tpl');
    7.     $view -> inc1 = new view('./tpls/1.tpl');
    8.     $view -> inc1 -> inc1 = 1;
    9.     $view -> inc1 -> inc2 = 1;
    10.     $view -> inc1 -> inc3 = 1;
    11.     $view -> inc1 -> inc4 = 1;
    12.     $view -> inc1 -> inc5 = 1;
    13.     $view -> inc1 -> inc6 = 1;
    14.     $view -> inc1 -> inc7 = 1;
    15.     $view -> inc1 -> inc8 = 1;
    16.     $view -> inc1 -> inc9 = 1;
    17.     $view -> inc1 -> inc10 = 1;
    18.     $view -> inc2 = 1;
    19.     $view -> inc3 = 1;
    20.     $view -> inc4 = 1;
    21.     $view -> inc5 = 1;
    22.     $view -> inc6 = 1;
    23.     $view -> inc7 = 1;
    24.     $view -> inc8 = 1;
    25.     $view -> inc9 = 1;
    26.     $view -> inc10 = 1;
    27.     $view -> flush();
    28. }
    29. echo substr(microtime(1) - $start, 0, 6);
    1.tpl - 47кб. текста + 10 переменных.
    Без кеширования: 0.6821
    С кешированием: 0.3627

    Вопреки предубеждениям, сериализация оказалась очень шустрой =) Работает просто идеально.
     
  8. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    а сделай сериализацию массива с хотя бы 30-кратным вложением ;)
     
  9. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    PHP:
    1. <?php
    2. include('view.inc.php');
    3. $start = microtime(1);
    4. for ($i = 0; $i < 10; $i++)
    5. {
    6.     $view = new view('./tpls/1.tpl');
    7.     $view -> inc1 = new view('./tpls/1.tpl');
    8.     $view -> inc1 -> inc1 = new view('./tpls/1.tpl');
    9.     $view -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    10.     $view -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    11.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    12.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    13.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    14.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    15.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    16.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    17.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    18.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    19.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    20.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    21.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    22.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    23.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    24.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    25.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    26.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    27.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    28.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    29.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    30.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    31.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    32.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    33.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    34.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    35.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    36.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    37.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = new view('./tpls/1.tpl');
    38.     $view -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 -> inc1 = 1;
    39.     $view -> flush();
    40. }
    41. echo substr(microtime(1) - $start, 0, 6);
    Без кеша: 1.8635
    С кешем (!!!!!!!!): 0.2879
    Шаблон - 47кб текста + 1 переменная.
     
  10. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Кеширование говорите:
    PHP:
    1. <?php
    2.         public function hashCode(){
    3.             $hash = 0;
    4.             ksort($this->vars);
    5.             foreach($this->vars as $key=>$var){
    6.                 $hash = md5(md5($key).md5("".$var).$hash);
    7.             }
    8.             return $hash;
    9.         }
    10.        
    11.         protected function getCashFileName(){
    12.             return basename($this->path, ".tpl")."_".$this->hashCode();
    13.         }
    14.        
    15.         /**
    16.          * Выполнение шаблона
    17.          * @return string Результат выполнения шаблона
    18.          */
    19.         public function __toString(){
    20.             if ($this->needCash){
    21.                 $cashFileName=$this->getCashFileName();
    22.                 if (file_exists(CASHDIR.$cashFileName)){
    23.                     return file_get_contents(CASHDIR.$cashFileName);
    24.                 }
    25.                 else{
    26.                     $rez=$this->compile();     
    27.                     file_put_contents(CASHDIR.$cashFileName, $rez);
    28.                     return $rez;
    29.                 }
    30.             }
    31.             else{
    32.                 return $this->compile();
    33.             }
    34.         }
    35.        
    36.         public function compile(){
    37.             extract($this->vars);
    38.             ob_start();
    39.             include($this->path);
    40.             return ob_get_clean();
    41.         }
    [vs]
    Дай, пожалуйста, шаблон. Прогоню свой вариант...
     
  11. cms-lite

    cms-lite Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    53
    Симпатии:
    0
    по-моему, вариант Volt(220) с хэшем лучше
     
  12. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    cms-lite
    Пока нет. На простом примере он в 2 раза медленнее.
     
  13. cms-lite

    cms-lite Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    53
    Симпатии:
    0
    PHP:
    1. <?
    2.  ...
    3.  // вот этого я не понял, зачем?
    4.  ksort($this->vars);
    5.  ...
    6. ?>
     
  14. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Если ввести те же переменные но в другом порядке, то итоговый хэш будет другим.
     
  15. cms-lite

    cms-lite Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    53
    Симпатии:
    0
    Volt(220), а если сразу пройтись по всем переменным как это делает vs?
     
  16. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Я это вроде и делаю...

    По моим тестам:
    Без шаблонизации оба варианта одинаковы.
    С шаблонизацией мой вариант немного проигрывает (В два раза он отставал, потому что я кеширую оба шаблона, а [vs] только внешний)
    На моем простом примере шаблонизация замедляет работу в 2 раза.
     
  17. Psih

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

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    cms-lite
    Суть в другом, переменные идут в объекте в том порядке, в котором их добавляли, а для разных последовательностей и хеши разные.

    PHP:
    1. <?php
    2. class MyObject {
    3.     public function __toString() {
    4.         $hash = null;
    5.         foreach(get_object_vars($this) as $key => $var){
    6.             $hash = md5($key.$var.$hash);
    7.         }
    8.         return $hash;
    9.     }
    10. }
    11. $obj1 = new MyObject();
    12. $obj1->a = 'a';
    13. $obj1->b = 'b';
    14. echo '$obj1 hash is: '.$obj1.'<br />';
    15.  
    16. $obj2 = new MyObject();
    17. $obj2->b = 'b';
    18. $obj2->a = 'a';
    19. echo '$obj2 hash is: '.$obj2.'<br />';
    20.  
    Код (Text):
    1.  
    2. $obj1 hash is: 5885eb82659a5df84d43c88b83305374
    3. $obj2 hash is: b7e1a537418a25330c6b347bef330aa3
    Кстати я выкинул два лишних вызова md5(), теперь оно ещё и шустрее пашет :)

    А ещё там был кусок: "".$var
    Народ, это не JS, где + и сложение, и конкатенация. Здесь это склеивание строк, поетому приобразование произойдёт в любом случае :)
     
  18. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Подправил hashCode:
    PHP:
    1.  
    2. <?php
    3. public function hashCode(){
    4.             $hash = 0;
    5.             ksort($this->vars);
    6.             foreach($this->vars as $key=>$var){
    7.                 if ($var instanceof Template){
    8.                     $hash = md5($key.$var->hashCode().$hash);
    9.                 }
    10.                 else{
    11.                     $hash = md5($key.$var.$hash);
    12.                 }
    13.             }
    14.             return $hash;
    15.         }
    На простом примере отстаю.
    На вложенности 4-6 догоняю.
     
  19. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Да я это тоже увидел и сделал. =))

    Этот md5 и так почти ничего не стоит... =))

    Потому что он передавался в md5 и черт его знает как он его преобразует или вообще выдаст ошибку.
     
  20. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    http://94.158.184.183/1.rar
    переменная там в саамом низу.
     
  21. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Уже не надо. =))
     
  22. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    а вот при простом сравнении массивов неважно, в каком прядке идут элементы =)
    если я правильно понял, в твоем решении для каждого вложеного шаблона будет свой кэш-файл? Тогда это даст плюс в скорости, когда содержимое какого-то шаблона изменится (у меня то все в одном большом файле, он будет пересобираться заново), но должно быть медленее, когда обновление не нужно, т.к. тут дергается несколько файлов, а у меня один ))
     
  23. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    будет примерно
    Не пересобируться только те шаблоны, которые не включают в себя изменившийся шаблон.
    Это не особо большой прирост в скорости, хотя все зависит от шаблона конечно.
    так и было.

    А с тестами у меня вообще какая-то лажа. Пока гонял кэширование было хуже.
    Сейчас запустил, стало лучше...
     
  24. cms-lite

    cms-lite Активный пользователь

    С нами с:
    16 янв 2010
    Сообщения:
    53
    Симпатии:
    0
    ты делаешь для каждого шаблона в отдельности, короче:

    вариант [vs]:

    - кэширование массива переменных
    - кэширование результата рендеринга
    - но делает он это сразу для всех вложенных шаблонов (один файл кэша)

    твой вариант:

    - сохранение хэша, вместо массива переменных
    - кэширование результата рендеринга
    - но делаешь ты это для каждого шаблона в отдельности (несколько файлов кэша, несколько вызовов hashCode())

    нужна золотая середина:

    - сохранение хэша, вместо массива переменных
    - кэширование результата рендеринга
    - сделать это сразу для всех вложенных шаблонов
     
  25. akrinel

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

    С нами с:
    26 янв 2009
    Сообщения:
    955
    Симпатии:
    1
    Адрес:
    Spb
    Давайте разводить срачеки в помойке и блондинках, а другие разделы не засорять, м?