3 простых совета, которые сделают ваше Rails приложение быстрее, часть #1

      Я знаю, что уже много людей писали руководства, помогающие вашему веб-приложению работать быстрее. Но я постараюсь сосредоточиться на самых простых, но наиболее эффективных методах, которые помогут вам существенно ускорить ваше приложение без потери какого-либо функционала из Ruby on Rails.
    Совет #1: Приберите ваш статический контент
    Совет #2: Уберите все лишнее
    Совет #3: Кэшируйте всю страницу

    Совет #1: Приберите ваш статический контент
      Часто бывает что одно веб-приложение подгружает сразу несколько javascripts и css стилей. Что существенно замедляет загрузку страницы так как веб-браузер открывает каждый раз новое соединение для нового файла.
    Решение заключается в том чтобы уменьшить количество внешних ресурсов вашей страницы объединив их все в один файл. Поможет нам в этом плагин AssetPackager

      Ставим:
    script/plugin install git://github.com/sbecker/asset_packager.git

      Прмер config/asset_packages.yml:
    ---
    javascripts:
    - base:
      - prototype
      - effects
      - controls
      - dragdrop
      - application
    - secondary:
      - foo
      - bar
    stylesheets:
    - base:
      - screen
      - header
    - secondary:
      - foo
      - bar

      И запускаем rake таск:
    rake asset:packager:build_all

      Дальше для javascript пишем
    <%= javascript_include_merged :base %>
    или
    <%= javascript_include_merged 'prototype', 'effects', 'controls', 'dragdrop', 'application' %>

      Для стилей пишем:
    <%= stylesheet_link_merged :base %>
    или
    <%= stylesheet_link_merged 'screen', 'header' %>

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






    <link href="/stylesheets/screen.css" type="text/css" />
    <link href="/stylesheets/header.css" type="text/css" />

      А в режиме продакшена будет:


    <link href="/stylesheets/base_packaged.css?123456789" type="text/css" />

      Теперь чтобы сделать нагрузку еще меньше переносим все свои статические файлы на другой хост (почему здесь) В рельсах это очень просто сделать, достаточно добавить в config/environments/production.rb такую строчку:
    config.action_controller.asset_host = "http://assets.example.ru"

    Теперь все image_tag, javascript_include_tag и т.д. будут указывать на этот хост.

    UPD: Вместо плагина можно использовать <%= javascript_include_tag :all, :cache => true %>, подробнее здесь. Спасибо grossu
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 10

      0
      хороший плагин. спасибо.
      ждем остальных двух советов ;)
        +1
        Отличная статья, много времени и сил ушло на то, чтобы заставить приложение ворочаться немного быстрее :(
          0
          >смогут следовать этому руководству без проблема.
          «Засем ты ругаисся, насяльника-ма?» :)
            0
            >даже люди с небольшим опытом в рельсах и развертывание веб приложений
            «ощибка-ма, насяльника!»
            +2
            спасибо за статью)
            а орфография — просто попросите в следующий раз кого-нибудь из друзей (да или даже меня) помочь отредактировать статью перед постингом — я думаю людям будет приятнее читать =)
              0
              Спасибо за предложение, обезательно воспользуюсь =)
              +2
              А вот такая штука <%= javascript_include_tag :defaults, :cache => true %> без плагинов делает то же самое. Или нет?
              • UFO just landed and posted this here
                +1
                А еще хорошо сжимать js и css с помощью YUI Compressor.

                Этому помогает плагин asset_compressor.
                  0
                  Или я чего-то не понял, или автор перекладывает проблемы RnR на плечи статичный файлов 0_0 ??? Или кто-то действительно думает, что переложив загрузку статического контента с самого быстрого веб сервера nginx на плечи RnR он «сделает ваше приложение быстрее»?

                  Only users with full accounts can post comments. Log in, please.