SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
Assets Pipeline,
или как я перестал боятся Rails 3.1 и
полюбил клиентскую оптимизацию




Андрей Ситник
ai@evilmartians.com
evilmartians.com
Языки в Групоне


CoffeeScript 303 КБ
       Sass   619 КБ
      Ruby    931 КБ
     Haml     1021 КБ
Хороший front-end
                 Sass
.icon {
   background: inline-image("icons/add.png");
   @include border-radius(3px);
}
                            ↓
.icon {
   background: url('data:image/png;base64,iVBORw0KGgo…');
   border-radius: 3px;
   -webkit-border-radius: 3px;
   -moz-border-radius: 3px;
}
Хороший front-end
Объединить, сжать и закешировать


<script src="core.js"></script>
<script src="flash.js"></script>
<script src="home.js"></script>
                   ↓
<script src="app.js?1314096925"></script>
Сейчас — Rails 2.x…3.0

         Barista                          Jammit
app/coffeescripts/core.coffee   config/assets.yml
                                javascripts:
             ↓                   app:
public/javascripts/core.js       - public/javascripts/core.js
                                 - public/javascripts/flash.js
                                 - public/javascripts/home.js

                                app/layouts/application.haml
                                = include_javascripts :app
Проблемы

― Не учитываются зависимости
― Интеграция — сообщения об ошибках
― Сложно расширить функционал
― Cache buster file?timestamp иногда не работает
― Сторонние JS-библиотеки в репозитории
― Плагин не может подключить свои JS или CSS
― JS- и CSS-файлы не в app/
Assets Pipeline
            Зависимости

В каждом файле указывается от каких
файлов он зависит:

CoffeeScript:
#= require 'user'

SCSS
@import 'user';
Assets Pipeline
Сообщения об ошибках
Assets Pipeline
                    Фильтры

app/assets/javascripts/application.js.erb.coffee
Сначала откомпилить CoffeeScript в JS, а потом ERB


Можно добавить свои фильтры:
Rails.application.assets.register_postprocessor(
 'application/javascript', Sprockets::SafetyColons)
Assets Pipeline
              Cache buster


application-25b93845b866436a84154200dd8d05e0.js
                            ↑
            хеш от содержимого
            вместо времени изменения
Assets Pipeline
   Сторонние JS и CSS файлы

JS и CSS ищется в
app/assets/         файлы проекта
lib/assets/         свои библиотеки
vendor/assets/      сторонние библиотеки


А так же во всех gem’ах с Rails Engine
Как работает Assets Pipeline
      Шаг 1. Генерация

Собираем логику всех страниц в этом файле
app/assets/javascripts/application.js.coffee
Логика страницы пользователей:
app/assets/javascripts/user.js.coffee

Собираем стили всех страниц в этом файле
app/assets/stylesheets/application.css.scss
Стили страницы пользователей:
app/assets/stylesheets/user.css.scss
Как работает Assets Pipeline
     Шаг 2. Подключаем


app/views/layout/application.html.haml

= stylesheet_link_tag :application
= javascript_include_tag :application
Как работает Assets Pipeline
    Шаг 3. Объединение


app/assets/javascrips/application.js.coffee
#= require 'user'
#= require_tree 'pages'

app/assets/stylesheets/application.css.scss
@import 'user'
Как работает Assets Pipeline
     Шаг 4. Библиотеки


Gemfile
gem "jquery-rails"

app/assets/javascripts/application.js.coffee
#= require jquery
Как работает Assets Pipeline
     Шаг 5. Изображения
Путь к изображениям: app/assets/images

В SCSS и SASS все картинки надо указывать через
image-url() вместо url()
.icon {
   background: image-url("user/icon.png"); }

В Haml использовать всегда
image_tag("user/icon.png") или
image_path("user/icon.png")
Как работает Assets Pipeline
         Шаг 6. Фильтры
1. Preprocessor — Смотрим какие файлы от каких зависят
2. Engine — Компилируем (CoffeeScript → JS, SCSS → CSS)
3. Postprocessor — Исправляем файлы.
    Например, вставляем ; в JS-файлы
