нещодавно зіткнувся з проблемою: на сайті існує близько п’яти сотень сторінок другого рівня, де необхідно було робити запити з %LIKE. зрозуміло, що такі запити, особливо у випадках, коли повертатимуть сотні або й тисячі рядків, виконуватимуться значно довше, ніж звичайний пошук рядка за ID. основним було те, що ці сторінки (себто блоки, де потрібно було робити подібні запити) не змінюються в часі, а залишаються фактично “статичними”. коли ж на сайт заповзає пошуковий робот від гугла або яндекса та робить по запиту кожних дві секунди, то на shared hosting це досить таки непогано відчувається (за день спайдери можуть проглянути 10-15 тисяч сторінок, в той час як користувачі – лише 1000). я зрозумів, що це неправильно, бо не хочеться, щоб мене вигнали на VPS через пошукових ботів, та й без них із сайту – користі то нуль :) от і постало питання хоча би закешувати “важкі” блоки для цих кількох сотень (власне, їх кілька тисяч, але другого рівня – тільки 500) сторінок.

далі постало питання вибору способу кешування. зрозуміло, що memcache або memcached (чи інші подібні) штуки – це круто, але знову з таки – хостинг не гумовий, та й на пам’ять вони дивляться добре, так що й тут не особливо розженешся. залишився лише один варіант – файловий кеш. нехай він і дуже повільний у порівнянні зі згаданими вище, власне, найповільніший з усіх, але є свої переваги: місця на диску значно більше, ніж пам’яті, окрім того взяти готовий згенерований шматок сторінки буде як мінімум удвічі швидше, ніж зробити запит до бази даних, а потім генерувати той самий шматок сторінки щоразу (а там було навіть що генерувати) наново.

файловий кеш у kohana

файловий кеш у kohana

отже, після того, як підключив модуль з кешем, справа залишилася за малим. на офіційному сайті кохани (kohana) можна натрапити на такий код:

if (isset(Cache::$instances['file']))
 {
 // Get the existing cache instance directly (faster)
 $cached_lists = Cache::$instances['file'];
 }
 else
 {
 // Get the cache driver instance (slower)
 $cached_lists = Cache::instance('file');
 }

Comments closed.