Настройка кэширования

50Hz

Осваивается
Регистрация
02.04.2014
Сообщения
24
Реакции
1
Пытался разобраться в настройке кэширования медиавики по английской вики, но там сильно много накручено.

Может можно составить понятное руководство?

Я пока что в LocalSettings.php выполнил эту процедуру:
## Set $wgCacheDirectory to a writable directory on the web server
## to make your wiki go slightly faster. The directory should not
## be publically accessible from the web.
$wgCacheDirectory = "$IP/cache";

В директории cache появились два файла: l10n_cache-en.cdb и l10n_cache-ru.cdb размером по несколько сотен килобайт и все. Файлы не обновляются уже пару недель.

Это и есть включенное кэширование?
 
MediaWiki does not need to be configured to do PHP caching and will "just work" if you install any of them. You can use phpinfo() to verify that the cache is installed and configured properly. More information is available from these projects.
Но для начала неплохо бы узнать информацию о вашем сервере.
 
Ага, файлы l10n_cache-en.cdb и l10n_cache-ru.cdb, это - кэшированная локализация.

На сервере из php-акселераторов ничего нет. Есть только Zend Guard Loader, но он не кэширует вроде бы.

Тут вроде объяснено про кэширование
http://www.mediawiki.org/wiki/Manual:Cache/ru

Попробовал включить $wgMainCacheType = CACHE_DBA; Это вызвало ошибку:
Fatal error: Call to undefined function dba_open() in /var/www/.../includes/objectcache/DBABagOStuff.php on line 103

Включил $wgMainCacheType = CACHE_DB; Вики заработала. Я так понимаю, нужно посмотреть на размер базы данных, он должен вырасти?
 
За час размер базы данных увеличился на 1,5 мБ, похоже работает?
 
Может быть, когда включаешь $wgMainCacheType = CACHE_DBA; нужно еще конфигурировать переменные для сохранения кэша на диске?
http://www.mediawiki.org/wiki/Manual:File_cache
 
Ну так поставьте XCache например, и определитесь что хотите кэшировать =)
 
У меня нет собственного хостинга :)
 
Ну тогда вам к хостеру с этими вопросами.
 
Приветствую!
Когда посетителей было не много хостинг справлялся и об оптимизации я даже не думал, а в параметре было $wgMainCacheType = CACHE_NONE;
Решил поставить $wgMainCacheType = CACHE_DB;, в итоге за сутки размер БД вырос всего на 15 МБ, а занимаемое место на диске возросло на 1ГБ, но сегодня утром стало вновь на 1ГБ больше...
Кто может объяснить как работает кеширование и как лучше его настроить....
Английские мануалы читал, но ввиду того что пользуюсь переводчиками всего понять не смогу...
 
1.
С помощью memcached и .htaccess, сохраняет сгенерированные страницы в папке на диске и при их наличии сразу редиректит на них. Если стоит nginx - работает мгновенно, практически как статичный сайт. Для залогиненных юзеров кешируется все через memcached

LocalSettings:

$wgMainCacheType = CACHE_MEMCACHED;
$wgParserCacheType = CACHE_MEMCACHED; # optional
$wgMessageCacheType = CACHE_MEMCACHED; # optional
$wgMemCachedServers = array( "127.0.0.1:11211" );

$wgSessionsInObjectCache = true; # optional
$wgSessionCacheType = CACHE_MEMCACHED; # optional

## Set $wgCacheDirectory to a writable directory on the web server
## to make your wiki go slightly faster. The directory should not
## be publically accessible from the web.
$wgUseFileCache = true;
$wgShowIPinHeader = false;
$wgCacheDirectory = "$IP/cache";
$wgFileCacheDirectory = "$IP/../html_cache";
$wgFileCacheDepth = 0;
$wgDisableCounters = true;
$wgInvalidateCacheOnLocalSettingsChange = true;

$wgUseETag = true;

.htaccess:

# кеширование в браузере на стороне пользователя
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access 7 days"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/x-icon "access 1 year"
</IfModule>

# Cache-Control
<ifModule mod_headers.c>
# 30 дней
<filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=2592000, public"
</filesMatch>
</ifModule>

RewriteBase /
# If a cached page exists under /w/html_cache, do an internal redirect to it:
RewriteCond %{HTTP_COOKIE} !UserID=
RewriteCond %{QUERY_STRING} !.
ReWriteCond %{THE_REQUEST} ^GET\x20/wiki/([^\x20/]+)\x20HTTP
RewriteCond %{DOCUMENT_ROOT}/html_cache/%1.html -s
RewriteRule ^wiki/(.+)$ /html_cache/%1.html [B,L,NS]

2. Если нет возможности применить вариант 1, то всего две строки

$wgMainCacheType = CACHE_ANYTHING;
$wgUseFileCache = true;

уже дадут заметное снижение нагрузки.
 
Последнее редактирование:
1.
С помощью memcached и .htaccess, сохраняет сгенерированные страницы в папке на диске и при их наличии сразу редиректит на них. Если стоит nginx - работает мгновенно, практически как статичный сайт. Для залогиненных юзеров кешируется все через memcached

LocalSettings:

$wgMainCacheType = CACHE_MEMCACHED;
$wgParserCacheType = CACHE_MEMCACHED; # optional
$wgMessageCacheType = CACHE_MEMCACHED; # optional
$wgMemCachedServers = array( "127.0.0.1:11211" );

$wgSessionsInObjectCache = true; # optional
$wgSessionCacheType = CACHE_MEMCACHED; # optional

## Set $wgCacheDirectory to a writable directory on the web server
## to make your wiki go slightly faster. The directory should not
## be publically accessible from the web.
$wgUseFileCache = true;
$wgShowIPinHeader = false;
$wgCacheDirectory = "$IP/cache";
$wgFileCacheDirectory = "$IP/../html_cache";
$wgFileCacheDepth = 0;
$wgDisableCounters = true;
$wgInvalidateCacheOnLocalSettingsChange = true;

$wgUseETag = true;

.htaccess:

# кеширование в браузере на стороне пользователя
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access 7 days"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/x-icon "access 1 year"
</IfModule>

# Cache-Control
<ifModule mod_headers.c>
# 30 дней
<filesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf)$">
Header set Cache-Control "max-age=2592000, public"
</filesMatch>
</ifModule>

RewriteBase /
# If a cached page exists under /w/html_cache, do an internal redirect to it:
RewriteCond %{HTTP_COOKIE} !UserID=
RewriteCond %{QUERY_STRING} !.
ReWriteCond %{THE_REQUEST} ^GET\x20/wiki/([^\x20/]+)\x20HTTP
RewriteCond %{DOCUMENT_ROOT}/html_cache/%1.html -s
RewriteRule ^wiki/(.+)$ /html_cache/%1.html [B,L,NS]

2. Если нет возможности применить вариант 1, то всего две строки

$wgMainCacheType = CACHE_ANYTHING;
$wgUseFileCache = true;

уже дадут заметное снижение нагрузки.
2 вариант особо не помог, хотя нагрузка снизилась,
сейчас тестирую первый вариант, нагрузка уменьшилась (пока точно сказать на сколько не могу), беспокоит то что в течении суток запросов к БД 0 (ноль)..... так должно быть?
 
Назад
Верх