4. Собираем файлы в один
5. Bundle processors — Исправляем файлы-пакеты.
   Например, убираем повторы @charset в CSS-файлах
6. Compressor — Убираем лишние символы в JS и CSS.
7. Записываем файлы и сжимает в Gzip,
   чтобы веб-серверу было проще
Как работает Assets Pipeline
         Шаг 7. Отладка

В development файлы идут отдельно:
<script src='/assets/application.js?body=1'></script>
<script src='/assets/user.js?body=1'></script>
<script src='/assets/page/home.js?body=1'></script>

Чтобы выключить объединение в production,
надо добавить ?debug_assets=1 в URL и разрешить
отладку в настройках:
config.assets.allow_debugging = true
Как работает Assets Pipeline
         Шаг 8. Выкладка

Заранее собираются только application.css и applications.js.
Остальные пакеты нужно добавить в настройках:
config.assets.precompile += %w( admin.js admin.css )

Перед деплоем нужно выполнить:
rake assets:precompile

Для Capistrano 2.8 есть готовые рецепты:
load 'deploy/assets'
Как работает Assets Pipeline
     Шаг 9. Кеширование

Говорим браузеру кешировать файлы и
не спрашивать нас больше о них:

location ~ ^/(assets)/ {
  root /path/to/public;
  gzip_static on;
  expires max;
  add_header Cache-Control public;
}
Как выложить свою
          JS-библиотеку

1. Стили и JS разместить в vendor/assets/
2. В lib/имя_гема.rb сделать класс,
   наследующий ::Rails::Engine
3. Написать имя_гема.gemspec, собрать gem
   и выложить на rubygems.org
Вопросы?




ai@evilmartians.com
evilmartians.com

Weitere ähnliche Inhalte

Was ist angesagt?

Sergey Cherebedov. Interesting Drupal Distributions
Sergey Cherebedov. Interesting Drupal DistributionsSergey Cherebedov. Interesting Drupal Distributions
Sergey Cherebedov. Interesting Drupal Distributionsi20 Group
 
Артем Маркушев - HTML & CSS
Артем Маркушев - HTML & CSSАртем Маркушев - HTML & CSS
Артем Маркушев - HTML & CSSDataArt
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Андрей Тюпа Оптимизация верстки Sass + Compass framework
Андрей Тюпа Оптимизация верстки Sass + Compass frameworkАндрей Тюпа Оптимизация верстки Sass + Compass framework
Андрей Тюпа Оптимизация верстки Sass + Compass frameworkAlbina Tiupa
 
02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиенты02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиентыRoman Brovko
 
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфікаОлена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфікаLEDC 2016
 

Was ist angesagt? (6)

Sergey Cherebedov. Interesting Drupal Distributions
Sergey Cherebedov. Interesting Drupal DistributionsSergey Cherebedov. Interesting Drupal Distributions
Sergey Cherebedov. Interesting Drupal Distributions
 
Артем Маркушев - HTML & CSS
Артем Маркушев - HTML & CSSАртем Маркушев - HTML & CSS
Артем Маркушев - HTML & CSS
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Андрей Тюпа Оптимизация верстки Sass + Compass framework
Андрей Тюпа Оптимизация верстки Sass + Compass frameworkАндрей Тюпа Оптимизация верстки Sass + Compass framework
Андрей Тюпа Оптимизация верстки Sass + Compass framework
 
02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиенты02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиенты
 
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфікаОлена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
 

Andere mochten auch

Как сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsКак сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsYaroslav Markin
 
10 reasons I love RubyOnRails
10 reasons I love RubyOnRails10 reasons I love RubyOnRails
10 reasons I love RubyOnRailsPavel Gabriel
 
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo
 
Debbug Rails Application For Dummies
Debbug Rails Application For DummiesDebbug Rails Application For Dummies
Debbug Rails Application For DummiesAndrey Subbota
 
