оптимизация Php-nuke
Ни для кого не секрет, что PHP-Nuke является очень ресурсно-потребной системой, и при посещаемости сайта, основанного на php-nuke, свыше 800 уникальных заходов в день, ваш сайт будет перегружать и Базу Данных, и собственно, сам сервер. Следствие чего хостнг-провайдер попросит вас, либо сменить cms, либо перейти на выделенный сервер. И они будут правы, т.к. в среднем (при наборе стандартных модулей и блоков) каждая открываемая страница пользователем производит порядка 80-120 запросов к БД (порой бывает даже 300 запросов), что из ряда вон много. Все это из-за того что php-nuke написана очень просто и использует наиболее легкие методы исполнения работы скрипта, что результат увеличение запросов к БД.
В данной теме мы постараемся максимально снизить нагрузку с БД и php, но не изменить структуру php-nuke. Так же будет по ходу выполнения исправлять допущенные ошибки автором в скриптах. За основу взята php-nuke версии 7.9 (без каких либо патчей). Помните, что при изменения кода, заранее запаситесь бекапом файлов вашего сайта и, пожалуй, бекапом базы. Будьте внимательны при изменении кода, тем более, если у вас отличающаяся версия от 7.9, заменять надо не в один в один, а с пониманием и сравнивая строки с вашей версии и добавляя изменения! Особенно обратите внимание на используемую функцию filter() в обработке переменных, она добавлена в 7.9 версии, а, следовательно, ее не будет в версиях ниже, значит, в коде ее у вас не должно быть! Чтобы узнать, сколько в данный момент у вас выполняет сайт запросов к БД, проследуйте в эту тему форума и произведите изменения указанные там. Тема для обсуждения Начнем мы с оптимизации «ядра» системы. А именно с файла mainfile.php 1. В целях повышения безопасности ограничиваем поступление переменных $admin и $user Находим: PHP код:
Заменяем на: PHP код:
2. Изменим вызов конфиг файла и подключение к бд, находим: PHP код:
и заменим на: PHP код:
Обратите здесь внимание на строки: PHP код:
если вы не используете модули или блоки от старых версий phpnuke, то удалите эти строчки, это позволит снизить нагрузку к БД. 3. Если у вас в mainfile.php нет такой записи, то добавляем ее в начало файла на следующей строчке после <?php : PHP код:
4. Теперь уберем один запрос из системы посредством кэширования статичной информации в файл. Для этого находим: PHP код:
и заменяем на: PHP код:
После этого создаем в главной директории папку с именем cache и назначаем права на запись (775 или 777). |
5. Изменим, функции определения админа, пользователя и принадлежности пользователя к группе, находим:
PHP код:
Заменяем на: PHP код:
Таким образом мы имеем глобальную переменную $userinfo которая содержит в себе всю информацию о пользователе. 6. Изменим функцию подсчета заработанных пользователем балов на сайте, находим: PHP код:
Заменяем ее на: PHP код:
|
7. Обновим функцию проверки на активность модуля и функции, работающие с блоками, находим:
PHP код:
Заменяем на: PHP код:
8. Облегчим функцию, отвечающая за сессии, находим: PHP код:
Заменяем на: PHP код:
Так же выполняем SQL-запрос в phpMyAdmin: Код:
не забываем в запросе заменить префиксы nuke_ на свои! |
9. Облегчим функции, отвечающие за Ultramode (вывод заголовков новостей), информацию о пользователе по cookie и информация о пользователе из БД, находим:
PHP код:
Заменяем на: PHP код:
10. Немного изменим блок администратора, но по-прежнему он будет производить 7 запросов к БД, такова цена информативности, тем более что это будет только для администратора и поэтому не столь значимо, находим: PHP код:
Заменяем на: PHP код:
|
11. Упрощаем функцию вывода RSS в блоке и автоматического добавления запрограммированных новостей, находим:
PHP код:
Заменяем на: PHP код:
|
12. Облегчим блок пользователя, находим:
PHP код:
заменяем на: PHP код:
13. От ниже следующую функцию getTopics() мы избавимся, когда будем оптимизировать модуль новостей. 14. Чуток упростим функцию массовых сообщений от пользователей, находим: PHP код:
Заменяем на: PHP код:
15. Обновим функцию определения текущей темы оформления, находим: PHP код:
Заменяем на: PHP код:
|
16. Уберем пару запросов в функции подсчета дней до окончании подписки пользователя (мало кто этим пользуется, но все-таки), находим:
PHP код:
Заменяем ее на: PHP код:
17. И последнее изменение в этом файле, обновим функцию банерной системы (данная система появилась в версии 7.9, сл-но у версий ниже данное делать не нужно), находим: PHP код:
Заменяем на: PHP код:
|
Теперь внесем небольшое изменение в админ файлы настроек системы и модулей.
Открываем файл /admin/modules/settings.php Находим: PHP код:
И выше добавляем: PHP код:
Открываем файл /admin/modules/modules.php Находим: PHP код:
Ниже добавляем: PHP код:
Вносим новую переменную в конфиг, окрываем config.php Находим: PHP код:
и ниже добавляем: PHP код:
Если вы пользуетесь группами для пользователей в php-nuke (не в форуме), то ставим 1, а если вам не нужны заработанные балы пользователей на сайте и сами группы, то ставим 0 - это уменьшит количество запросов на сайте. Откорректируем modules.php, находим: PHP код:
Заменяем на: PHP код:
Находим: PHP код:
Заменяем на: PHP код:
Откорректируем index.php, находим: PHP код:
Заменяем на: PHP код:
Упростим немного систему бана, открываем includes/ipban.php Находим: PHP код:
Заменяем на: PHP код:
И последнее изменение в ядре системы, но очень весомое. Открываем header.php Если вы используете сторонние системы безопасности php-nuke или же вам не нужна система бана пользователей, то удаляем строчку: PHP код:
Настоятельно рекомендую избавиться от стандартной статистики посещаемости, она ну уж слишком много запросов делает к БД, да и обычные счетчики типа http://top.mail.ru/ куда информативнее. Если решились, то находим и удаляем строчку: PHP код:
Так же надо убрать теперь не нужные нам таблицы, для этого выполним SQL-запрос: Код:
*не забываем заменить префикс nuke_ на свой Так же удаляем теперь не нужные нам файлы: includes/counter.php и папку modules/Statistics/ В результате проведенных выше изменений над ядром системы количество запросов снизилось до ~8, это с учетом всех включенных возможностей php-nuke. |
block-Modules.php
Оптимизируем блок: Навигация
Открываем blocks/block-Modules.php И заменяем весь текст, который находиться в том файле на: PHP код:
В результате чего, данный блок под пользователем не совершает ни одного запроса. |
News (часть 1)
Оптимизируем модуль Новостей
Открываем modules/News/index.php Находим: PHP код:
Заменяем на: PHP код:
Находим: PHP код:
Заменяем на: PHP код:
Находим: PHP код:
Заменяем на: PHP код:
Находим: PHP код:
Заменяем на: PHP код:
Находим: PHP код:
Заменяем на: PHP код:
Находим: PHP код:
Заменяем на: PHP код:
Находим: PHP код:
Заменяем на: PHP код:
Находим: PHP код:
Заменяем на: PHP код:
И того на главной странице модуля новостей имеем один или 2 запроса в зависимости просматриваете ли вы все новости или же отдельный топик новостей. Еще добавлю: Если не используете возможность запрограммировать публикацию статьи на будущее, то закомментируйте или удалите строку: PHP код:
|
News (часть2)
Оптимизируем модуль Новостей
Открываем modules/News/article.php Находим: PHP код:
Выше добавляем: PHP код:
То, что мы сейчас добавили, является настраиваемой частью скрипта, вы можете выключить не нужные вам блоки. Находим: PHP код:
Заменяем на: PHP код:
Находим: PHP код:
Заменяем на: PHP код:
Находим: PHP код:
Заменяем на: PHP код:
Находим: PHP код:
Заменяем на: PHP код:
Это мы оптимизировали вывод самих новостей, а теперь займемся выводом блоков, которые выводятся с права от новости. Находим: PHP код:
Заменяем на: PHP код:
Находим: PHP код:
Заменяем на: PHP код:
Находим и удаляем: PHP код:
Находим: PHP код:
Заменяем на: PHP код:
Находим: PHP код:
Выше добавляем (изменено): PHP код:
Находим: PHP код:
Заменяем на: PHP код:
Находим: PHP код:
Выше добавляем: PHP код:
Находим: PHP код:
Ниже добавляем: PHP код:
Находим: PHP код:
Выше добавляем: PHP код:
Находим: PHP код:
Ниже добавляем: PHP код:
Находим: PHP код:
Выше добавляем: PHP код:
Находим (изменено): PHP код:
Выше добавляем: PHP код:
В результате, при прочтение полной версии новости, модуль делает 2 запроса без блоков и 6 с блоками (2-опрос, 2-ссылки). Это без вывода ассоциаций и комментариев (ими займемся позже). На сегодня хватит :smile: |
News (часть2)
Предыдущий пост был подправлен!
Оптимизируем модуль Новостей Открываем modules/News/associates.php Находим и удаляем: PHP код:
Находим: PHP код:
Заменяем на: PHP код:
|
News (часть3)
Оптимизируем модуль Новостей
Открываем modules/News/categories.php Находим: PHP код:
Заменяем на: PHP код:
Находим: PHP код:
Заменяем на: PHP код:
Находим: PHP код:
Заменяем на: PHP код:
Открываем modules/News/print.php Находим: PHP код:
Заменяем на: PHP код:
Находим: PHP код:
Заменяем на: PHP код:
|
Часовой пояс GMT +4, время: 23:37. |
Copyright © 2005 by Soniks