Какая конструкция работает быстрее и оптимальнее ?

Discussion in 'PHP' started by serg-php, 18 Dec 2011.

  1. serg-php

    serg-php Elder - Старейшина

    Joined:
    28 Jan 2008
    Messages:
    313
    Likes Received:
    9
    Reputations:
    0
    Нужно выводить рандомно записи из нескольких категорий.

    Ранее использовал такую конструкцию

    Варинт 1
    Инклудил файл

    PHP:
    $filetime=lstat('files/random_entries.txt'); // Получаем массив информации о файле 
    $cur=time()-$filetime[9]; // Получаем время прошедшее с последней модификации файла 
    if ($cur>2500) // Если прошло больше 2500 секунд, то делаем запрос к БД 
    { 
    $f=fopen('files/random_entries.txt','w');  

    // Все echo заменяем на $out.=  
    // Чтобы собрать в эту переменную все данные которые надо выводить 

    $host = "localhost";    // MySQL server
    $user_db = "111111";        // MySQL пользователь
    $pass_db = "111111";            // MySQL пароль
    $dbase = "222222";        // MySQL база данных
    $dtable = "eu_entries";        // Таблица в базе данных

    mysql_connect ($host, $user_db, $pass_db); 
    mysql_select_db($dbase); 
    mysql_query("SET NAMES 'cp1251'");

    $sql = "SELECT link_id, images, catid, v_title, v_255_13, v_descr, rand() AS rnd FROM $dtable WHERE ((catid=403)OR(catid=404)) AND images!='' GROUP BY link_id ORDER BY rnd LIMIT 800"; 

    $result = mysql_query($sql); 
    $rows = mysql_num_rows($result); 
    $out=""; 
    if ((!
    $rows) || ($rows < 1)) {$out.="Результатов НЕТ!!!";} 
    else { 
          
    $out.=" "; 
          while(list(
    $id_link,  $images, $catid, $v_title, $v_255_13, $v_descr ) = mysql_fetch_row($result)) { 
    $images = explode( "\n", $images ); 
    $images = $images[0]; 

          
    $v_descr=strip_tags($v_descr);
          
    $v_descr=str_replace('&nbsp;',' ',$v_descr);
          
    $v_descr=str_replace('.','. ',$v_descr);
          
    $v_descr=str_replace(',',', ',$v_descr);
          
    $v_descr=str_replace('(',' (',$v_descr);
          
    $v_descr=str_replace(')',') ',$v_descr);
          
    $v_descr=str_replace('  ',' ',$v_descr); 
     

    $v_alt=substr($v_title,0,20);
    $v_title=substr($v_title,0,26);
    $v_descr=substr($v_descr,0,71);
    $v_descr=mb_strtolower($v_descr);

           
    $out.= ""; 
               if(empty(
    $images)) 
                 echo 
    ""; 
                 else 
                
    $out.= "<a href=\"page-o$id_link.html\"><img src=\"files/small/$images\" width=\"60\" class=\"imgThum\"></a>";  
                
    $out.="<div class=\"pdsc\"><a href=\"page-o$id_link.html\">$v_title</a> $v_descr $v_255_13 <span>»</span></div></div>"; 
    } 
           } 
    $out.=""; 
    fwrite($f,$out);fclose($f); // Записываем в файл 
    } 
    echo 
    file_get_contents('files/random_entries.txt'); // Всегда выводим содержимое файла 

    ?>
    Вариант 2 сделать вывод через функцию

    PHP:
     function block_RandomEntries_Browse(&$tpl, $args = ''){
     global 
    $db;

      
    $hw_num = isset($args['amount']) ? abs(intval($args['amount'])) : 10;

      
    $mass = $db->one_col_array("SELECT link_id FROM ".TBL_AD." WHERE ((catid=403)OR(catid=404)) AND approved='1'  AND user_approved='1' AND images!=''");    

      
    shuffle($mass);
      
      
    $tmp = array_slice($mass, 0, $hw_num);
      
      
    $zap=implode(',',$tmp);
      
           
    $ql = 'SELECT link_id, 
                        v_title  AS f_title,
                v_descr  AS f_descr,
                images FROM '
    .TBL_AD.
              
    ' WHERE link_id IN ('.$zap.')'.
              
    ' ORDER BY link_id DESC';
          
     
      
    $res = $db->query($ql);
     
       while(
    $v = mysql_fetch_assoc($res)){
        
        
    $v['f_title'] = Cut_Text_by_words($v['f_title'], 40);
        
    $v['f_descr'] = strip_tags($v['f_descr']);
        
    $v['f_descr'] = Cut_Text_by_words($v['f_descr'], 70);
        
            
    $tpl->AddCell('b_RandomEntries_Browse', hwSQLRowGet($v));
          }
          
        }


    Какой из предложенный вариантов быстрее работает и почему?

    Как во второй вариант добавить интервал смены рандомных позиций 10 - 20 мин.?
     
  2. barnaki

    barnaki Elder - Старейшина

    Joined:
    2 Nov 2008
    Messages:
    676
    Likes Received:
    130
    Reputations:
    4