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

Автор оригинала: macournoyer
  • Перевод
  Заключительная статья по оптимизация Ruby on Rails приложения.
Совет #1: Приберите ваш статический контент
Совет #2: Уберите все лишнее
Совет #3: Кэшируйте всю страницу

Совет #3: Кэшируйте всю страницу

  Этот, последний совет, является наиболее эффективным. Веб-сервер кэширует страницу полностью, а затем отдает лишь статический контент. Что бы начать работать с caches_page достаточно просто посмотреть замечательный railscasts.

  Необходимо помнить что после полного кэширования страницы, она будет отображаться одинаково для всех пользователей, не будет производиться не каких проверок или запросов к базе. Поэтому следует избавиться в странице от всех конструкций вида: <%= ... if logged_in? %>

  Вы все ещё можете использовать JavaScript для того чтобы показывать или скрывать код для зарегистрированных пользователей. Вот небольшой пример:
var CurrentUser = {
  loggedIn: false,
  author: false,
  admin: false,

  init: function() {
      this.loggedIn = Cookie.get('token') != null;
      this.admin = Cookie.get('admin') != null;
    }
  };

  var Application = {
    init: function() {
      CurrentUser.init();
    },

    onBodyLoaded: function() {
      if (CurrentUser.loggedIn) {
        $$('.if_logged_in').invoke('show');
        $$('.unless_logged_in').invoke('hide');
      }
     if (CurrentUser.admin) {
       $$('.if_admin').invoke('show');
     }
  }
};

  Так же, вы больше не сможете полноценно использовать <%= flash[:notice] %>. Однако это не проблема, есть замечательный плагин Cacheable Flash

Ставим:
ruby script/plugin install svn://rubyforge.org/var/svn/pivotalrb/cacheable_flash/trunk

В ApplicationController пишем:
include CacheableFlash

В контроллере:
flash[:notice] = "Welcome to Eternity" if current_user

А в layout:
<div id="error_div_id" class="flash flash_error"></div>
<div id="notice_div_id" class="flash flash_notice"></div>


  Теперь все flash сообщения будут записываться в Куки. Кстати для работы этого плагина необходимо поставить gem json, но в моей Ubuntu 8.10 с этим возникли проблемы, этот гем упорно не хотел вставать, как потом выяснилось подобная проблема не только у меня. ешил я эту проблему так, поставил ruby-json, и заменил в /vendor/plugins/cachable-flash/init.rb строчку gem "json" на gem "ruby-json". И все заработало как часы.

  Надеюсь эти советы вам помогли.
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 9

    +1
    Этот, последний совет, является наиболее эффективным

    Именно поэтому вы их приберегли под конец повести?
      +2
      «3 простых совета, часть 3» — звучит как «Возвращение Мухтара-2» :)
        0
        а если у пользователя отключен JS (или это мобильный агент какой-нибудь)?
          +1
          А если у пользователя нет интернета?

          Извините, не сдержался.
            +1
            Да, стоит делать немного не так:
            1. делается страница, которая затем вся кешируется
            2. в странице есть ssi
            2. отдается nginx, он подставляет ssi (как раз личные данные пользователя).
            0
            Можно ещё было сказать про caches_action и cache do… end. caches_page не всегда применим ИМХО
              0
              Различные шпаргалки В том числе и по руби.
                0
                Если уж на то пошло, то самый мегакрутой совет — профилируйте, анализируйте и оптимизируйте важные места кода.
                То что можно и нужно кэшировать статические страницы — это, конечно, суперновость, на на сайтах которые приходилось мне разрабатывать таких страниц был малый процент. В деле оказываются гораздо более полезны caches_action и cache do… end. см также railscasts.com/tags/18, плагин cache_fu ( errtheblog.com/posts/57-kickin-ass-w-cachefu ), ну и конечно www.railsenvy.com/2007/2/28/rails-caching-tutorial

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

              Самое читаемое