|
|
|
| Делаю скрипт виртуальной библиотеки. Вся техническая информация (кол-во скачек, рейтинги, инфа о книгах, категориях...) хранится в текстовых файлах. Скрипт довольно-таки мощный, одна проблема.
У меня окончательный вывод делается таким путем: импортируется файл с 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;
|
Это просто от того, что их так много?... О_о
И еще: почему нет тормозов, когда нет вывода?... Он ведь по логике все равно должен высчитывать все тоже самое...
Какие еще есть варианты по типу этого?... Просто позарез нужно именно так, со свободным дизайном, блоковой системой...
Очень-очень жду ответа ) | |
|
|
|
|
|
|
|
для: hedgy
(09.02.2007 в 23:59)
| | 1) Объём $template большой?
2) Замените eregi_replace() на str_replace() - последняя функция работает быстрее
3) В цикле сначала добавьте подстроки $template .= $template_dat[$m];, а затем вне цилка проводите замену - тормоза у вас из-за того, что вы в цикле на каждой итерации вызываете функции, которые можно вызвать вне цикла. | |
|
|
|
|
|
|
|
для: cheops
(10.02.2007 в 03:31)
| | По моему мнению,регул.выражения для того и сделаны,чтобы применять их,когда ЛИШЬ ПРИБЛИЗИТЕЛЬНО знаешь,что тебе в строке нужно найти и потом чем-то заменить,или просто найти,в ост.случаях всегда надо использовать стр.функции.А шаблоны то у вас строго определены | |
|
|
|
|
|
|
|
для: Ralph
(10.02.2007 в 08:04)
| | Образно говоря,если бы знаете название улицы и номер дома,зачем таксисту обьяснять,что это "ну минут где-то 10 прямо ехать,потом,по моему,налево...".Скажи адрес,у таксиста такая работа,он и сам знает,куда везти :-) | |
|
|
|
|
|
|
|
для: Ralph
(10.02.2007 в 08:04)
| | У hedgy используется точная замена и использование регулярных выражений избыточно. | |
|
|
|
|
|
|
|
для: cheops
(10.02.2007 в 13:09)
| | Не надо мне str_replace, меня и ereg устраивает )) | |
|
|
|
|
|
|
|
для: hedgy
(09.02.2007 в 23:59)
| | Хорошо, спасибо всем за помощь! Сейчас отчитаюсь об изменениях...
Кстати, ваш вопрос: template.dat - размером с обычный хтмыл файл, правда, учитывая, что самые длинные вхождения в него вставляются извне - значит строк 20-30. Но можно же сделать любой, тут уж как пользователь моего скрипта будет решать. Может он килобайт на 100 растянет только шаблон )))
А тот вопрос, по поводу того, как делают подобные варианты дизайна?
Дописал: Ура, теперь пишет "Страница сгенерирована за 0.229778 секунд", а переставил я всего-то одну круглую скобку... Спасибо за то, что глаза открыли) | |
|
|
|
|