Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Проблема с интегрированием дизайна
 
 автор: hedgy   (09.02.2007 в 23:59)   письмо автору
 
 

Делаю скрипт виртуальной библиотеки. Вся техническая информация (кол-во скачек, рейтинги, инфа о книгах, категориях...) хранится в текстовых файлах. Скрипт довольно-таки мощный, одна проблема.

У меня окончательный вывод делается таким путем: импортируется файл с html кодом того, что должно получиться, где модули типа %CATS% и %MAIN_FIELD% заменяется на соответствующие переменные, значения которых уже заранее были сгенерированны. Заменяю eregi_replace в цикле для каждой строки файла-шаблона.
Тормоза жуткие... страница генерится от 2 до 5 секунд... И это еще при не очень большом количестве книг...
И еще: у меня в код index.php где все и происходит куча инклюдов страниц, на которых хранятся и обрабатываются опр куски кода - делал, что б аккуратнее было...

Скажите мне, я лох? ))
И в чем мои ошибки?...

Вот для примера кусок кода с этапа вывода - где все тормоза и идут...
// ОТОБРАЖЕНИЕ
$template_dat = file("styles/template.dat"); for ($m=0; $m<sizeof($template_dat); $m++) { 
@$template .= $template_dat[$m]; 
$template = @eregi_replace("%HELP%", $help, $template);
$template = @eregi_replace("%LICENSE%", $license, $template);
$template = @eregi_replace("%ABOUT%", $about, $template);
$template = @eregi_replace("%PARTNERS%", $partners, $template);
$template = @eregi_replace("%LINKS%", $links, $template);
$template = @eregi_replace("%NEWS%", $news, $template);
$template = @eregi_replace("%SEARCH%", $search, $template);
$template = @eregi_replace("%AUTHORS%", $auth, $template);
$template = @eregi_replace("%ADD%", $add, $template);
$template = @eregi_replace("%STATISTICS%", $statistics, $template); 
$template = @eregi_replace("%SUBSCRIBE%", $subscribe, $template);
$template = @eregi_replace("%REVIEWS%", $reviews, $template); 
$template = @eregi_replace("%MAIN_FIELD%", $mainfield, $template); 
$template = @eregi_replace("%CATS_LIST%", $books_cats, $template); 
$template = @eregi_replace("%NEW%", $new_books, $template);
$template = @eregi_replace("%HIGHEST_RATED%", $highest_rated, $template);
$template = @eregi_replace("%MOST_DOWNLOADED%", $most_downloaded, $template);
$template = @eregi_replace("%POP_AUTH%", $pop_auth, $template);
$template = @eregi_replace("%SELECTED%", $fav_show, $template);
$template = @eregi_replace("%TOTAL_BOOKS%", "$books_total", $template);
$template = @eregi_replace("%TOTAL_SIZE%", $capacity_total, $template);
$template = @eregi_replace("%LAST_UPDATE%", $lastupdate, $template);
$template = @eregi_replace("%TOTAL_AUTHS%", "$auth_total", $template); 
$template = @eregi_replace("%TOTAL_SUBSCRIBERS%", "$total_subscribers", $template); 
$template = @eregi_replace("%SEARCH_FORM%", $search_form, $template);
$template = @eregi_replace("%AUTH_SEARCH%", $auth_search, $template); 
$template = @eregi_replace("%SUBSCRIBE_FORM%", $subscribe_form, $template); }
echo $template;

Это просто от того, что их так много?... О_о

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

Какие еще есть варианты по типу этого?... Просто позарез нужно именно так, со свободным дизайном, блоковой системой...

Очень-очень жду ответа )

   
 
 автор: cheops   (10.02.2007 в 03:31)   письмо автору
 
   для: hedgy   (09.02.2007 в 23:59)
 

1) Объём $template большой?
2) Замените eregi_replace() на str_replace() - последняя функция работает быстрее
3) В цикле сначала добавьте подстроки $template .= $template_dat[$m];, а затем вне цилка проводите замену - тормоза у вас из-за того, что вы в цикле на каждой итерации вызываете функции, которые можно вызвать вне цикла.

   
 
 автор: Ralph   (10.02.2007 в 08:04)   письмо автору
 
   для: cheops   (10.02.2007 в 03:31)
 

По моему мнению,регул.выражения для того и сделаны,чтобы применять их,когда ЛИШЬ ПРИБЛИЗИТЕЛЬНО знаешь,что тебе в строке нужно найти и потом чем-то заменить,или просто найти,в ост.случаях всегда надо использовать стр.функции.А шаблоны то у вас строго определены

   
 
 автор: Ralph   (10.02.2007 в 08:08)   письмо автору
 
   для: Ralph   (10.02.2007 в 08:04)
 

Образно говоря,если бы знаете название улицы и номер дома,зачем таксисту обьяснять,что это "ну минут где-то 10 прямо ехать,потом,по моему,налево...".Скажи адрес,у таксиста такая работа,он и сам знает,куда везти :-)

   
 
 автор: cheops   (10.02.2007 в 13:09)   письмо автору
 
   для: Ralph   (10.02.2007 в 08:04)
 

У hedgy используется точная замена и использование регулярных выражений избыточно.

   
 
 автор: hedgy   (10.02.2007 в 21:11)   письмо автору
 
   для: cheops   (10.02.2007 в 13:09)
 

Не надо мне str_replace, меня и ereg устраивает ))

   
 
 автор: hedgy   (10.02.2007 в 10:42)   письмо автору
 
   для: hedgy   (09.02.2007 в 23:59)
 

Хорошо, спасибо всем за помощь! Сейчас отчитаюсь об изменениях...
Кстати, ваш вопрос: template.dat - размером с обычный хтмыл файл, правда, учитывая, что самые длинные вхождения в него вставляются извне - значит строк 20-30. Но можно же сделать любой, тут уж как пользователь моего скрипта будет решать. Может он килобайт на 100 растянет только шаблон )))

А тот вопрос, по поводу того, как делают подобные варианты дизайна?

Дописал: Ура, теперь пишет "Страница сгенерирована за 0.229778 секунд", а переставил я всего-то одну круглую скобку... Спасибо за то, что глаза открыли)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования