12/08/2018, 13:47

Giới thiệu sơ lược về gem Jammit Ruby on Rails

Jammit là một thư viện mạnh mẽ cho Rails, cung cấp liên kết giữa CSS và JavaScript, nhỏ gọn như bạn mong đợi: ahead-of-time gzipping, built-in JavaScript template support và optional Data-URI / MHTML image embedding. Cài đặt gem install jammit Thêm gem Jammit vào trong file environment.rb ...

Jammit là một thư viện mạnh mẽ cho Rails, cung cấp liên kết giữa CSS và JavaScript, nhỏ gọn như bạn mong đợi: ahead-of-time gzipping, built-in JavaScript template support và optional Data-URI / MHTML image embedding.

Cài đặt

gem install jammit

Thêm gem Jammit vào trong file environment.rb để khởi tạo:

config.gem "jammit"

Nếu bạn sử dụng Rails 2, bạn cần chỉnh sửa file config/routes.rb để cung cấp routes cho Jammit:

ActionController::Routing::Routes.draw do |map|
  ...
  Jammit::Routes.draw(map)
  ...
end

Cấu hình gem Jammit

Jammit sử dụng YAML file config/assets.yml để đinh nghĩa các packages và thiết lập thêm các tùy chọn. Một ví dụ của file assets.yml hoàn chỉnh:

embed_assets: on

javascripts:
  workspace:
    - public/javascripts/vendor/jquery.js
    - public/javascripts/lib/*.js
    - public/javascripts/views/**/*.js
    - app/views/workspace/*.jst

stylesheets:
  common:
    - public/stylesheets/reset.css
    - public/stylesheets/widgets/*.css
  workspace:
    - public/stylesheets/pages/workspace.css
  empty:
    - public/stylesheets/pages/empty.css

Có rất nhiều options bạn có thể thêm vào file assets.yml để custom Jammit. Dưới đây là một file config sử dụng tất cả những options có thể:

package_assets	                on | off | always
embed_assets	                on | off | datauri
compress_assets	                on | off
rewrite_relative_paths	        on | off
gzip_assets	                    on | off
javascript_compressor	        yui | closure | uglifier
allow_debugging	                on | off
template_function	            on | off | ...
template_namespace	            ...
template_extension	            ...
package_path	                ...
compressor_options	            ...
css_compressor_options	        ...

Sử dụng gem Jammit

Để truy cập Jammit trong views, chúng ta sẽ sử dụng helper tương ứng. Method trong helper có thể include nhiều packages một lần:

<%= include_stylesheets :common, :workspace, :media => 'all' %>
<%= include_javascripts :workspace %>

Bạn có thể dễ dàng sử dụng Jammit với Rakefile:

require 'jammit'
Jammit.package!

YUI, Closure & UglifyJS

Jammit có thể cấu hình để sử dụng YUI Compressor, Google Closure Compiler, hoặc UglifyJS để nén và tối ưu JavaScript (CSS luôn chạy thông qua YUI Compressor). Thiết lập biến javascript_compressor để lựa chọn yui, closure, hay uglifier. Nếu để trống, Jammit sẽ mặc định đó là yui.

Bạn có thể điều chỉnh trình biên dịch của JavaScript bằng cách thêm compressor_options vào file assets.yml. Biến compressor_options sẽ pass trực tiếp qua compressor mà bạn lựa chọn. Ví dụ, thiết lập Closure Compiler để dùng advanced optimizations, bạn cần thêm compilation_level:

javascript_compressor: closure
compressor_options:
  compilation_level: "ADVANCED_OPTIMIZATIONS"

Jammit luôn sử dụng YUI CSS Compressor để nén CSS file.

Expires Headers

Để thời gian load của page là ít nhất, chúng ta nên đặt HTTP Expires header ở một thời điểm trong tương lai xa. Bạn không cần lo lắng về việc xóa cache khi deploy phiên bản mới.

Nếu bạn đang sử dụng Nginx webserver, add đoạn code nhỏ sau vào block server { ... } trong ứng dụng của bạn:

location ~ ^/assets/ {
  passenger_enabled on;
  expires max;
}

Nếu bạn đang sử dụng Apache, hãy chắc rằng mode_expires đang enabled, sau đó thêm đoạn code nhỏ sau vào đoạn VirtualHost trong file config:

ExpiresActive On
<Directory "/path/to/public/assets">
  ExpiresDefault "access plus 1 year"
</Directory>

Tổng kết

Hy vọng qua bài viết này, mọi người có thể phần nào nắm được về gem Jammit của Rails. Bài viết được dịch từ Jammit Document

0