2008-11-24 44 views
10

Chúng tôi đang phát triển các ứng dụng ASP.NET lớn với nhiều trang được tạo theo dynmically chứa các điều khiển ASCX. Chúng tôi sử dụng rất nhiều jQuery ở mọi nơi.jQuery: Di chuyển JavaScript xuống cuối trang?

Tôi đã đọc rằng sẽ có ý nghĩa khi di chuyển mã JavaScript nội tuyến xuống cuối trang vì nó có thể trì hoãn việc tải trang khi được đưa vào "quá sớm".

Câu hỏi của tôi bây giờ là: Điều này vẫn hợp lý khi làm việc với jQuery?

Hầu hết mã được thực thi trong trình xử lý sẵn sàng, vì vậy tôi hy vọng điều đó sẽ không làm chậm quá trình tải trang. Trong trường hợp của tôi, nhiều Usercontrols ASCX có tất cả các bit và mảnh ghép jQuery riêng của họ và sẽ không dễ dàng để di chuyển tất cả xuống trong trang được hiển thị.

+0

Bất kỳ lý do tại sao các cuộc gọi sẵn sàng của bạn aren 't trong một tập tin bên ngoài quá? Nó dễ quản lý hơn nhiều so với các cuộc gọi đó. –

+0

Có điều gì bạn mong muốn thấy trong câu trả lời không? Có vẻ như xấu hổ để lại một chủ đề treo như thế ... :-) –

+0

Những gì tôi đã tìm kiếm khi tôi tìm thấy chủ đề này là làm thế nào để có được ASP.NET ScriptManager để đặt các tài liệu tham khảo js ở dưới cùng của trang. Có vẻ như thứ bạn muốn nếu bạn có mã sử dụng mã này. –

Trả lời

10

Bạn có thể lập mô hình các cách đặt hàng khác nhau của JavaScript theo số Cuzillion để xem nó ảnh hưởng như thế nào đến việc tải trang.

Xem examplesthis blog post để biết ví dụ về cách sắp xếp thứ tự các yếu tố trang có thể ảnh hưởng đến tốc độ.

-2

Hầu hết thời gian, lý do để di chuyển JavaScript của bạn xuống cuối trang là đảm bảo rằng mọi yếu tố DOM mà JavaScript có thể tham chiếu đã được tạo trước khi chạy JavaScript. Điều này cũng đảm bảo rằng trang có thời gian hiển thị trước khi chạy bất kỳ JavaScript nào.

Trong trường hợp này, tôi sẽ không lo lắng về việc di chuyển JavaScript xuống thấp hơn trên trang.

+1

không đúng. Lý do để đặt nó ở phía dưới là để nội dung trang có thể tải đầu tiên và bạn không để người dùng nhìn vào màn hình trống trong khi 200kb tập lệnh tải xuống. – nickf

+0

Scott, đó là lý do rõ ràng nhất (và do đó phổ biến nhất) - đúng. Tuy nhiên, như áp phích chỉ ra, tính khả dụng của các trình xử lý document.ready làm cho điều đó không thành vấn đề. Phần còn lại là vấn đề hiệu suất tải trang. Nickf hoàn toàn đúng. –

+0

Bạn không thể thao túng DOM anyways (an toàn) trước khi trang OnLoad được kích hoạt vì nó sẽ kích hoạt ngoại lệ trong một số trình duyệt ... Vì vậy, đây là một tuyên bố hoàn toàn sai ... (xin lỗi, -1, lần đầu tiên ...) –

15

Việc đặt kịch bản trễ trong HTML được khuyến nghị vì việc tải và thực thi tập lệnh xảy ra tuần tự (một tập lệnh tại một thời điểm) và hoàn toàn chặn việc tải và phân tích cú pháp hình ảnh và tệp CSS trong khi đó.

Các tập lệnh lớn/chậm/chạy chậm gần đầu trang có thể gây chậm trễ không cần thiết cho việc tải và hiển thị nội dung/bố cục trang.

Kích thước của tập lệnh (thời gian tải xuống) và độ phức tạp (yếu tố thời gian thực hiện (v.v.)) - nhưng quan trọng hơn, số lượng yêu cầu HTTP <script> riêng lẻ quan trọng hơn nhiều (yêu cầu càng ít càng tốt).

Sử dụng trình xử lý "document.ready" sẽ giảm bớt sự chậm trễ gây ra bởi việc thực hiện chậm - nhưng vẫn để lại vấn đề về chi phí HTTP liên tiếp.

Đề nghị đọc: High Performance Web Sites bởi Nate Koeckley.

+0

Nhớ lại rằng song song thường là tốt. Các tập lệnh không nhất thiết phải nằm trên cùng một máy chủ như HTML và CSS và hình ảnh. Ngoài ra, nếu trình duyệt cảm thấy các ống bị tắc, nó có thể không yêu cầu kịch bản. Trình duyệt càng sớm càng có thông tin về tập lệnh, thì nó càng có thể xếp hàng/chuỗi nhanh hơn. – strager

+3

Khối tập lệnh tải các đối tượng khác - bất kể chúng nằm trên máy chủ nào. Đọc tài liệu hiệu suất. Tôi phản đối việc bỏ phiếu xuống, BTW. –

+0

@strager: "nếu trình duyệt cảm thấy các ống bị tắc, có thể đơn giản là không yêu cầu tập lệnh." Chăm sóc để xây dựng? Tôi chưa từng thấy tính năng đó trong bất kỳ trình duyệt nào. (Tùy thuộc vào trình duyệt để phân tích trang và tạo danh sách các tài nguyên bổ sung (hình ảnh, kiểu, tập lệnh) để tải xuống. Đó là __NOT__ đến trình duyệt để quyết định "oh, tôi không * cảm thấy * như tải xuống * rằng * ".) – Piskvor

1

Khi bạn bao gồm JS thì việc tải trang từ điểm đó sẽ trì hoãn vì tệp JS có thể chứa câu lệnh "document.write".

Điều này có nghĩa là toàn bộ trang sẽ DỪNG được hiển thị từ điểm bạn bao gồm tệp JS và làm cho trình duyệt chuyển sang màu trắng hoặc thứ gì đó (ít nhất không hiển thị phần còn lại của trang) để câu trả lời ngắn là chắc chắn có ...!

(Còn câu trả lời là "có lẽ" với 99% xác suất)

Như trong di chuyển sự bao gồm của JS (và cũng JS trực tiếp - mà bạn không nên sử dụng BTW) đến phía dưới ...

Khi đó ta nói nếu bạn đang ở trên ASP.NET bạn không nên sử dụng jQuery mà là Ra-Ajax mà BTW có tất cả những "thực hành tốt nhất" Automagically bao gồm cho bạn ...

+0

Tôi biết đây là một bài đăng cũ tại thời điểm này và có thể đã hợp lệ vào thời điểm đó, nhưng dựa trên thực tế dự án trang web mẫu trong Visual Studio 2010 bao gồm jQuery, không có lý do gì để ngăn cản việc sử dụng jQuery kết hợp với .MẠNG LƯỚI. – vpiTriumph

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