Использование кэширования в Joomla

06/01/2010 Документация Joomla 1.5

Кэшириование в Joomla использовать достаточно легко.

Перед тем как использовать кэширование, мы должны убедиться в том, что кэшируемая функция действительно работает быстрее чем функция без кэша. Для этого можно использовать анализа производительности кода.

Создадим элементарный компонент

/components/com_testcache/testcache.php

Посмотрим следующий код

<?php
// Create the profiler object.
$profiler = new JProfiler();

// Do some stuff.
echo $profiler->mark( ' seconds to do stuff' );

?>

Результатом будет что-то вроде

seconds to do stuff: 0.000 seconds, 3.87 MB

Создадим простой класс и метод

<?php 
// No direct access.
defined( '_JEXEC' ) or die( 'Restricted access' );

class TestClass {

function testMethod() {

// Get a reference to the global database object.
$db = & JFactory::getDBO();

// Execute the same database query 250 times.
for ($i=0; $i<250; $i++) {
$db->setQuery( 'SELECT * FROM #__content' );
$rows = $db->loadObjectList();
}

return $rows;
}
}

// Run the test.
$rows = TestClass::testMethod();

?>

Здесь можно увидеть что происходит 250 обращений к БД, результат работы этой функции будет очень медленный. Конечно в реальности такого делать не нужно :).

Объект кэша

В начале нужно убедиться что включено кэширование в глобальной конфигурации сайта.

Получаем информацию использую класс JFactory

<?php
$cache = & JFactory::getCache();
?>

Если вы хотите что бы ваш компонент кэшировался не зависимо от глобальной конигурации, то это можно установить

<?php
$cache->setCaching( 1 );
?>

Даьлше используем метод call

<?php
$rows = $cache->call( array( 'TestClass', 'testMethod' ) );
?>

Если нужно кэшировать функцию, которая не находится в классе, то массив использовать не нужно

<?php
$rows = $cache->call( 'testFunction' );
?>

Для очистки кэша можно использовать следующий метод

<?php
$cache->cleanCache();
?>

Этод метод удалит все файлы в папке /cache

Теперь собирем это все в одно целое и посмотрим на результат.
 
<?php
 
class TestClass {
 
function testMethod() {
 
// Get a reference to the global database object.
$db = & JFactory::getDBO();
 
// Execute the same database query 250 times.
for( $i=0; $i<250; $i++) {
$db->setQuery( 'SELECT * FROM #__content' );
$rows = $db->loadObjectList();
}
 
return $rows;
}
}
 
// Get a reference to the global cache object.
$cache = & JFactory::getCache();
 
// Run the test without caching.
$profiler = new JProfiler();
$rows = TestClass::testMethod();
echo $profiler->mark( ' without caching' );
 
// Run the test with caching.
$profiler = new JProfiler();
$rows = $cache->call( array( 'TestClass', 'testMethod' ) );
echo $profiler->mark( ' with caching' );
 
?>

При первой загрузки получим следующее

without caching: 1.453 seconds, 4.16 MB
with caching: 1.551 seconds, 4.19 MB

Теперь обновим страницу и результат будет уже

without caching: 1.452 seconds, 4.16 MB
with caching: 0.005 seconds, 4.16 MB

Результат сам говорит за себя. По умолчанию время жизни кэша в Joomla стоит 900 секунд.

Использование параметров

В этом примере функция возвращает одни и те же данные снова и снова. Однако, часто вы будете писать функции, которые принимают некоторые аргументы и выбирают различные данные. Для этого достаточно просто добавить аргументы вызова. Немного расширим наш пример добавив переменную вместо таблицы.

<?php
 
class TestClass {
 
function testMethod( $table ) {
 
// Get a reference to the global database object.
$db = & JFactory::getDBO();
 
// Execute the same database query 250 times.
for( $i=0; $i<250; $i++) {
$db->setQuery( "SELECT * FROM #__$table" );
$rows = $db->loadObjectList();
}
 
return $rows;
}
}
 
// Determine which database table to query.
$table = JRequest::getVar( 'table', 'content' );
 
