4 February 2009

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

Ruby on Rails
Translation
Original author: 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". И все заработало как часы.

  Надеюсь эти советы вам помогли.
Tags: ruby ruby on rails оптимизация кэширование cache
Hubs: Ruby on Rails
+7
1.9k 23
Comments 9
Ads
Top of the day