Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как ускорить скрипт инет-магазина? 
:(
    Опции темы
Bangladesh
Дата 14.7.2006, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AsBest
***


Профиль
Группа: Завсегдатай
Сообщений: 1089
Регистрация: 4.9.2004
Где: Калининград

Репутация: нет
Всего: 17



здравствуйте smile

ситуация: в админ-панеле, где редактируются товары и разделы, очень долго выводиться само иерархическое дерево. там используется рекурсия + каждый раздел обрабатывается и выводиться кол-во товаров в разделе — обычное дело, но всё это ужасно медлеенно даже на локальной машине (около 10 сек). понятно, что при кол-ве товаров в 20к, к которым надо подгрузить фотки, клиенту это не понравиться. 

допустим: есть переменная $result в которую записывается весь выходящий код.

задача: сделать так, чтобы, если переменная уже раз была заполнена, то она заполнялась автоматически предыдущим кодом.

вопрос: как это сделать, если можно?

спасибо. 


--------------------
ок
PM MAIL WWW ICQ Skype   Вверх
vasac
Дата 14.7.2006, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



I, GyoZ, как выводишь это иерархическое дерево? Наверняка можно сделать намного быстрее.

По задаче — сохрани просто где-нибудь, в файле или БД и выводи оттуда. 
PM WWW   Вверх
DemoCode
Дата 14.7.2006, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 890
Регистрация: 20.10.2005
Где: Россия

Репутация: 1
Всего: 41



А что обязательно сразу все узлы дерева выводить? Нельзя их дополнять children'ами при клике на родительсткий узел?

Цитата(I @  GyoZ, 14.7.2006,  18:32 Найти цитируемый пост)
сделать так, чтобы, если переменная уже раз была заполнена, то она заполнялась автоматически предыдущим кодом.

сохранять этот резалт в сессии. 


--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
vasac
Дата 14.7.2006, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 8
Всего: 36



Цитата(DemoCode @  14.7.2006,  17:53 Найти цитируемый пост)
сохранять этот резалт в сессии.

В сессии неинтересно ) 
Будет кэшироваться только для одного пользователя на одну сессию.

Классический алгоритм кэширования чего-то подобного:

- Есть кэш (нужный текст в файле или базе)
- Есть признак актуальности кэша (который сбрасывается при изменении струкутры, например, при добавлении товара)
- При выводе дерева, сначала проверяется кэш, если он не пустой и актуальный — выводится из него. Если нет — дерево формируется, записывается в кэш, устанавливается флаг актуальности, дерево выводится.
 
PM WWW   Вверх
Bangladesh
Дата 15.7.2006, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AsBest
***


Профиль
Группа: Завсегдатай
Сообщений: 1089
Регистрация: 4.9.2004
Где: Калининград

Репутация: нет
Всего: 17



 
Код

//-------------------------------------------------------------------------

     function getSections($father)
     {
               $result = '';
               $mltpr = 0;
               $goods_num = 0;

               include $_SERVER['DOCUMENT_ROOT']."/access/access_par.php";

               mysql_connect($mhost, $mlogin, $mpassword) or die(mysql_error());
               mysql_select_db($mdb_name) or die(mysql_error());

              $sql = "SELECT * FROM `sections` WHERE `id_f` = '".$father."' ORDER BY `number` ASC";
              $query = mysql_query($sql) or die(mysql_error());

              while($row = mysql_fetch_object($query))
              {
                      $this->result_dlev = 0;
                      $goods_num = ($this->getGoodsNum($row->id) != 0) ? '(' . $this->getGoodsNum($row->id) . ')' : '';

                      $mltpr = $this->getDownLevel($row->id);
                      $result .= '<span style="display: block;  padding-bottom: 5px; font-size: '.(17-(2*$mltpr)).'pt;">'.$this->getWayIcon($row->id).'<a href="index.php?p=sections&cid='.$row->id.'">'.$row->name.'</a> ' . $goods_num . '</span>'.$this->getSections($row->id);
              }

              return $result;
     }

     //-------------------------------------------------------------------------


это функция вывода подразделов.

это те, которые используются в ней:

Код

//-------------------------------------------------------------------------
     function getDownLevel($id)
     {
               include $_SERVER['DOCUMENT_ROOT']."/access/access_par.php";

               mysql_connect($mhost, $mlogin, $mpassword) or die(mysql_error());
               mysql_select_db($mdb_name) or die(mysql_error());

               $sql = "SELECT * FROM `sections` WHERE `id` = '".$id."'";
               $query = mysql_query($sql) or die(mysql_error());

               $row = mysql_fetch_object($query) or die(mysql_error());
               if($row->id_f != 0)
               {
                  $arrow = '&raquo;'; $tag1 = '';
                                      $tag2 = '';

                  if($this->alt_id == $row->id) { $arrow = '';
                                                  $tag1  = '<span style="font-size: 11pt; font-weight: bold;">';
                                                  $tag2  = '</span>'; }

                  $this->dlev_dir= '<nobr><a href="index.php?p=sections&cid=' . $row->id . '">' . $tag1 . $row->name . $tag2 . '</a></nobr>  ' . $arrow . $this->dlev_dir;
                  $this->getDownLevel($row->id_f);
                  $this->result_dlev++;
               }
               else
               {
                  $this->dlev_dir = '<nobr><a href="index.php?p=sections&cid=' . $row->id . '">' . $row->name . '</a></nobr> &raquo; ' . $this->dlev_dir;

               }

               return $this->result_dlev;
     }

     //-------------------------------------------------------------------------

function getGoodsNum($id)
                {
              include $_SERVER['DOCUMENT_ROOT']."/access/access_par.php";
               mysql_connect($mhost, $mlogin, $mpassword) or die(mysql_error());
               mysql_select_db($mdb_name) or die(mysql_error());

               $sql = "SELECT * FROM `goods` WHERE `section` = '" . $id . "'";
               $query = mysql_query($sql) or die(mysql_error());

               return mysql_num_rows($query);
                }

 //-------------------------------------------------------------------------
     function getWayIcon($id)
     {
               include $_SERVER['DOCUMENT_ROOT']."/access/access_par.php";

               mysql_connect($mhost, $mlogin, $mpassword) or die(mysql_error());
               mysql_select_db($mdb_name) or die(mysql_error());

               $sql = "SELECT * FROM `sections` WHERE `id` = '".$id."'";
               $query = mysql_query($sql) or die(mysql_error());

               $row = mysql_fetch_object($query) or die(mysql_error());

               $slevel = 0;
               $slevel = $this->getDownLevel($row->id);
               $result= "";

               if($row->id_f != 0)
                        for($i = 1; $i <= $slevel; $i++)
                        $result .= '<img src="/admin/administrators/images/ways/0.gif" width="15" height="15" border="0">';
               else
                        $result = '<img src="/admin/administrators/images/ways/0.gif" width="15" height="15" border="0">';

               return $result;


     }

     //-------------------------------------------------------------------------
 


--------------------
ок
PM MAIL WWW ICQ Skype   Вверх
DemoCode
Дата 15.7.2006, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 890
Регистрация: 20.10.2005
Где: Россия

Репутация: 1
Всего: 41



А зачем перед каждым запросом заново подключаться к базе?
Подключись один раз в начале скрипта и работай с ней. Сразу и скорость на порядок возрастет. 


--------------------
Жить стало лучше, жить стало веселей
© И.В. Сталин 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0816 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.