2009-07-10 29 views
12

Tôi tự hỏi liệu có thể tải javascript theo cách mà nó không chặn trải nghiệm người dùng. Tôi không chắc chắn làm thế nào để đạt được như vậy, nhưng tôi đang tìm kiếm một giải pháp qua trình duyệt. Tôi tự hỏi nếu ai đó có thể hướng dẫn tôi đi đúng hướng. Đặt js ở dưới cùng của trang không hoạt động quá tốt.Javascript không chặn

Cảm ơn bạn đã dành thời gian.

+0

Blargh, tôi đã có một liên kết thực sự tốt cho việc này nhưng tôi không thể tìm thấy nó – Greg

+0

Làm rõ cần thiết: bạn đang nói về bốc javascript nguồn tập tin như trong các thẻ '

2

Tôi tin rằng bạn có thể sử dụng Người lao động, nhưng có vẻ như nó được triển khai trong FF3.5, nhưng một số khác.

Xem http://hacks.mozilla.org/2009/07/working-smarter-not-harder/

+0

Một tìm kiếm nhỏ trên Google về "onload Javascript" cung cấp nhiều thông tin, trên các trang như http://onlinetools.org/articles/unobtrusivejavascript/chapter4.html. –

+0

Đừng quên về Gears! Nó cũng có công nhân web. –

+1

Có? Tôi đã quá lười biếng để đề cập đến nó, nhưng nó là trong bài báo chỉ. –

2

Khi một trang đang tải nó chỉ có thể tải về 2 file javascript song song cùng một lúc để cố gắng giữ số lượng các tập tin javascript xuống và kích thước của chúng xuống (với Thu nhỏ, obsfucation và gzipping) sẽ giúp với trải nghiệm tải.

Sử dụng gọi lại trong javascript của bạn cũng sẽ giúp các mục không bị chặn khi javascript đang chạy.

Một ví dụ trong jQuery sẽ

$('#id').click(function(){ 
    $.post('url',data,function(callbackdata){//do something 
     }); 

}); 
3

Trích dẫn this answer:

yêu cầu tài nguyên Javascript được thực sự ngăn chặn, nhưng có những cách xung quanh này (để wit: DOM tiêm thẻ script trong đầu, và AJAX yêu cầu) mà không cần nhìn thấy trang bản thân tôi có thể là những gì xảy ra ở đây.

Bao gồm nhiều bản sao của cùng một tài nguyên JS là vô cùng xấu nhưng không nhất thiết gây tử vong, và là điển hình của các trang web lớn mà có thể đã bồi từ công việc của đội riêng biệt, hoặc mã hóa xấu chỉ đơn giản cũ, lập kế hoạch hoặc bảo trì.

Theo như khuyến cáo yahoo để nơi kịch bản ở dưới cùng của cơ thể , điều này cải thiện percieved phản ứng lần, và có thể cải thiện tải thực tế lần đến một mức độ (vì tất cả các nguồn lực trước được phép async đầu tiên), nhưng nó sẽ không bao giờ là có hiệu lực như các yêu cầu không chặn (mặc dù chúng có rào cản cao về khả năng kỹ thuật).

Bạn có thể xem mục nhập YUI blog về Non-Blocking Javascript.

0

Deferring execution of JavaScript có thể là một giải pháp thực sự tốt nếu bạn có một số JavaScript không quan trọng để tải ngay lập tức.

+0

điều này là dành cho nghĩa là chỉ –

+1

Không, điều này được hỗ trợ bởi tất cả các trình duyệt chính: http://www.webkit.org/blog/1395/running-scripts-in-webkit/ http: //hacks.mozilla .org/2009/06/hoãn / – mikl

1

setTimeout với độ trễ nhỏ sẽ cho phép luồng điều khiển của bạn tiếp tục trong khi lập lịch một hàm khác để thực thi sau này. Điều này đặc biệt hữu ích để ngăn chặn giao diện người dùng chặn hoặc vô tình phụ thuộc vào việc thực hiện thành công chức năng khác.

Tôi thấy rất hữu ích để ngăn lỗi javascript gây trở ngại cho sự kiện bị ràng buộc. Ví dụ, để cài đặt một trình điều khiển trên một hình thức:

$('#form').submit(function() { 
    setTimeout(function() { 
    // Submit handler function, i.e. do an ajax submission of the form 
    $.ajax(...etc...); 
    }, 1); 
    // Return false before the handler executes, ensuring the form won't manually submit 
    // in the event of a js error in the handler 
    return false; 
}); 
-1

Có một cái nhìn tại jQuery plugin này (http://code.google.com/p/funky-jq-plugins/wiki/nonblocking).

Mục tiêu là sử dụng bộ tính giờ để mô phỏng môi trường nhiều luồng trong đó chuỗi giao diện người dùng không bị đóng băng bởi các hoạt động yêu cầu như lặp qua danh sách dài. thứ rất mát mẻ ... Tôi đã viết nó :)

Ciao cho bây giờ

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