Как сократить время выполнения этого скрипта? - PullRequest
0 голосов
/ 13 февраля 2011

Более недели я пытался оптимизировать свои скрипты для запросов MySQL. В конце концов я решил установить Xdebug в своей производственной среде и нашел некоторые результаты забавными:

  1. Использование медленного запроса MySQL не возвращает мне более высокую работу на сервере. Так что это означает, что мои запросы совсем не медленные. Возможно, это потому, что у меня пока нет много данных.
  2. Установка memcached сократила мое время выполнения PHP, иногда с 5 минут до 1 или 2 минут, но возникли некоторые проблемы. Memcached не возвращает новую запись для моих пользователей. Очевидно, я беру данные из памяти примерно через 1 минуту базы данных. Так или иначе, я решил, что пока не буду использовать memcached. Есть не так много пользователей, чтобы работать с такими. В любом случае скорость идет медленно.

Это сцена для моего серверного приложения. Но несколько дней назад я внедрил новый модуль из соображений безопасности, создав зашифрованный ключ для всех своих объектов в приложении. Для этого я реализовал класс datacrypt, он отлично работает в моей среде разработки на моем ноутбуке.

Почему я пришел за помощью? Просматривая профилирование Xdebug с помощью winCachegrind, я обнаружил, что создание экземпляра datacrypt занимает 37 218 мс для выполнения, некоторые из моих файлов показывают 10 или 15 строк, и каждая из этих строк создает и шифрует ключ на лету.

Широкое использование класса datacrypt является проблемой. Он используется в каждом файле сценария. Поэтому мне нужно получить новый быстрый класс для использования зашифрованного хэша в моем приложении.

Может кто-нибудь может мне порекомендовать? Или что я могу сделать, чтобы datacrypt работал быстрее?

Если вы хотите взглянуть на мои сценарии, дайте мне знать.

    <div class="property-holder">