// Get a reference to the global cache object.
$cache = & JFactory::getCache();
 
// Run the test without caching.
$profiler = new JProfiler();
$rows = TestClass::testMethod( $table );
echo $profiler->mark( ' without caching' );
 
// Run the test with caching.
$profiler = new JProfiler();
$rows = $cache->call( array( 'TestClass', 'testMethod' ), $table );
echo $profiler->mark( ' with caching' );
 
?>

Вы можете посмотреть результат работы в своем тестовом компоненте, задавая различные значения для переменной $table.

index.php?option=com_testcache&table=content
index.php?option=com_testcache&table=users
index.php?option=com_testcache&table=menu

Если нужно вызвать функцию экземпляра класса ($something->somefunction или something::somefunction) вы можете использовать

 

$something=$this->SomeOtherfunction;
$mySomething=$cache->call( array( $something, 'somefunction' ), 'par1','par2','par3');

Вы можете передать параметры, разделеные запятой как указано в примере выше.

Подводим итоги

Этот пример просто демонстрирует использование кэша. При написании реальных расширений конечно навряд ли вы будете использовать 250 запросов к БД. Однако использование кэширование не всегда ускоряет работу скрипта. Вы можете просто удалить цикл в этом примере и убедиться в этом. Поэтому важно использовать анализа производительности кода, что бы убедиться действительно ли кэширование может ускорить работу вашего кода. Кэширование в основном используется при очень больших БД.

Так же важно помнить что функция может кэшироваться если она возвращает одни и те же данные каждый раз для данного набора параметров.

Источник: Using caching to speed up your code


6 

Комментарии   

 
0 Stephanie
17.04.2017 07:23
Hey there! Do you know if they make any plugins to assist
with Search Engine Optimization? I'm trying to get my blog to rank for some targeted keywords
but I'm not seeing very good success. If you know
of any please share. Thanks!

Here is my weblog :: приведенная ссылка: http://geschenkefuermaenner.info/
Ответить
 
 
0 Dong
16.05.2017 03:02
First of all I want to say awesome blog! I had a quick question that I'd like to ask if you don't mind.
I was curious to find out how you center yourself and
clear your head before writing. I have had a tough
time clearing my thoughts in getting my ideas out.
I truly do enjoy writing but it just seems like the first 10 to 15 minutes are
wasted simply just trying to figure out how to begin. Any ideas or tips?
Many thanks!

my website diet solution - hannavaros.wordpress.com: http://hannavaros.wordpress.com/category/heel-pain,
Ответить
 
 
0 Berniece
20.07.2017 03:58
Hello guys! Who wants to chat with me? I'm live at HotBabesCams.com, we can chat, you can watch
me live for free, my nickname is Anemonalove: https://3.bp.blogspot.com/-u5pGYuGNsSo/WVixiO8RBUI/AAAAAAAAAFA/JWa2LHHFI2AkHParQa3fwwHhVijolmq8QCLcBGAs/s1600/hottest%2Bwebcam%2Bgirl%2B-%2BAnemonalove.jpg
, here is my pic:

https://3.bp.blogspot.com/-u5pGYuGNsSo/WVixiO8RBUI/AAAAAAAAAFA/JWa2LHHFI2AkHParQa3fwwHhVijolmq8QCLcBGAs/s1600/hottest%2Bwebcam%2Bgirl%2B-%2BAnemonalove.jpg
Ответить
 
 
0 Neva
13.08.2017 13:43
Threе quartеrѕ of adult Internet users utilise social networking and
time inveѕted in the Internet expireѕ tԝo-thirds from 2009.
Mobile video is at ann ever increasing rate fаt loss people plug into
Smart phones аnd that i - Pads. In order to best exploit tthe opportunities thrown ready to accept your small business by this
cⲟncept ѡould be tto understɑnd and appreciate
the changing dynamics of online searches and then adaptіng your methods to better satisfy the end result.


Also visit my web page ... online posting ads serѵice: http://www.cldisplay.com/service/classified-ad-posting/
Ответить
 

Добавить комментарий


Защитный код
Обновить