Programing

Rails Asset Pipeline 사전 컴파일 프로세스의 속도를 높이려면 어떻게해야합니까?

crosscheck 2020. 11. 28. 08:39
반응형

Rails Asset Pipeline 사전 컴파일 프로세스의 속도를 높이려면 어떻게해야합니까?


Rails Asset Pipeline 사전 컴파일 프로세스의 속도를 높일 수있는 방법은 무엇입니까?


1. Capistrano 배포 속도 향상

(1) 배포를 위해 capistrano 기본 제공 작업 '배포 / 자산'을 사용합니다.

Capistrano에는 자체 내장 작업 '배포 / 자산'이 있습니다. 자동으로 작업을 수행합니다.

자신의 수공예 작업의 차이점은 assets전체 환경이 아닌 자산을 미리 컴파일하기 위해 그룹을 로드하는 것뿐입니다 .

cd /home/apps/APP_NAME/releases/20120708184757 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile

(2) 자산이 변경되지 않은 경우 사전 컴파일 프로세스를 건너 뜁니다.

https://gist.github.com/3072362

만약

  • 앱 / 자산
  • lib / assets
  • 공급 업체 / 자산
  • Gemfile.lock
  • confir / routes.rb

변경되면 자산을 다시 컴파일합니다. 그렇지 않으면 pecompile 프로세스를 건너 뛰고 많은 시간을 절약 할 수 있습니다.

2. @import를 신중하게 사용하십시오.

(1) @import "compass";직접 사용하지 마십시오 .

둘 다 작동 할 때

@import "compass";또는 @import "compass/typography/links/link-colors";SCSS에서.

그러나 자산을 컴파일 할 @import "compass/typography/links/link-colors";때보 다 9 배 더 빠릅니다 @import "compass";.

이는 @import "compass";, 전체 나침반 자산을 컴파일 하기 때문 입니다. 단지 link-colors일부가 아닙니다 .

(2) 부분 사용을 피하십시오

SCSS에서는 partial자산을 구성하는 데 사용 하는 것을 좋아합니다 .

그러나 변수를 공유해야하거나 필요한 종속성이있는 경우에만

//= require "reset"
//= require "base"
//= require "product"

보다 빠릅니다

@import "reset";
@import "base";
@import "product";

3. 이유없이 .scss & .coffee를 요구하지 마십시오

(1) require_tree 사용 피하기

Rails 생성기를 사용하여 컨트롤러를 생성 할 때. Rails는 다음과 같은 자산도 생성합니다.

  • product.css.scss
  • product.js.coffee

이 기술을 사용하여 application.js에 자산을 마운트하십시오.

//= require_tree

그러나 다음 줄만 포함하는 빈 자산 (아무것도 출력하지 않음) :

# Place all the behaviors and hooks related to the matching controller here.
# All this logic will automatically be available in application.js.
# You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/

각각을 컴파일하는 데 약 250ms가 소요됩니다. 빈 애셋이 10 개있는 경우 2.5 초가됩니다.

프로젝트에서 제거하거나 다음과 같이 application.js에 개별적으로 마운트하십시오.

//= require prodcuts
//= require users
//= require albums

(2)를 사용하지 마십시오 css.scss또는 js.coffee필요합니다.

  • jquery-ui-1.8.16.custom.css (0ms) 컴파일 됨 (pid 19108)
  • jquery.ui.1.8.16.ie.css (0ms) 컴파일 됨 (pid 19108)
  • 컴파일 된 jquery.js (5ms) (pid 19108)
  • jquery_ujs.js (0ms) 컴파일 됨 (pid 19108)
  • custom.css (14ms) 컴파일 됨 (pid 19108)

custom.css 이다 custom.css.scss

순수 CSS와 순수 JS를 컴파일하는 것은 빠릅니다 (비용 거의 0ms). 그러나 .scss 및 .coffee를 컴파일하려면 여전히 시간이 걸립니다.

요약하다

  1. deploy.rb 자산 작업을 대체하십시오.
  2. logs / production.log 확인

    • 느린 자산 찾기
    • @import "나침반"을 제거하십시오; 대체 솔루션을 사용하십시오.
    • 대신 require를 사용하십시오 @import; (정말 필요할 때 @import 사용)
    • require_tree 제거, 자산 개별 마운트
    • remove empty .scss and .coffeescript
    • use .css when assets are pure CSS.

I've just written a gem to solve this problem inside Rails, called turbo-sprockets-rails3. It speeds up your assets:precompile by only recompiling changed files, and only compiling once to generate all assets.

Note that I'm also trying to get this patch merged into Rails 4.0.0, and possibly Rails 3.2.9 (see https://github.com/rails/sprockets-rails/pull/21). But for now, it would be awesome if you could help me test out the turbo-sprockets-rails3 gem, and let me know if you have any problems.


(2) avoid using partials

In SCSS, we like to use partial to organize our assets

On the latest railsconf there was introduced libsass.

Probably things are gonna change and rewritten in C, scss partials promise to be faster

참고URL : https://stackoverflow.com/questions/11390447/how-can-you-speed-up-the-rails-asset-pipeline-precompile-process

반응형