Заключительная статья по оптимизация Ruby on Rails приложения.
Совет #1: Приберите ваш статический контент
Совет #2: Уберите все лишнее
Совет #3: Кэшируйте всю страницу
Совет #3: Кэшируйте всю страницу
Этот, последний совет, является наиболее эффективным. Веб-сервер кэширует страницу полностью, а затем отдает лишь статический контент. Что бы начать работать с caches_page достаточно просто посмотреть замечательный railscasts.
Необходимо помнить что после полного кэширования страницы, она будет отображаться одинаково для всех пользователей, не будет производиться не каких проверок или запросов к базе. Поэтому следует избавиться в странице от всех конструкций вида:
Вы все ещё можете использовать JavaScript для того чтобы показывать или скрывать код для зарегистрированных пользователей. Вот небольшой пример:
Так же, вы больше не сможете полноценно использовать
Ставим:
В ApplicationController пишем:
В контроллере:
А в layout:
Теперь все flash сообщения будут записываться в Куки. Кстати для работы этого плагина необходимо поставить gem json, но в моей Ubuntu 8.10 с этим возникли проблемы, этот гем упорно не хотел вставать, как потом выяснилось подобная проблема не только у меня. ешил я эту проблему так, поставил
Надеюсь эти советы вам помогли.
Совет #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"
. И все заработало как часы.Надеюсь эти советы вам помогли.