Too many database queries
-
Привет.
Плагин создаёт большую нагрузку: делает много запросов в базу данных и съедает ОЗУ.Для сайта, у которого немного вложений, это не критично. Но если на сайте очень много вложений, как например на моём сайте, то это становится проблемой.
В файле boxersandswipers.php есть запрос:
$boxersandswipers->attachments = $wpdb->get_results(
“
SELECT post_title, ID
FROM $wpdb->posts
WHERE post_type = ‘attachment’
AND post_mime_type = ‘image/jpeg’
OR post_mime_type = ‘image/gif’
OR post_mime_type = ‘image/png’
OR post_mime_type = ‘image/bmp’
OR post_mime_type = ‘image/tiff’
OR post_mime_type = ‘image/x-icon’
“
);Этот запрос берёт ВСЕ вложения, которые есть в БД.
А, например, у меня их больше 12000 уже.
Далее в файле inc/BoxersAndSwipers.php в функции add_anchor_tag_content
происходит перебор массива, в котором для каждого из вложений поста ищется title, сравнивая ссылки, найденные в посте, и ссылки ВСЕХ вложений в БД.
Кроме того, используется функция get_post_meta, которая также обращается к БД.
Это всё создаёт огромную нагрузку на БД и расходует память.Я считаю, что такой подход не совсем правильный. В большинстве блогов используются вложения для конкретного поста. И очень редко, если одно вложение используется в нескольких постах.
Поэтому я сделал так.
В функции add_anchor_tag_content сразу после строки с условием:
if(preg_match_all(“/\s+href\s*=\s*([\”\’]?)([^\s\”\’>]+)(\\1)/ims”, $link, $result) !== false){
вставляю код:
global $post;
$attachments = get_children(
array(
‘post_parent’ => $post->ID,
‘post_type’ => ‘attachment’,
‘post_status’ => ‘any’,
‘post_mime_type’ => ‘image’
)
);
а также меняю все “$this->attachments” на “$attachments” в той же функции.Всё. Теперь запрашиваться будут только вложения конкретного одного поста, причём один раз. И затем буду сравниваться ссылки и записываться title.
После этого количество запросов к БД и расход памяти уменьшаются в разы.
До этого было (загрузка поста):
запросов: > 1500
память: > 60 МБ
время: > 20 с + время вывода на экран
В общей сложности сайт грузился больше 1 минуты.После оптимизации стало (загрузка поста):
запросов: ~ 45-50
память: ~ 100-400 кБ
время: ~ 0,001-0,04 с + время вывода на экран
В общей сложности сайт грузится примерно 1-3 секунды.Может быть автор проведёт оптимизацию запросов, и подкорректирует плагин в следующем обновлении.
Версия плагина: 2.33
- The topic ‘Too many database queries’ is closed to new replies.