Deploy.rb, Ilya Zykin, Rails club2016
Deploy.rb, Ilya Zykin, Rails club2016Deploy.rb, Ilya Zykin, Rails club2016
Deploy.rb, Ilya Zykin, Rails club2016zykin-ilya
 
Фронтенд для рубиста
Фронтенд для рубистаФронтенд для рубиста
Фронтенд для рубистаKir Shatrov
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)guest40e031
 
Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"railsclub
 
Призма24 - Маркетплейсы.
Призма24 - Маркетплейсы.Призма24 - Маркетплейсы.
Призма24 - Маркетплейсы.Vitalii Tytskyi
 
I18n ruby-приложений
I18n ruby-приложенийI18n ruby-приложений
I18n ruby-приложенийAndrey Sitnik
 
Когда технологий много - iForum 2013
Когда технологий много - iForum 2013Когда технологий много - iForum 2013
Когда технологий много - iForum 2013Andrey Listochkin
 
Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...
Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...
Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...Alexander Dymo
 
Секретный доклад о React Router - OdessaJS 2014
Секретный доклад о React Router - OdessaJS 2014Секретный доклад о React Router - OdessaJS 2014
Секретный доклад о React Router - OdessaJS 2014Andrey Listochkin
 

Andere mochten auch (20)

Как сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsКак сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on Rails
 
10 reasons I love RubyOnRails
10 reasons I love RubyOnRails10 reasons I love RubyOnRails
10 reasons I love RubyOnRails
 
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
 
Debbug Rails Application For Dummies
Debbug Rails Application For DummiesDebbug Rails Application For Dummies
Debbug Rails Application For Dummies
 
RSpec. Part 2
RSpec. Part 2RSpec. Part 2
RSpec. Part 2
 
Deploy.rb, Ilya Zykin, Rails club2016
Deploy.rb, Ilya Zykin, Rails club2016Deploy.rb, Ilya Zykin, Rails club2016
Deploy.rb, Ilya Zykin, Rails club2016
 
Rails Concerns
Rails ConcernsRails Concerns
Rails Concerns
 
Фронтенд для рубиста
Фронтенд для рубистаФронтенд для рубиста
Фронтенд для рубиста
 
RSpec. Part 3
RSpec. Part 3RSpec. Part 3
RSpec. Part 3
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)
 
Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"
 
R18n
R18nR18n
R18n
 
Призма24 - Маркетплейсы.
Призма24 - Маркетплейсы.Призма24 - Маркетплейсы.
Призма24 - Маркетплейсы.
 
I18n ruby-приложений
I18n ruby-приложенийI18n ruby-приложений
I18n ruby-приложений
 
Когда технологий много - iForum 2013
Когда технологий много - iForum 2013Когда технологий много - iForum 2013
Когда технологий много - iForum 2013
 
RSpec. Part 1
RSpec. Part 1RSpec. Part 1
RSpec. Part 1
 
Ruby on Rails for noobs
Ruby on Rails for noobsRuby on Rails for noobs
Ruby on Rails for noobs
 
Why does code style matter?
Why does code style matter?Why does code style matter?
Why does code style matter?
 
Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...
Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...
Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...
 
Секретный доклад о React Router - OdessaJS 2014
Секретный доклад о React Router - OdessaJS 2014Секретный доклад о React Router - OdessaJS 2014
Секретный доклад о React Router - OdessaJS 2014
 

Ähnlich wie Assets Pipeline

JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.Igor Shkulipa
 
Построение ГИС: Стратегии проектирования системной архитектуры.
Построение ГИС: Стратегии проектирования системной архитектуры.Построение ГИС: Стратегии проектирования системной архитектуры.
Построение ГИС: Стратегии проектирования системной архитектуры.Vitaly Zagorovskiy
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiAlexander Makarov
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressIgor Sazonov
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
Кэширование
КэшированиеКэширование
КэшированиеIgor Kapkov
 
Сборка Front-end’a
Сборка Front-end’aСборка Front-end’a
Сборка Front-end’aDelphiCon
 
