2012-10-09 28 views
5

Sau khi đọc về các thuộc tính defer tại mdnJavascript [trì hoãn] thuộc tính và tài liệu.đã có?

thuộc tính Boolean này được thiết lập để chỉ cho một trình duyệt kịch bản có nghĩa là để được thực hiện sau khi các tài liệu đã được phân tích cú pháp.

Có vẻ tốt đẹp.

Vì vậy, tôi đã tested nó chống lại $(function() { });$(window).load(...)

<script> 
$(function() 
{ 
    alert('1') 
}); 
$(window).load(function() 
{ 
    alert('2') 
}); 
</script> 

<script defer="defer"> 
    alert('4'); 
</script> 

Mã này Luôn đầu ra 4,1,2!

Ok Vì vậy, bây giờ tôi có thể nhận ra thời gian mà tài liệu được phân tích cú pháp.

Trong những cảnh quan nào tôi sẽ cần đến giai đoạn trước khi document.ready (nơi hoàn tất phân tích cú pháp)?

+5

@downvoter vui lòng giải thích. –

+1

Thông báo quan trọng: '" Vì tính năng này chưa được thực hiện bởi tất cả các trình duyệt chính khác, tác giả không nên giả định rằng thực thi tập lệnh sẽ thực sự bị hoãn lại. "' – jbabey

+1

@jbabey yah Tôi biết. nhưng xin vui lòng nhận thấy - nó ** IS ** sẽ được thực hiện trong tất cả các brwser lớn. vì vậy nó là giá trị học tập về hành vi của nó :-) –

Trả lời

3

Từ MDN

Thuộc tính Hoãn không nên được sử dụng trên các kịch bản mà không có thuộc tính src

Việc sử dụng thực tế sẽ được rằng bạn vẫn có thể có kịch bản tại đầu trang và làm cho trình duyệt tải chúng sau khi toàn bộ trang được phân tích cú pháp đầy đủ, do đó cải thiện phía máy khách của hiệu suất.

Từ YSlow

Các TRÌ HOÃN TÁI thuộc tính chỉ ra rằng kịch bản không chứa document.write, và là một đầu mối để các trình duyệt mà họ có thể tiếp tục render

+0

vậy tại sao không đặt chúng ở phía dưới? Sự khác biệt là gì ? –

+0

@RoyiNamir, đối với một số hệ thống templating/CMS, người viết JavaScript không có quyền truy cập vào mẫu HTML. Ngoài ra, nó đơn giản hóa việc tổ chức siêu dữ liệu nếu phần lớn dữ liệu còn lại trong '' và '' là nội dung nghiêm chỉnh. – zzzzBov

1

Kiểm tra các W3 HTML spec:

Thuộc tính không đồng bộ và trì hoãn là thuộc tính boolean cho biết cách thực thi tập lệnh. Các thuộc tính defer và async không được xác định nếu thuộc tính src không có mặt.

Vì vậy, thuộc tính này chỉ hợp lệ cho tập lệnh bên ngoài.

+0

vâng. điểm tốt. Tôi có thể tham khảo một tập tin js bao gồm các lệnh cảnh báo. nó chỉ dành cho mẫu. và tất nhiên là bạn đúng! –

+0

Có, bạn nên làm điều đó để thực sự kiểm tra hành vi – Bergi

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