Меню Содержимое
Главная
Уменьшаем нагрузку от поисковых роботов Печать E-mail

Довольно часто пользователи жалуются на излишнюю прожорливость Jooml-ы. Иногда это правда, а иногда просто ее надо настроить. В данной заметке будет расказано о замеченном факте возникновения "лишней нагрузки" на сервер проектами, основанными на Jooma 1.0 и о том, какие есть рецепты борьбы с этим.

И так попорядку. Существует ряд причин почему Joomla грузит:

  • Это большой програмный комплекс, а PHP это все-таки интерпритатор (по умолчанию, не будем спорить о нюансах и копаться в дебрях истории и современности) и без дополнительных модулей нагрузка на процессор при выводе страниц бывает приличная просто из-за величины исполняемого кода.
  • Не включен модуль кеширования посещенных страниц. Тут как говориться без комментариев, надо включать.
  • По сайту время от времени, а иногда и одновременно, гуляет большое количество поисковых и всяких других ботов. Смотришь по счетчикам посещения страниц, у тебя за день не более 50-500, а провайдер кричит и заваливает письмами о превышении лимита процессорного времени.

И так первый случай лечится достаточно просто и стандартно и рекомендация тут может быть только одна. Я применяю на своих сайтах модуль apache eAccelerator (его не трудно найти в гугле) его задача одна сохранить -откомпилированный php код для дальнейшего использования без перекомпиляции. После подключения этого модуля на реальных сайтах нагрузка вцелом на систему уменьшается примерно в 3-5 раз. Что согласитесь прилично!!! А главное достаточно просто. Если вы не можете сами поставить на сервере этот модуль, то попросите сделать это админов хостинга, когда они в очередной раз пришлют вам петицию о перегрузке их сервера вашими задачами. Я думаю они вам не откажут. Ну а если будут сомневаться пусть почитают как хабрахабра испытала это на себе.

Про второй случай отправим читать маны ....

И так рассмотрим третий случай, что можно сделать с этой "заразой". Ведь не запрещать же поисковикам ходить на наш сайт. В большинстве случаев мы сами рады, что они к нам заходят. Надо только минимизировать нагрузку от них.
А для это достаточно модернизировать механизм кеширования. (все дальнейшее описыает правку для Joomla 1.0.10-12)

Находим файл /includes/Cache/Lite/Lite.php и в нем в конец файла добавляем функцию:

(Прежде чем проделывать все изменения настоятельно рекомендую сделать копию данного файла)

 
  function _check_brouser() {
    $agent = '';
    if ( isset($_SERVER['HTTP_USER_AGENT']) ) {
      $agent = $_SERVER['HTTP_USER_AGENT'];
    } else {
      $agent = 'google';
    }
    if (preg_match( "/Rambler/i", $agent)
    || preg_match( "/yahoo/i", $agent )
    || preg_match( "/cravel/i", $agent )
    || preg_match( "/yahoo/i", $agent )
    || preg_match( "/google/i", $agent )
    || preg_match( "/bot/i", $agent )
    || preg_match( "/xap/i", $agent )
    || preg_match( "/sape/i", $agent )
    || preg_match( "/search/i", $agent )
    || preg_match( "/slurp/i", $agent )
    || preg_match( "/http/i", $agent )
    || preg_match( "/upload/i", $agent )
    || preg_match( "/yandex/i", $agent )) {
 
         $this->_brouser = false;
    } else {
         $this->_brouser = true;
    }
  }
Находим строчки:
 
  var $_automaticSerialization = false;
..........
 
  function Cache_Lite($options = array(NULL))
  {
..........
    $this->_refreshTime = time() - $this->_lifeTime;
  }
 
 
..........
 
  function get($id, $group = 'default', $doNotTestCacheValidity = false)
  {
..........
        }
...........
 
  function remove($id, $group = 'default')
  {
.........
        }
 
 
и добавляем:
 
  var $_automaticSerialization = false;
  var $_brouser = false;
.........
 
  function Cache_Lite($options = array(NULL))
  {
.........
    $this->_refreshTime = time() - $this->_lifeTime;
                $this->_check_brouser();
  }
..........
  function get($id, $group = 'default', $doNotTestCacheValidity = false)
  {
           if (!$this->_brouser) $doNotTestCacheValidity = true;
...........
        }
...........
  function remove($id, $group = 'default')
  {
          if (!$this->_brouser) return true;
............

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

Обсудить новость в форуме. (0 сообщений)
 
След. »

IT Законы Мэрфи

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


Sape.ru