2011-11-17 33 views
7

nếu tôi có nhiều thẻ script trong trang của tôi như:là các tệp JavaScript bên ngoài được tải tuần tự hoặc song song?

<script src="js/jquery-1.7.min.js" type="text/javascript"></script> 
    <script src="js/jquery.jplayer.min.js" type="text/javascript"></script> 
    <script src="js/globals.js" type="text/javascript"></script> 
    <script src="js/sound.js" type="text/javascript"></script> 

tôi có thể dựa vào thực tế là mã từ những người trước đó đã có sẵn khi những người sau này được nạp?

+0

Có vẻ như đáng nói, trên đầu trang của các câu trả lời chính xác bên dưới, rằng một tập lệnh có thể "phá vỡ" lệnh thực thi bằng cách giới thiệu mã không đồng bộ.Ví dụ, nếu tập lệnh đầu tiên của bạn chứa một dòng 'setTimeout (function() {alert (" Hello ");}, 0);', thông báo đó sẽ xuất hiện sau khi các tập lệnh khác đã được tải. Trong thực tế, sau khi toàn bộ HTML đã được tải. –

Trả lời

5

Nói chung, kịch bản được tải xuống (xem this page):

Bởi vì mã JavaScript có thể thay đổi nội dung và bố cục của một trang web , sự chậm trễ duyệt render bất kỳ nội dung sau một kịch bản thẻ cho đến khi tập lệnh đó đã được tải xuống, phân tích cú pháp và thực thi. Tuy nhiên, quan trọng hơn đối với thời gian chuyến đi khứ hồi, nhiều trình duyệt chặn tải xuống tài nguyên [chẳng hạn như biểu định kiểu, hình ảnh và các tập lệnh khác] được tham chiếu trong tài liệu sau tập lệnh cho đến khi các tập lệnh đó được tải xuống và thực thi.

+1

+1 cho liên kết. – Thilo

+0

"nhiều trình duyệt chặn tải xuống tài nguyên cho đến khi tập lệnh được thực thi": Tôi cho rằng nhiều trình duyệt gần đây đã tìm nạp trước các tài nguyên khác, mặc dù giả sử rằng không phụ thuộc vào kết quả của tập lệnh, chúng sẽ cần đến sau này. – Thilo

3

Chúng được tải song song nhưng chúng chỉ chạy một lần mỗi tệp đã được tải. Vì vậy, câu trả lời là có, bạn có thể dựa vào thực tế.

5

viết tắt: Có:

Nếu không có quy định cụ thể defer hoặc async thuộc tính trong thẻ script, spec nói rằng một trình duyệt có tuần tự (sync) tải các tập tin.

Nói cách khác, một kịch bản thẻ đơn giản mà một trình duyệt tìm thấy nhu cầu để có được

  • nạp
  • thực hiện
  • (chặn bất kỳ quá trình render/thi khác trong khi thực hiện ở trên)

Mặc dù trình duyệt "hiện đại" có thể vẫn cố gắng tối ưu hóa quá trình đó, nhưng các bước đó cần phải được áp dụng (ít nhất là theo quy trình). Đó là lý do tại sao bạn nên đặt các thẻ script mà không cần đặc tả kỹ hơn ở dưới cùng của thẻ <body> của bạn. Ngay cả quá trình render DOM cũng dừng lại khi tải/thực thi các tập lệnh.

Để tránh điều đó, bạn có thể chỉ định một (chỉ HTML5) bất động sản trong những thẻ script defer hoặc async, như

<script defer src="/foo/bar.js"></script> 

mà nói với các trình duyệt đó là một kịch bản mà có nghĩa là để được thực hiện sau khi các tài liệu có được phân tích cú pháp.

Xem https://developer.mozilla.org/En/HTML/Element/Script

7

Họ có thể được nạp (qua mạng) song song, nhưng họ được đánh giá theo thứ tự.

Vì vậy, có, bạn có thể dựa vào thứ tự. tuần tự

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