Меню Содержимое
Главная

Ссылки

Сейчас же skype скачать на нашем сайте можно бесплатно.
Супер сервера minecraft 1.1 для геймеров
Дешево суши доставка сердито

Разное





RuWeb.net
Уменьшаем нагрузку от поисковых роботов Печать 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