Mira
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: Я к чему все это, да к тому что надо пытается не переменные уменьшать, | простите. не совсем понял что вы хотели сказать вот этим Цитата: Все зависит от самого сайте, наверно уже все знают мой уже старый проект с проксями, мне его 4 раза прикрывали и я 5 раз переписывал движок | такая же фигня, сейчас смотрю на свои старые проекты и удивляюсь как я такое мог написать, но это логично, новые знания - новое видение. Вот и теперь, когда хостер нажал на хвост, приходится думать об уменьшении нагрузки, пиходится вникать и придумывать новые идеи для того, что бы скрипты работали лучше. к сожалеию я не совсем понимаю, да и хостеры не дают конктетного ответа, что же является камнем преткновения во всем этом, толи загрузка процессора, толи память толи еще что-то?! Пока собираюсь оптимизировать по времени, те логично предпологаю что и нагрузка в этом случае будет меньше. Мне посоветовали делать все на статике. От всего смысла не вижу, а вот блоки, которые часто используются и "увесистые" думаю так и сделаю, если не увижу более приятную альтернативу. Пока заметил , дейсвительно, как вы и говорите, грузят в основном mysql запросы, особенно счетчики, и объеденения. например хочу избавиться вот от такого запроса Код: SELECT `a`.*, count(`c`.`id`) as `cnt` FROM `pr_articles` as a LEFT JOIN `pr_comment` as `c` ON `c`.`id_article` = `a`.`id` WHERE `a`.`id_theme` = ".$category." && `a`.`active` = 1 && `a`.`s2`=1 GROUP BY `a`.`id` ORDER BY `a`.`score` DESC | вижу два способа, которые достойны внимания. 1. простой, хотя и эффективный, записывать кол-во отзывов к статье в саму статью, потом не будет JOINов и счетчиков, что снизит нагрузку. Это я знаю как делать, этот результат ясен. 2. интересней перевого потому что мысль нова, интересно реализовать, да и если будут результаты не хуже, почему бы не использовать. Смысл состоит в том, что бы этот запрос а точнее результаты вывода этого запроса сохранять в файл, а потом просто извлекать от туда результаты. Перегенеривать файл можно либо по времени , например через каждый час, либо по тому как будет добавлен коммент в бд. Думаю это делать через переменную времени модификации файла или его отсутсвия на сервере (соответсвенно). Например, если добавили комментарий, я просто удаляю файл с сервера, а когда любой пользователь заходит на страницу где этот mysql запрос задействован, она просто перегенерируется на страницу и параллельно записывается в файл, откуда уже и будет браться. Либо второй вариант, проверяется время модификации файла filemtime и если оно больше заданного , перезаписываем содержимое файла. Вот сейчас полтора-вожусь над этой задачей, по предварительным тестам время уже меньше, раза полтора- два. Но , это еще не все проверки которые должны быть, боюсь они тоже займут какое то время. Да и не уверен что не нарвусь на косяки какие нибудь. Добавлено: пожалуйста, оцените скрипт на глюкавость и слабые места. спасибо Код: $fn = "static_html/".$category_name.".html"; $fmt = @filemtime($fn); if ($fmt && time()-$fmt < 60) //думаю достаточно для проверки { echo time()-$fmt; //это для меня потому не выношу отдельную переменную include_once $fn; } else { $query = "SELECT `a`.*, count(`c`.`id`) as `cnt` FROM `pr_articles` as a LEFT JOIN `pr_comment` as `c` ON `c`.`id_article` = `a`.`id` WHERE `a`.`id_theme` = ".$category." && `a`.`active` = 1 && `a`.`s2`=1 GROUP BY `a`.`id` ORDER BY `a`.`score` DESC"; $sql->query($query); $content = ""; while ($rec = $sql->getRecord()) { $content .= '<tr><td valign="top">......</td></tr>'."\n"; } echo $content; $fhandle = fopen($fn, "w"); fwrite($fhandle, $content); //вот здесь вот возможно и нужна еще одна проверка , если в файл не записалось что бы информация отслылалась админу fclose($fhandle); } | буду признателен за любые советы, любую критику. спасибо | Всего записей: 1627 | Зарегистр. 25-11-2003 | Отправлено: 10:33 08-05-2007 | Исправлено: Mira, 11:31 08-05-2007 |
|