Еще одна оптимизация NextGen Gallery
Минус один UPDATE при каждом обращении к блогу
Плагин NextGen Gallery имеет одну неприятную особенность: при каждом обращении к блогу выполняется обновление (UPDATE в терминах MySQL) таблицы wp_options. Хотя для «средних» блогов это не критично, для хорошо посещаемых ресурсов это плохо по ряду причин:
- Обновление таблицы
wp_optionsсбрасывает кэш запросов MySQL к таблицеwp_options, что приводит к необходимости реального выполнения запросов на выборку данных (с учётом огромного количества записей — благодаря всяким разным плагинам — это лишний трафик между PHP и MySQL). - Выполнение операции обновления таблицы при использовании MyISAM приводит к блокировке таблицы; при высокой посещаемости это приводит к вынужденному ожиданию освобождения таблицы и негативно сказывается на нагрузке и производительности.
- При использовании плагинов объектного кэширования каждый вызов
update_option()приводит к необходимости обновления и записи кэша; обновление файлового объектного кэша приводит к лишним обращениям к диску (которых на виртуальных серверах лучше избегать). - В конце концов, это лишний запрос, который не является необходимым.
Использование плагина MySQL Monitor показывает:
- Запрос:
[-]View Code MySQLUPDATE `wp_options` SET `option_value` = 'a:3:{i:0;b:0;s:29:\"nextgen-gallery/nggallery.php\";a:2:{i:0;s:9:\"nggLoader\";i:1;s:9:\"uninstall\";}...}' WHERE `option_name` = 'uninstall_plugins'
- Трасса вызовов:
[-]View Code Textwp-includes/wp-db.php, 830 (DbProfile::query)
wp-includes/functions.php, 533 (wpdb::update)
wp-includes/plugin.php, 608 (update_option)
wp-content/plugins/nextgen-gallery/nggallery.php, 80 (register_uninstall_hook)
wp-content/plugins/nextgen-gallery/nggallery.php, 429 (nggLoader::nggLoader)
wp-settings.php, 566 (include_once)
wp-config.php, 84 (require_once)
wp-load.php, 30 (require_once)
wp-blog-header.php, 12 (require_once)
index.php, 17 (require)
Говоря простым языком, NextGen Gallery при каждой загрузке WordPress регистрирует функцию деинсталляции плагина. Таким образом, если мы имеем 25,000 показов страниц в день, это выливается в 25,000 (относительно медленных) запросов UPDATE к базе.
Проблема решается очень просто: вызов функции register_uninstall_hook переносится из конструктора nggLoader::nggLoader() (файл nextgen-gallery/nggallery.php) в самый конец функции nggLoader::activate() (за строку delete_option( 'ngg_update_exists' );).
Получаем простой патч:
+++ nggallery.php 2009-11-23 22:07:55.000000000 +0200
@@ -76,9 +76,6 @@
register_activation_hook( $this->plugin_name, array(&$this, 'activate') );
register_deactivation_hook( $this->plugin_name, array(&$this, 'deactivate') );
- // Register a uninstall hook to remove all tables & option automatic
- register_uninstall_hook( $this->plugin_name, array('nggLoader', 'uninstall') );
-
// Start this plugin once all other plugins are fully loaded
add_action( 'plugins_loaded', array(&$this, 'start_plugin') );
@@ -376,6 +373,8 @@
// remove the update message
delete_option( 'ngg_update_exists' );
+ // Register a uninstall hook to remove all tables & option automatic
+ register_uninstall_hook( $this->plugin_name, array('nggLoader', 'uninstall') );
}
function deactivate() {
Связанные записи
Автор: Vladimir; опубликовано в: Патчи; метки: NextGen Gallery, WordPress, оптимизация, патч, плагинНоя
2009


Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.






фантастика. на паре сайтов (на одном из них в совокупности с плагином файлкэш было 78 запросов вместо 109 на главной (ну что поделать такая тема там стоит и столько надо запросов делать ей)) генерировала странички по 4-5сек.
после патчинга плагина все стало радужнее: 72 запроса и 2-2,2секунды. заметно на глаз все быстрее стало
офигеть! делаю фото-сайт. пока залито порядка 150 фоток на 1 странице. на глаз грузится в 2 раза быстрее (с очисткой кеша и т.п.)
Владимир, приветствую! Как самому знающему))) подскажите, куда установить этот патч в NextGen Gallery?
Возьмите отсюда
Владимир, добрый день! У меня уже стоит NextGen Gallery и вопрос в том как правильно поступить с патчем. Я далёк от всех этих понятий и стою только в начале пути и возникают вопросы куда этот файл поместить, изменять его название или нет, поменять коды. Спасибо!
Игорь, скачайте мою версию плагина (ссылка в комментарии выше) и залейте на сервер вместо того, что установлен.
Владимир, если я удалю предыдущий плагин, у меня не выйдут косяки с записями? У меня есть запись с фото и работает слайдшоу.
Нет, всё будет отлично. Вы же сразу замените его новой версией
Спасибо, Владимир! Сейчас буду пробовать.
Спасибо! Закачал на сервер с заменой. Полёт прошёл нормально:-) Ещё хотел спросить, немного не в тему – иногда гугл хром не хочет просматривать галерею.В Файер фоксе и опере, нормально просматривается.
На этот вопрос у меня ответа, к сожалению, нет.
Владимир, а что это у Вас за прикол интересный справа вверху сайта? Позабавило:-)
Да так, от нечего делать
Представляю что будет от есть чего)))Владимир, это Вы плагин сделали или у себя на сайте поигрались?
Поигрался. JavaScript, никаких плагинов.
Владимир, когда я заменил установленный плагин NextGen Gallery, на Ваш, то хочу сказать, что даже в админке при настройках плагина, быстрее грузятся вкладки. Спасибо!
[...] Автор: Виталик Мар.10, 2010, рубрика: WordPress Галерея фотографий > WordPress > оптимизация NextGen Gallery http://blog.sjinks.pro/wordpress/patches/703-yet-another-nextgen-gallery-optimization/ [...]