WP File Cache 1.2.1
Теперь точно последний :-)
Я нарушил своё обещание и написал новую версию плагина WP File Cache — 1.2.1. Но эта версия будет последней (скорее всего). Что изменилось: оптимизирован PHP-код, ускорена работа методов класса FileCache (лишние проверки перенесены в функции wp_cache_xxx, что позволило избежать повторного исполнения одного и того же кода); блокировка файла при записи; плагин требует PHP версии не ниже 5.1.0; добавлена [...]
← Вернуться к полной версии записи «WP File Cache 1.2.1»…
Автор: Vladimir; опубликовано в: Плагины WordPress; метки: WordPress, WP File Cache, кэш, плагинЯнв
2010
Комментарии к статье «WP File Cache 1.2.1» (46) »
Пожалуйста, не используйте эту форму для комментирования! Данная форма предназначена исключительно для ботов.
Оставить комментарий к записи «WP File Cache 1.2.1»
गते गते पारगते पारसंगते बोधि स्वाहा
Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.


плагин не кэширует подобные запросы
можно как-то посодействовать, чтобы они обрабатывались?
вордпресс съел код, вот исправленный
if ($people == '') {} else {
echo "<ul>";
foreach($people as $person) {
$exist = post_exist($person->slug);
if($exist == '') {
echo "<li>$person->name</li>";
} else {
echo "<li><a href=\"/$person->slug/\">$person->name</a></li>";
}
}
echo "</ul>";
}
«если пост есть – выводим название вместе с ссылкой, если нет – просто название».
А что именное не кэшируется?
post_exists()илиget_the_terms()?post_exists()
global $wpdb;
$post_slug = stripslashes(sanitize_post_field('post_name', $title, 0, 'db'));
$query = "SELECT ID FROM $wpdb->posts WHERE 1=1 AND post_status = 'publish' AND post_type = 'post'";
$args = array();
if (!empty ($title)) {
$query .= ' AND post_name = %s';
$args[] = $post_slug;
}
if (!empty ($args))
return $wpdb->get_var($wpdb->prepare($query, $args));
return 0;
}
Как-то так:
function post_exists($title)
{
$res = wp_cache_get($title, 'existing-posts');
if (false === $res) {
global $wpdb;
$query = "SELECT ID FROM $wpdb->posts WHERE 1=1 AND post_status = 'publish' AND post_type = 'post'";
$args = array();
if (!empty ($title)) {
$post_slug = stripslashes(sanitize_post_field('post_name', $title, 0, 'db'));
$query .= ' AND post_name = %s';
$args[] = $post_slug;
}
if (!empty ($args))
$res = $wpdb->get_var($wpdb->prepare($query, $args));
}
else {
$res = 0;
}
wp_cache_set($title, $res, 'existing-posts');
}
return $res;
}
Группу
existing-posts, вероятно, нужно чистить при изменении статуса записи и удалении записи.PS — а в WordPress вроде бы существует функция
post_exists()?Владимир, спасибо за этот отличный плагин! Скорость загрузки страниц уменьшилась вдвое, но появилось много ошибок в админке. Из-за этого пришлось отказаться от использования плагина.
Если можно, сделайте, пожалуйста, в следующих версиях возможность отключения кеширования для админки. Спасибо.
А что за ошибки? И какие плагины стоят? Отказаться от кэширования в админке будет проблемно, так как кэш может устареть.
[...] Где скачать, как установить и настроить, лучше всего прочитать на сайте разработчика: SJOC (актуальная версия 1.0) WPFC (актуальная и последняя версия 1.2.1) [...]
[...] После того, как перерыл очередную гору материалов остановился на SJ Object Cache. По ссылке можете найти полное его описание, функционал, инструкции по установке(устанавливается, как любой другой плагин), а так же фидбэк с разработчиком. Отмечу, что плагин ориентирован на VDS-системы и для его работы необходимы eAccelerator/APC/xCache. Для шаред-хостингов предназначен его аналог от того же автора – WP File Cache. [...]
Установил плагин, не ругается, все ок, но в /cache ничего не создается и фактически ничего не изменилось. В чем может быть дело?
Пробовал /cache поменять на /dev/shm – ругается что директории кеша нет, хотя она есть
Например, у PHP нет прав на запись в каталог с кэшем
На сколько я понял, скрипт проверяет доступ к папке (я устанавливал руками chmod 777)
В папке /cache создалось много других пустых папок:
/category
/category_relationships
/default
/general
…etc
Но файлов-кеша нет. Что это может быть?
Смотрите логи ошибок web-сервера. Возможно, suphp не даёт записать файл, возможно, у Вас включен safe mode.
Разобрался. Оказывается скрипт создавал директории от apache:apache и потом не мог туда ничего записать. После смены chown – стал писать файлы и насоздавал 5,5Мб, но по скорости загрузки страниц выигрыша не произошло. С 2 – 2,5 сек увеличилось до 3-4 сек.
Подозреваю наличие open_basedir.
open_basedir – возможно. Не знаю где смотреть и как с ним поступить?!
Классный плагин. Когда включил его, количество запросов с главной уменьшилось в три раза — с 100 да 29. С другими плагинами были проблемы.
Однако теперь вот заметил, что в некоторых разделах не выводится на родительской странице список «дочерних» { функция wp_list_pages( $args ) в шаблоне страницы} и выдаёт ошибку:
Fatal error: Out of memory (allocated 65536000) (tried to allocate 926716 bytes) in **/plugins/wp-file-cache/lib/class.FileCache.php on line 193
Ошибка исчезает, если снять галочку с «Сохранять кэш между сессиями», однако, как вы и пишите, тогда производительность падает.
На хостинге 64М ОЗУ (не ахти, конечно, и это часто даёт ошибки) и на сайте «тяжёлый» плагин Simple:press — кажись, кстати, только ваш WP File Cache с ним без конфликтов работает.
Может это сообщение как-то поможет вам для усовершенстования плагина. В любом случае, буду благодарен за ответ.
Строка 193 — это не там, где
unserialize()вызывается? Если да, то вряд ли смогу помочь — при десереализации действительно требуется дополнительная память.да, там.
Немного разобрался — в шаблоне страницы использовалась wp_list_pages() и отбирала до 30МБ (!) памяти. Удалил функцию, прописал списки вручную.
Но теперь в админке не открываются страницы на редактирование (с записями — всё ок). Возможно, что-то похожее и у меня, но с др. плагином.
Отключил связь страниц и форума – но не помогло.
При отключении сохранения кэша между сесиями всё работает, страницы можно редактировать.
Do not use cache in the Admin Panel – активировано.
Если сохранять кеш межде сессиями, у меня не открывается /wp-admin/post-new.php?post_type=page (добавить страницу), хоть /wp-admin/post-new.php (добавить запись) — работает. Отображается только class=»wrap» с заголовком «Добавить страницу» и со словами «опубликовать», «сохранить» и тд
Проблема исчезает, если в несохраняемые группы добавить `posts` — но тогда, соответственно, эффективности кеша практически не заметно. Может вместо posts что-то более конкретное задать можно?
Буду благодарен, если поможете исправить.