Использование кэширования в Joomla. Используйте кэш браузера joomla


Используйте кеш браузера

Автор: Root Опубликовано: 29 апреля 2016 Просмотров: 4408

Один из моих сайтов на движке Joomla! 3 набирал в гугловском тесте PageSpeed Insights всего 46 попугаев. Это совсем плохо и я занялся оптимизацией. Первым делом собрал и установил на сервере php - 7.0.5 это сразу дало ощутимый прирост скорости. Затем включил кеширование в админке сайта, Gzip-сжатие страниц и установил лёгкий с адаптивной вёрсткой шаблон. Затем настроил кеширование в браузере.

Для этого сначала посмотрел какие модули апача у меня подключены. Выполнил в терминале команду:

apache2ctl -M

 В списке не оказалось нужного модуля mod_headers. Я подключил его командой:

a2enmod headers

 А чтобы применённые изменения вступили в силу перезапустил апач

/etc/init.d/apache2 restart

Затем в конец файла .htaccess добавил

##Кэширование с помощью модуля mod_headers - начало <ifModule mod_headers.c> #кэшировать HTML и htm файлы на один день <FilesMatch "\.(html|htm)$"> Header set Cache-Control "max-age=43200" </FilesMatch> #кэшировать CSS, javascript и текстовые файлы на одну неделю <FilesMatch "\.(js|css|txt)$"> Header set Cache-Control "max-age=604800" </FilesMatch> #кэшировать Flash и изображения на месяц <FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png)$"> Header set Cache-Control "max-age=2592000" </FilesMatch> #отключить кэширование <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$"> Header unset Cache-Control </FilesMatch> </IfModule> ##Кэширование с помощью модуля mod_headers - конец

 В итоге сайт набрал 89 из 100 что и видно на скриншоте.

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

joomla-guru.ru

Использование кэша браузера (Google page speed)

вы кривой код значит вставили

HTML:

# разрешение кеширования файлов на стороне клиента <FilesMatch .*\.(css|js|php|phtml|shtml|html|xml)$> Header append Cache-Control private </FilesMatch> # включение заголовка Expires для всех файлов сроком на месяц # Expires headers (for better cache control) <IfModule mod_expires.c> ExpiresActive on # Perhaps better to whitelist expires rules? Perhaps. ExpiresDefault "access plus 1 month" # cache.appcache needs re-requests in FF 3.6 (thanks Remy ~Introducing HTML5) ExpiresByType text/cache-manifest "access plus 0 seconds" # Your document html ExpiresByType text/html "access plus 0 seconds" # Data ExpiresByType text/xml "access plus 0 seconds" ExpiresByType application/xml "access plus 0 seconds" ExpiresByType application/json "access plus 0 seconds" # Feed ExpiresByType application/rss+xml "access plus 1 hour" ExpiresByType application/atom+xml "access plus 1 hour" # Favicon (cannot be renamed) ExpiresByType image/x-icon "access plus 1 week" # Media: images, video, audio ExpiresByType image/gif "access plus 1 month" ExpiresByType image/png "access plus 1 month" ExpiresByType image/jpeg "access plus 1 month" ExpiresByType video/ogg "access plus 1 month" ExpiresByType audio/ogg "access plus 1 month" ExpiresByType video/mp4 "access plus 1 month" ExpiresByType video/webm "access plus 1 month" # HTC files (css3pie) ExpiresByType text/x-component "access plus 1 month" # Webfonts ExpiresByType application/x-font-ttf "access plus 1 month" ExpiresByType font/opentype "access plus 1 month" ExpiresByType application/x-font-woff "access plus 1 month" ExpiresByType image/svg+xml "access plus 1 month" ExpiresByType application/vnd.ms-fontobject "access plus 1 month" # CSS and JavaScript ExpiresByType text/css "access plus 1 year" ExpiresByType application/javascript "access plus 1 year" </IfModule> # выключение Expires для HTML-файлов и PHP-скриптов <FilesMatch .*\.(shtml|html|phtml|php)$> ExpiresActive Off </FilesMatch> # Выдача заголовка ETag FileETag MTime Size # Remove browser bugs (only needed for really old browsers) BrowserMatch ^Mozilla/4 gzip-only-text/html BrowserMatch ^Mozilla/4\.0[678] no-gzip BrowserMatch \bMSIE !no-gzip !gzip-only-text/html Header append Vary User-Agent </IfModule> Header set Cache-Control "max-age=2592000, public" RewriteEngine On RewriteBase / <ifModule mod_gzip.c> mod_gzip_on Yes mod_gzip_dechunk Yes mod_gzip_item_include file .(html?|txt|css|js|php|pl)$ mod_gzip_item_include handler ^cgi-script$ mod_gzip_item_include mime ^text/.* mod_gzip_item_include mime ^application/x-javascript.* mod_gzip_item_exclude mime ^image/.* mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.* </ifModule> <IfModule mod_headers.c> Header set Connection keep-alive </IfModule>

 

www.nulled.cc

Использование кэширования в 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 MBwith caching: 1.551 seconds, 4.19 MB

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

without caching: 1.452 seconds, 4.16 MBwith 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=contentindex.php?option=com_testcache&table=usersindex.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

 

www.joomla-code.ru


Prostoy-Site | Все права защищены © 2018 | Карта сайта