Tôi đã viết một chút của hướng dẫn.
Bạn chắc chắn không muốn sống biên dịch trong sản xuất.
Khi bạn đã biên dịch, đây là những gì xảy ra:
Mọi yêu cầu cho một tệp trong / tài sản được chuyển đến Sprockets. Ngày đầu yêu cầu cho mỗi và mọi tài sản, nó được biên dịch và lưu vào bộ đệm trong bất cứ thứ gì Rails đang sử dụng cho bộ đệm (thường là hệ thống tệp).
Trong các yêu cầu tiếp theo, Sprockets nhận được yêu cầu và phải tra cứu tên tệp được in dấu vân tay, kiểm tra xem tệp (hình ảnh) hoặc tệp (css và js) tạo nên tài sản không bị sửa đổi, và sau đó nếu có phiên bản được lưu trong bộ nhớ cache.
Đó là tất cả mọi thứ trong thư mục tài sản và trong bất kỳ thư mục nhà cung cấp / tài sản nào được sử dụng bởi các plugin.
Đó là rất nhiều chi phí vì, thành thật mà nói, mã không được tối ưu hóa cho tốc độ.
Điều này sẽ có tác động đến việc tài sản nhanh chóng chuyển qua dây cho khách hàng và sẽ tác động tiêu cực đến thời gian tải trang của trang web của bạn.
So sánh với mặc định:
Khi tài sản được biên dịch trước và biên dịch tắt, tài sản được biên dịch và lấy dấu vân tay đến public/assets
. Sprockets trả về một bảng ánh xạ của tên tệp đơn giản thành dấu vân tay cho Rails và Rails ghi điều này vào hệ thống tập tin. Tệp kê khai (YML trong Rails 3 hoặc JSON có tên ngẫu nhiên trong Rails 4) được tải vào Bộ nhớ bởi Rails khi khởi động và được lưu trong bộ nhớ cache để sử dụng bởi các phương thức của trình trợ giúp tài sản.
Điều này làm cho việc tạo các trang có tài sản được lấy dấu vân tay chính xác rất nhanh và việc phục vụ các tệp chính là hệ thống máy chủ web từ hệ thống tệp nhanh. Cả hai nhanh hơn đáng kể so với biên dịch trực tiếp.
Để có được lợi thế tối đa của đường ống và dấu vân tay, bạn cần đặt các tiêu đề trong tương lai xa trên máy chủ web của mình và bật tính năng nén gzip cho các tệp js và css. Sprockets viết các phiên bản được nén của tài sản mà bạn có thể đặt máy chủ của mình sử dụng, loại bỏ sự cần thiết phải làm như vậy cho mỗi yêu cầu.
Điều này đưa tài sản ra cho khách hàng càng nhanh càng tốt và ở kích thước nhỏ nhất có thể, tăng tốc độ hiển thị trang phía khách hàng và giảm các yêu cầu (với tiêu đề trong tương lai xa).
Vì vậy, nếu bạn đang biên dịch trực tiếp thì đó là:
- Rất chậm
- Thiếu nén
- Sẽ tác động đến thời gian kết xuất của trang
Đấu với
- Nhanh nhất có thể
- Nén
- Loại bỏ tình trạng nén quá mức từ máy chủ (tùy chọn).
- Giảm thiểu thời gian kết xuất của các trang.
Chỉnh sửa: (Trả lời để theo dõi bình luận)
Đường ống có thể được thay đổi thành tiền biên dịch theo yêu cầu đầu tiên nhưng có một số rào cản lớn để thực hiện. Đầu tiên là phải có một bảng tra cứu tên dấu vân tay hoặc các phương thức trợ giúp quá chậm. Theo một senario biên dịch theo yêu cầu, sẽ cần có một số cách để thêm vào bảng tra cứu vì mỗi tài sản mới được biên dịch hoặc yêu cầu.
Ngoài ra, ai đó sẽ phải trả giá giao tài sản chậm trong một khoảng thời gian không xác định cho đến khi tất cả các tài sản được biên soạn và tại chỗ.
Mặc định, trong đó giá biên dịch mọi thứ được thanh toán ngoại tuyến cùng một lúc, không ảnh hưởng đến khách truy cập công cộng và đảm bảo mọi thứ hoạt động trước khi mọi thứ đi vào hoạt động.
Công cụ thỏa thuận là nó bổ sung rất nhiều sự phức tạp cho các hệ thống sản xuất.
[Chỉnh sửa, tháng 6 năm 2015] Nếu bạn đang đọc điều này bởi vì bạn đang tìm kiếm một giải pháp cho thời gian biên dịch chậm trong quá trình triển khai, thì bạn có thể xem xét việc biên dịch trước các tài sản cục bộ. Thông tin về điều này là trong hướng dẫn đường ống tài sản . Điều này cho phép bạn biên dịch trước cục bộ chỉ khi có thay đổi, cam kết điều đó và sau đó triển khai nhanh mà không có giai đoạn tiền biên dịch.