2012-09-28 33 views

Trả lời

8

Cũng được biên dịch trước application.js (theo đường ống nội dung) được bật và ở đầu theo mặc định. Lý do là ngay cả khi js được tải trước phần còn lại của trang, vì js luôn giống nhau, nó sẽ được tải từ bộ nhớ cache từ yêu cầu thứ hai trở đi, vì vậy không có lý do thực sự nào để phân phối nó ở dưới cùng của cơ thể nữa.

+0

cảm ơn, đó là đủ tốt cho tôi :) – stephenmurdoch

+0

nó lưu trữ các tập tin, nhưng nó vẫn cần phải chờ đợi cho js để tải (nếu toàn bộ trang được tải), phải không? Sẽ không phải là một thuộc tính 'async' cung cấp những lợi ích của việc thêm vào phía dưới mà không được tải lại bởi Turbolinks? – michelpm

+0

Với các tài sản dựa trên đường ray bình thường, bạn sẽ có một js được nén, rút ​​gọn thường được lưu trữ trong bộ nhớ cache của trình duyệt. Thời gian tải (như trong "tải mã") vẫn là một phần của tổng số tải xuống + chờ + thời gian tải cho js. Trong mọi trường hợp, TL chỉ tải toàn bộ trang ở chế độ nền, sau đó lấy các phần tử (tiêu đề, nội dung, v.v.) và hoán đổi chúng vào trang của bạn thay vì trang hiện tại. Đó là một hành vi đơn giản, có thể hoặc không thể dẫn đến tốc độ lớn hơn. Trong ví dụ thế giới thực, tôi thấy sprockets biên dịch javascript trong đầu quá đủ. – rewritten

5

Nếu bạn đang sử dụng Turbolinks 5, bây giờ bạn có thể đặt turbolinks ở dưới cùng của cơ thể của bạn (và làm theo các thực hành tốt nhất cho web dev để hiển thị một trang). Điều này cũng giúp với SEO bao giờ nên hơi. Chỉ cần thêm kịch bản của bạn để dưới cùng của cơ thể của bạn và thêm

data-turbolinks-eval="false"

vào thẻ script của bạn. Điều này sẽ ngăn chặn turbolinks đánh giá sau tải trang ban đầu. Dưới đây là cách nó được thực hiện với sự javascript_include_tag:

<%= javascript_include_tag 'application', 'data-turbolinks-eval' => 'false'%>

Sau đó, chỉ cần sử dụng

$(document).on('turbolinks:load', function() { // code to be executed when use changes pages });

Các vấn đề liên quan