Ускорение загрузки веб-сайта на Ruby on Rails

Posted by dobrych Wed, 31 Oct 2007 00:00:00 GMT

Поигрался я на днях с интересным плагином к Firefox – YSlow от Yahoo и понял на сколько плохи дела у меня с оптимизацией загрузки веб-сайта. Очень полезная утилита, советую всем веб-мастерам, разработчикам и гикам.

дрезина для рельсов Для рельсов как всегда есть готовые дрезины, ой плагины :-) Поэтому сделать все получилось довольно быстро, не считая некоторого шаманства с typo. Есть две статьи по которым можно в элементаре поставить плагин и настроить на свой Rails-проект. Поэтому просто привожу на них ссылки – Сам плагин, с документацией и YSlow and Rails performance.

Пошагово:

  1. ./script/plugin install http://sbecker.net/shared/plugins/asset_packager
  2. rake asset:packager:create_yml
  3. vim config/asset_packages.yml. См. мой вариант ниже.
  4. rake asset:packager:build_all
  5. Правим темплейт <%= javascript_include_merged :base %>, тоже для css – <%= stylesheet_link_merged :base %>
  6. Рестартуем (если надо) ruby- процесс.

Особенности движка typo. В app/helpers/articles_helper.rb есть специальный хелпер (page_header) для построения заголовка страницы, так вот вставку javascript надо делать именно там, а не в темплейте.

Так в чем же суть убыстрения? В том, что asset_packager пакует все css/js файлы в один (соответственно один js и один css файл). Плюс оптимизирует сам код – удаляет комментарии, лишние пробелы. Получаются в итоге два очень хорошо утрамбованные статические файла, которые еще при отдаче со сжатием (gzip) вообще будут грузиться моментально. Для примера по статистике YSlow livedev.org стал грузиться в два раза быстрее.

Мой config/asset_packages.yml

--- 
javascripts:
- base:
  - cookies
  - prototype
  - effects
  - typo
stylesheets:
- base:
  - theme/layout
  - theme/content
  - theme/body

Обновление сайта или livedev beta 1

Posted by dobrych Fri, 03 Aug 2007 12:23:00 GMT

livedev beta Длительное время я не обновлял блог. На это несколько причин. Первая – это нехватка ресурсов. Т.к. на работе близится время запуска проекта, то на личные проекты остается все меньше сил и времени. Вторая причина – это желание сделать из livedev нечто большее, чем просто персональный блог. Обдумывая на досуге дальнейшие планы по развитию сего сайта, пришел к выводу, что пора его одеть в свой уникальный дизайн и публиковать немного больше обзоров и мнений на более широкую тему. Все конечно будет крутиться вокруг веб-разработки, поэтому круг читателей надеюсь не поменяется, а только расширится.

Текущий внешний вид конечно нельзя назвать полноценным дизайном, это всего лишь наброски. Но я решил обновить темплейт блога в любом случае, хотя бы как beta вариант. Чтобы это стало стимулом быстрее довести внешний вид сайта до конечного варианта.

Сделаю предварительный анонс, что именно хочу обновить/добавить на сайте в первую очередь:

  • несколько статей или заметок на тему django + ajax;
  • пробный подкаст на тему веб-разработки;
  • улучшить текущий стиль сайта.

Перевод интерфейса Typo на русский 3

Posted by dobrych Wed, 06 Jun 2007 23:45:00 GMT

Я практически закончил сабж. Осталось немного согласовать с trunk-ом. Если кому-то интересно попробывать beta-версию, напишите мне на dobrych [at] gmail.com. Интересно Ваше мнение прежде чем буду выкладывать в общее пользование.

Typo 4.1 — обновляемся

Posted by dobrych Sun, 15 Apr 2007 14:09:00 GMT

Обновление моего блога.

На днях обновил свой блог на движке typo, до весрии 4.1

Впечатления пока что только приятные. Сразу бросается в глаза подчищенная админка. Большой плюс еще, что блог движок работает на rails 1.2 и заметный прогресс в том, что есть встроенная возможность локализации.

Процесс переезда прошел прозрачно, почти без бубна и плясок :-) Итак пошагово, для тех, кто будет повторять:

  1. Бекапим базу в двух вариантах—SQL-дамп и сериализованный YAML вариант. Первое делается через mysqldump или phpmyadmin, а второй вариант командой rails-backup в директории с rails-проектом блога.
  2. Обновляем rails и typo. Т.к. у меня все работает через rubygem, я просто запустил sudo gem update. После чего получил последние стабильные gems.
  3. Останавливаем текущий процесс typo. Переименовываем директорию проекта и создаем заново проект с typo—typo install my_typo_dir
  4. Переносим конфиги из старой в новую директорию (обычно это database.yml и mongrel_cluster.yml). И обновляем базу rake db:migrate.
  5. После чего запускаем проект (у меня он работает через mongrel cluster), логинимся в админку и первым делом нам предлагается поменять контент в базе на новый лад. Нужно просто согласиться и блог готов к работе.

Если появились трудности при апдейте—пишите, чем смогу помогу.

PS: В рассылке видел, что у одного человека возникли проблемы при переезде с базой. У него полечилось через rails-backup и rails-restore

openid enabled

Posted by dobrych Wed, 10 Jan 2007 15:04:00 GMT

У меня сабж :-)

Нашел наконец-то время разобраться с openid, как и предполагал ничего особо сложного нет.

Все делал по этим статьям: OpenID for non-SuperUsers OpenID delegation under Django and lighttpd

