2011-12-26 29 views
26

Theo http://caniuse.com/script-defer, hầu hết các trình duyệt đều hỗ trợ thuộc tính defer của script.

Tôi muốn biết liệu các tập lệnh được chỉ định bởi <script defer src="..."> có được thực hiện trước hoặc sau $(document).ready() của jQuery không? Các trình duyệt chính, hiện đại (Chrome, Firefox, IE, v.v.) có nhất quán theo thứ tự thực thi hay không?

Trả lời

14

Dựa trên điều này fiddle tôi phải nói jQuery $(document).ready() thực hiện sau một kịch bản khai báo với defer. Tôi đã thử nghiệm nó với Firefox và Chrome, và cả hai đều có cùng một hành vi độc lập với chuỗi các tập lệnh.

Tôi đoán hành vi trên các trình duyệt khác có thể thay đổi dựa trên việc triển khai, do đó, điều này luôn không chắc chắn.

EDIT: Khi nó quay ra, thuộc tính defer nên được sử dụng với tệp javascript bên ngoài. Tôi chỉnh sửa fiddle để hiển thị này, rõ ràng với kết quả tương tự.

Cập nhật fiddle đây: http://jsfiddle.net/RNEZH/15/

+3

Kết quả tương tự trong Safari. – Charlie

+2

Cùng một kết quả trong Opera, nhưng không phải là thuộc tính trì hoãn chỉ thú vị cho các kịch bản bên ngoài? Tôi không nghĩ cảnh báo có ý nghĩa. – Bergi

+0

@Bergi, bên ngoài hay không, thuộc tính 'defer' là trì hoãn việc thực thi tập lệnh. Bạn nghĩ gì không có ý nghĩa? –

12

Thuộc tính trì hoãn có số tốt write-up and analysis. Đồng thời Xem nhận xét về bài đăng để biết thêm thông tin về cách defer đã được xác định lại trong HTML5.

Kết luận của tôi: defer quá phụ thuộc vào trình duyệt để đếm. Do đó, sử dụng kỹ thuật sẵn sàng cho tài liệu jQuery.

Để đặt nó theo một cách khác, một lý do quan trọng cho jQuery là để che giấu sự mâu thuẫn của trình duyệt. Trì hoãn là một sự không nhất quán khác nên tránh cho các trang được viết tốt.

+0

Tôi không thấy bất kỳ nhận xét nào ở bất kỳ nơi nào có thông tin về cách trì hoãn đã được định nghĩa lại trong HTML5. – nilskp

5

đơn giản, script nên được thực hiện trước khi $(document).ready() liệu defer đang sử dụng hay không và hầu hết tất cả các trình duyệt chính supportdefer.

Nhưng vì an toàn, tôi khuyến khích bạn sử dụng cả hai $(document).ready()defer. Vậy tại sao defer? Bởi vì nó giúp trang xuất hiện nhanh chóng (như kịch bản bên ngoài được tải song song) và một yếu tố thực sự quan trọng trong công cụ tốc độ trang của Google, một chi tiết tốt có thể được tìm thấy tại đây http://code.google.com/speed/page-speed/docs/payload.html#DeferLoadingJS

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