<?php

    require BASE_DIR.'/controller/listing.php';

    if(is_array($rows)){
        echo $nav;  
    ?>
<div id="properties-listing" class="content center container-wraps">
<?php
        //$crypt =  new datacrypt();
        foreach($rows as $row){

                //$pkey = $crypt->encrypt($row['property_type'].'-'.$row['property_id'].'-'.$row['broker_id'].'-'.$row['company_id']);
                    if($row[property_type] == 'development'){
                    $picture = (( $row['dev_logo']!='')?'<img class="ui-action" rel="open"  src="'.HOST.'thumbs/80x80/dev/'.$row['dev_logo'].'" />':'<img src="'.HOST.'imgss/noimage.jpg" width="80" height="80" />');
                    }else{
                    $picture = (( $row['image']!='')?'<img class="ui-action" rel="open"  src="'.HOST.'thumbs/80x80/'.$row['property_id'].'/'.$row['image'].'" width="80" height="80" />':'<img src="'.HOST.'imgss/noimage.jpg" width="80" height="80" />');
                    }
                    $prop.=' <div class="listing clearfix shadowbox" id="'.$pkey.'" ref="MLS-'.$row['property_id'].'"  >';
                    $prop.='<div class="listing-photo  left"><a href="#property-view" rel="load-content">'.$picture.'</a></div>';
                    $prop.='<div class="left listing-holder clearfix">';                    
                        $prop.='<h2 class="title"><span class="location"> '.$row['city'].', '.$row['estate'].', '.$row['country'].' </span> '.$row['property_name'].' <em class="company"> ( MLS-'.$row['property_id'].' )</em> '.($_SESSION[company_id]==$row[company_id]?'<span class="company ui-icon ui-icon-heart" ></span>':'').'</h2>';
                        $prop.='<div class="listing-description clearfix"><ul>';

                        $prop.='<div class="threebox left">';
                        $prop.='<li><span>'.T_('Tipo de propiedad').'</span><strong>'.$row['category'].' </strong></li>';   
                        $prop.='<li><span>'.T_('unidad/es disponible').'</span>'.$row['units'].'</li>'; 
                        $prop.='</div>';
                        $prop.='<div class="threebox left">';
                        if((boolean)$row['negotiation']){
                        $prop.='<li>'.T_('precio disponible a').'<strong> '.T_('negociaci&oacute;n').'</strong></li>';  
                        }

                        if((boolean)$row['for_rent'] ){
                                if($row['property_type'] == 'development'){
                                $prop.='<li><span><strong>'.T_('en renta desde:').'</strong></span> $ '.number_format($row['min_rent']).' '.T_('hasta').' '.$row['max_rent'].'</li>';   
                                }else{
                                $prop.='<li><span><strong>'.T_('renta:').'</strong></span> $ '.number_format($row['rent_price']).' '.$row['currency_type'].'</li>'; 
                                }

                            }
                            if((boolean)$row['for_sale'] ){
                                if($row['property_type'] == 'development'){
                                $prop.='<li><span><strong>'.T_('en venta desde:').'</strong></span> $ '.number_format($row['min_sale']).' '.T_('hasta').' '.$row['max_sale'].'</li>';   
                                }else{
                                $prop.='<li><span><strong>'.T_('venta:').'</strong></span>  $ '.number_format($row['sale_price']).' '.$row['currency_type'].'</li>';    
                                }
                            }
                            if((boolean)$row['for_vacational'] ){
                            $prop.='<li><span><strong>'.T_('renta vacacional:').'</strong></span> $ '.number_format($row['min_price']).'  / $ '.number_format($row['mid_price']).' / $ '.number_format($row['hig_price']).' '.$row['currency_type'].'</li>';    
                            }
                            $prop.='<li><span>'.T_('Tipo de propiedad').'</span><strong>'.($row[property_type]=='development'?T_('desarrollo'):$row['category']).' </strong></li>'; 
                            if($row[property_type]=='inventory'){

                            $prop.='<li><strong>'.T_('Pertenece a desarrollo').'</strong></li>';    
                            }

                        $prop.='</div>';
                        $prop.='<div class="threebox left">';
                        $prop.='<li><span>'.T_('Ba&ntilde;os:').'</span><strong> '.$row['bathrooms'].'</strong></li>';  
                        $prop.='<li><span>'.T_('Habitaciones:').'</span> '.$row['bedrooms'].'</li>';    
                        $prop.='</div>';
                        $prop.='</ul></div>';
                    $prop.='</div>';
                    $prop.='<div class="options" >
                            <ul>';
                    $prop.='<li><a rel="open" href="'.HOST.LANG.'/property/?k='.urlencode($pkey).'" title="'.T_('Ver descripcion completa de la propiedad.').'" ><span class="ui-button-icon-primary ui-icon ui-icon-contact"></span>'.T_('ver m&aacute;s').'</a></li>';
                    $prop.='<li><a rel="note" href="#" title="'.T_('Agregar nota a esta propiedad, este mensaje es solo entre la empresa que lista la propiedad y tu como broker.').'" ><span class="ui-button-icon-primary ui-icon ui-icon-tag"></span>'.T_('nota').'</a></li>';
                    $prop.='<li><a rel="info" href="#" title="'.T_('Ver informacion de la empresa que lista esta propiedad.').'" ><span class="ui-button-icon-primary ui-icon ui-icon-contact"></span>'.T_('info').'</a></li>';
                    $prop.='<li><a rel="open" href="'.HOST.LANG.'/pdf/?k='.urlencode($pkey).'" title="'.T_('Descargar presentaci&oacute;n en pdf').'"  title="'.T_('Descargar presentaci&oacute;n en pdf de esta propiedad').'"><span class="ui-button-icon-primary ui-icon ui-icon-circle-arrow-s"></span>'.T_('PDF').'</a></li>';
                    $prop.='</ul>
                        </div>';
                        /*
                    $prop.='<div class="metadata threebox center shadowbox content darknessbox" >';
                        $prop.='<h3>'.$row[companyname].'</h3>';
                        $prop.='<p>'.$row[companyaddress].' </p>';
                        $prop.=' < '.$row[companyweb].' >  '.$row[companyphone].' </p>';
                        $prop.='<p><strong>'.$row[brokername].'</strong> < '.$row[brokeremail].' >  <br />'.$row[brokerphone].'  &mdash; '.$row[brokermobile].'</p>';
                        $prop.='<em>MLS-'.$row['id'].' </em>: <strong>c. '.$row[commission].'</strong>';
                    $prop.=' </div>'; */
                $prop.=' </div>';
            }
            echo $prop;
    ?>
        </div>

    <?php
        echo $nav;  
    }else{
        message(T_('Wow!, lo sentimos no hay propiedades para mostrar'),'warning');
    }
?>
</div>

1 Ответ

1 голос
/ 13 февраля 2011

подсказок: 1 - используйте шаблон для отделения кода PHP от кода HTML.
2 - распечатайте time (), чтобы сгенерировать время до выполнения и после выполнения.

пример:

  <?

  $start=time();
  some code here 1 ,,,,,,,,
  $after1=time();
  $total1=$after1-$start;
  echo "total time for execution this part:  ".$total1

 ?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...