Теперь бы еще запустить свой openid сервер :-)

Для моего Typo блога всё свелось к нескольким манипуляциям.

  1. регистрация на myopenid
  2. создание yadis.xrdf файла
  3. конфигурация apache
  4. добавлении строчки кода в хидер темплейта блога
Вот мой yadis.xrdf

<xrds:XRDS xmlns:xrds="xri://$xrds" xmlns="xri://$xrd*($v*2.0)" 
  xmlns:openid="http://openid.net/xmlns/1.0">
  <XRD>
    <Service priorioty="1">
      <Type>http://openid.net/signon/1.0</Type>
      <URI>http://www.myopenid.com/server</URI>
      <openid:Delegate>http://dobrych.myopenid.com/</openid:Delegate>
    </Service>
  </XRD>
</xrds:XRDS>
Вот строки для конфигурации апача:

  # OpenID
  AddType application/xrds+xml .xrdf
  RewriteCond %{HTTP_ACCEPT} application/xrds\+xml
  RewriteCond %{HTTP_ACCEPT} !application/xrds\+xml\s*;\s*q\s*=\s*0(\.0{1,3})?\s*(,|$)
  RewriteRule ^$ http://livedev.org/yadis.xrdf [R,L]

  Header onsuccess set X-XRDS-Location http://livedev.org/yadis.xrdf
Вот строка, добавленная в шаблон

<meta http-equiv="X-XRDS-Location" content="http://livedev.org/yadis.xrdf">

Борьба с утечкой памяти в ruby (mephisto и sqlite) 3

Posted by dobrych Sun, 24 Dec 2006 17:09:00 GMT

Пока мой блог развивается и читателей у меня не сильно много, позволяю себе немного заняться его наворачиванием и переделкой.

В очередной раз решился побороть проблему утечки памяти движка моего блога typo. Суть в том, что по непонятным для меня причинам, rails движок этот тек самым наглым образом (до 200 Мб за сутки). Обидно было больше потому, что на хостинге крутятся еще несколько проектов на rails и у них с памятью все стабильно. В общем долго я плевался на этот typo и решил в итоге попробывать перейти на новый и активно развивающийся движок Mephisto.

Мой Typo работал на sqlite базе и поэтому Mephisto я решил ставить тоже на sqlite. Но какое было разочарование после вечера ковыряний и переделываний… Mephisto также противно тек.

Отдельно хочу написать о впечатлениях о Mephisto. Движок уже довольно обкатанный, работает нормально. Из typo сконвертировался на раз. Все делал по доке Converting Typo to Mephisto из официальной wiki. Есть уже неплохой набор тем, из которых можно намостырить что-то свое. Единственной проблемой после перехода на Mephisto были поломанные slug у каждого поста. Их видать скрипт переноса тупо ставит в значение title. А русский, как известно, в урлах отображается не совсем читабельно :-)

Возвращаясь к теме утечки памяти оказалось, что виноват в этом не typo, а ruby sqlite бекенд к базе. Обидно, но нашел я эту информацию как раз в рассылке Mephisto. После этого я решил сменить базу с sqlite на postgresql и остаться на typo. Но тут оказалось не все так просто. Почему-то база у меня никак не смогла встать красиво. Нехватало sequences в postgresql schema. У меня в запасе были еще два способа добиться результата. Я решил пойти самым простым. Сконвертировал базу в MySQL. Её schema была в порядке.

Перенос данных очень удобно делать с помощью скрипта из комплекта Rail Application Installer, называется rails-backup и rails-restore. Данные конвертируются в YAML и потом восстанавливаются в любую базу. Конвертация прошла успешно и я жду что текучка закончится. Если нет, то в запасе есть еще одна идея :-) В дебаггер совсем не хочется лезть :-) надеюсь обойдется.

Update: Вторым и последним способом был установка Mephisto на Postgresql, но все обошлось. Так что блог остается под управлением Typo и на базе MySQL.

How-to: highlight.js в связке с typo

Posted by dobrych Sun, 17 Sep 2006 21:00:00 GMT

Вот увидел у Ивана новую наработку его, решил прикрутить попробывать. А чтоб кто захочет могли прикрутить и себе пишу как сделать. Прикручивал для rails блог-движка typo.

Немного попарился из-за кеширования, но это мелочи. Вот что получилось:


.string { color: #800; }
.comment { color: #888; }
.keyword { font-weight: bold; }
.function .title, .class .title { color: #800; font-weight:bold; }
.tag .attribute .value, .css .rules .value { color: #800; }
.css .id { font-weight: bold; }
.number { color: #080; }
.phpdoc { font-weight: bold; }

Это получился код для подсветки синтаксиса. Я его сделал отдельным css-файлом.

Итак по порядку:

  1. качаем по ссылке выше архив со скриптиком;
  2. заливаем его в public/javascripts/;
  3. делаем файл с настройками css и ложим его в директорию со стилем (темой) блога themes/<название темы>/stylesheets/code.css;
  4. подключаем всё это дело в темплейты в themes/<название темы>/layouts/default.rhtml, код смотрте ниже;
  5. меняем тему на любую другую и обратно (простая очистка кеша почему-то не помогала);

Код для вставки в темплейт:


<%= stylesheet_link_tag '/stylesheets/theme/code.css', :media => 'all' %>
<%= javascript_include_tag "highlight" %>

<script type="text/javascript">
  window.onload = function(){initHighlighting();}
</script>

Вот в принципе и всё.