Ruby on Rails. Пользовательский интерфейс
Ruby on Rails. Пользовательский интерфейсRuby on Rails. Пользовательский интерфейс
Ruby on Rails. Пользовательский интерфейсDigital-агентство Мэйк
 
Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush
 
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....KazHackStan
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиБэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиITCrowd Almaty
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Pavel Chertorogov
 
"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik Himiranov"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik HimiranovFwdays
 
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...Andrey Taritsyn
 
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4rit2011
 
Web deployment
Web deploymentWeb deployment
Web deploymentGetDev.NET
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)7bits
 
Server-side JavaScript
Server-side JavaScriptServer-side JavaScript
Server-side JavaScriptMedia Gorod
 

Ähnlich wie Assets Pipeline (20)

JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.JavaScript Базовый. Занятие 09.
JavaScript Базовый. Занятие 09.
 
Построение ГИС: Стратегии проектирования системной архитектуры.
Построение ГИС: Стратегии проектирования системной архитектуры.Построение ГИС: Стратегии проектирования системной архитектуры.
Построение ГИС: Стратегии проектирования системной архитектуры.
 
UWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем YiiUWDC 2013, Как мы используем Yii
UWDC 2013, Как мы используем Yii
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPress
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Кэширование
КэшированиеКэширование
Кэширование
 
Сборка Front-end’a
Сборка Front-end’aСборка Front-end’a
Сборка Front-end’a
 
Ruby on Rails. Пользовательский интерфейс
Ruby on Rails. Пользовательский интерфейсRuby on Rails. Пользовательский интерфейс
Ruby on Rails. Пользовательский интерфейс
 
Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush Toster
Pavel Dovbush Toster
 
Bootstrap 3
Bootstrap 3Bootstrap 3
Bootstrap 3
 
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
Алексей Морозов (Россия), Rambler.ru. ASP.NET в помощь хакеру и не только....
 
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработкиБэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
Бэкенд, Фронтенд — всё смешалось. Обзорная экскурсия в будущее веб-разработки
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)
 
"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik Himiranov"Web Vitals monitoring & optimizations", Erik Himiranov
"Web Vitals monitoring & optimizations", Erik Himiranov
 
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
Презентация «Bundle Transformer – инструмент для клиентской оптимизации в сре...
 
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
автоматизированная сборка Flash приложений (as2, as3). андрей жданов. зал 4
 
Web deployment
Web deploymentWeb deployment
Web deployment
 
RichFaces: обзор
RichFaces: обзорRichFaces: обзор
RichFaces: обзор
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
 
Server-side JavaScript
Server-side JavaScriptServer-side JavaScript
Server-side JavaScript
 

Kürzlich hochgeladen (9)

ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 

Assets Pipeline

  • 1. Assets Pipeline, или как я перестал боятся Rails 3.1 и полюбил клиентскую оптимизацию Андрей Ситник ai@evilmartians.com evilmartians.com
  • 2. Языки в Групоне CoffeeScript 303 КБ Sass 619 КБ Ruby 931 КБ Haml 1021 КБ
  • 3. Хороший front-end Sass .icon { background: inline-image("icons/add.png"); @include border-radius(3px); } ↓ .icon { background: url('data:image/png;base64,iVBORw0KGgo…'); border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; }
  • 4. Хороший front-end Объединить, сжать и закешировать <script src="core.js"></script> <script src="flash.js"></script> <script src="home.js"></script> ↓ <script src="app.js?1314096925"></script>
  • 5. Сейчас — Rails 2.x…3.0 Barista Jammit app/coffeescripts/core.coffee config/assets.yml javascripts: ↓ app: public/javascripts/core.js - public/javascripts/core.js - public/javascripts/flash.js - public/javascripts/home.js app/layouts/application.haml = include_javascripts :app
  • 6. Проблемы ― Не учитываются зависимости ― Интеграция — сообщения об ошибках ― Сложно расширить функционал ― Cache buster file?timestamp иногда не работает ― Сторонние JS-библиотеки в репозитории ― Плагин не может подключить свои JS или CSS ― JS- и CSS-файлы не в app/
  • 7. Assets Pipeline Зависимости В каждом файле указывается от каких файлов он зависит: CoffeeScript: #= require 'user' SCSS @import 'user';
  • 9. Assets Pipeline Фильтры app/assets/javascripts/application.js.erb.coffee Сначала откомпилить CoffeeScript в JS, а потом ERB Можно добавить свои фильтры: Rails.application.assets.register_postprocessor( 'application/javascript', Sprockets::SafetyColons)
  • 10. Assets Pipeline Cache buster application-25b93845b866436a84154200dd8d05e0.js ↑ хеш от содержимого вместо времени изменения
  • 11. Assets Pipeline Сторонние JS и CSS файлы JS и CSS ищется в app/assets/ файлы проекта lib/assets/ свои библиотеки vendor/assets/ сторонние библиотеки А так же во всех gem’ах с Rails Engine
  • 12. Как работает Assets Pipeline Шаг 1. Генерация Собираем логику всех страниц в этом файле app/assets/javascripts/application.js.coffee Логика страницы пользователей: app/assets/javascripts/user.js.coffee Собираем стили всех страниц в этом файле app/assets/stylesheets/application.css.scss Стили страницы пользователей: app/assets/stylesheets/user.css.scss
  • 13. Как работает Assets Pipeline Шаг 2. Подключаем app/views/layout/application.html.haml = stylesheet_link_tag :application = javascript_include_tag :application
  • 14. Как работает Assets Pipeline Шаг 3. Объединение app/assets/javascrips/application.js.coffee #= require 'user' #= require_tree 'pages' app/assets/stylesheets/application.css.scss @import 'user'
  • 15. Как работает Assets Pipeline Шаг 4. Библиотеки Gemfile gem "jquery-rails" app/assets/javascripts/application.js.coffee #= require jquery
  • 16. Как работает Assets Pipeline Шаг 5. Изображения Путь к изображениям: app/assets/images В SCSS и SASS все картинки надо указывать через image-url() вместо url() .icon { background: image-url("user/icon.png"); } В Haml использовать всегда image_tag("user/icon.png") или image_path("user/icon.png")
  • 17. Как работает Assets Pipeline Шаг 6. Фильтры 1. Preprocessor — Смотрим какие файлы от каких зависят 2. Engine — Компилируем (CoffeeScript → JS, SCSS → CSS) 3. Postprocessor — Исправляем файлы. Например, вставляем ; в JS-файлы 4. Собираем файлы в один 5. Bundle processors — Исправляем файлы-пакеты. Например, убираем повторы @charset в CSS-файлах 6. Compressor — Убираем лишние символы в JS и CSS. 7. Записываем файлы и сжимает в Gzip, чтобы веб-серверу было проще
  • 18. Как работает Assets Pipeline Шаг 7. Отладка В development файлы идут отдельно: <script src='/assets/application.js?body=1'></script> <script src='/assets/user.js?body=1'></script> <script src='/assets/page/home.js?body=1'></script> Чтобы выключить объединение в production, надо добавить ?debug_assets=1 в URL и разрешить отладку в настройках: config.assets.allow_debugging = true
  • 19. Как работает Assets Pipeline Шаг 8. Выкладка Заранее собираются только application.css и applications.js. Остальные пакеты нужно добавить в настройках: config.assets.precompile += %w( admin.js admin.css ) Перед деплоем нужно выполнить: rake assets:precompile Для Capistrano 2.8 есть готовые рецепты: load 'deploy/assets'
  • 20. Как работает Assets Pipeline Шаг 9. Кеширование Говорим браузеру кешировать файлы и не спрашивать нас больше о них: location ~ ^/(assets)/ { root /path/to/public; gzip_static on; expires max; add_header Cache-Control public; }
  • 21. Как выложить свою JS-библиотеку 1. Стили и JS разместить в vendor/assets/ 2. В lib/имя_гема.rb сделать класс, наследующий ::Rails::Engine 3. Написать имя_гема.gemspec, собрать gem и выложить на rubygems.org