2015-05-16 14 views
5

Tôi vừa dành một khoảng thời gian dài thực sự ... và chỉ tìm thấy một nửa câu trả lời ở khắp mọi nơi. Tôi đang sử dụng thông tin chi tiết về tốc độ trang của Google để cải thiện trang web của mình và nó cho tôi tải Javascript không đồng bộ. Tôi tìm thấy một vài mã, nhưng họ đã không giải thích làm thế nào để tải nhiều hơn một tập tin js và làm thế nào để tải css là tốt. Tôi cũng không thể tìm thấy bất cứ nơi nào nó nói với tôi theo thứ tự tải nó. Có ai giúp được không?Tải không đồng bộ để loại bỏ js & css hiển thị chặn?

Chú ý: Tôi đã cố gắng để di chuyển js đến chân, nhưng sau đó đơn điện thoại di động của tôi không còn hoạt động (trong đó sử dụng các tập tin expand.js)

Các tập tin javascript tôi cần phải không đồng bộ tải là:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
    <script language="javascript" type="text/javascript" src="js/h5.js"></script> 
    <script language="javascript" type="text/javascript" src="js/expand.js"></script> 

CSS của tôi:

<link rel="stylesheet" type="text/css" href="style.css"> 
+1

Báo cáo cho biết tải không đồng bộ các tệp JS của bạn có nghĩa là đặt các tập lệnh JS của bạn trên các máy chủ khác nhau để chúng tải nhanh hơn. Trong điều khoản laments điều này sẽ ngừng làm cho nhiều yêu cầu đến một máy chủ để tải các tập tin. Nếu bạn đang tải Plugin sau đó kiểm tra xem có lưu trữ CDN cho các tập lệnh JS đó không --- http://www.rackspace.com/knowledge_center/article/what-is-a-cdn – Tasos

+0

Ok, đó là cách tôi biết, nhưng chỉ một phần của nó tải các tệp JS từ các miền khác nhau. Tuy nhiên đây là giải pháp về cách tải các tệp JS không đồng bộ --- http://screwlewse.com/2010/05/loading-your-javascript-files-asynchronously/ – Tasos

Trả lời

1

Asynchronous tải của các kịch bản có thể nhận được khá phức tạp. Bạn đã thử sử dụng thuộc tính async chưa? Ví dụ:

<script async src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
<script async language="javascript" type="text/javascript" src="js/h5.js"></script> 
<script async language="javascript" type="text/javascript" src="js/expand.js"></script> 

Tuy nhiên, điều này có thể gây ra không mong muốn race conditions. Tất cả điều này có nghĩa là phần còn lại của trang web của bạn là không phải sẽ đợi cho ba tệp JavaScript này tải trước khi tải các tài nguyên khác. Điều này có thể hoặc không thể cải thiện tốc độ của trang web của bạn tùy thuộc vào những gì được chứa và có thể tạo ra một số kết quả khả quan về quản lý phụ thuộc mà bạn sẽ phải tính đến trong tập lệnh của mình. Nó thường được gợi ý bởi các G lớn để tạo ra hai tập tin nhỏ: một CSS và một tập tin JavaScript được bao gồm trong <head/> của bạn trong đó có tất cả các phong cách và logic cho nội dung trong màn hình đầu tiên (hoặc tốt hơn: nội tuyến chúng, mặc dù điều này làm tăng kích thước DOM). Source.

+0

Nếu bạn đánh dấu các tập lệnh là không đồng bộ, thì chúng có thể tải và thực hiện theo bất kỳ thứ tự nào. Sử dụng "trì hoãn" thay vào đó để làm cho chúng luôn luôn thực hiện đúng thứ tự. – AgentME

0

Cách tải tệp Javascript không đồng bộ?
Vâng để tải tập tin javascript bạn chỉ cần bao gồm "async" thuộc tính trong <script> thẻ ví dụ:

<script src="your path" async></script> 

Bây giờ kịch bản này sẽ được tải về ở chế độ nền trong khi nó sẽ không gây ra vấn đề JS rendering.
Lưu ý: Nếu bạn đang sử dụng một số plugin jquery tức là phóng to ảnh hoặc bất kỳ thứ gì khác, sẽ mất thêm thời gian để tải nhưng sau đó nó sẽ hoạt động bình thường.

Tại sao nên sử dụng từ khóa "DEFER" với "ASYNC"?

Bạn cũng có thể sử dụng thuộc tính trì hoãn cùng với thuộc tính không đồng bộ. <script> thẻ với thuộc tính async buộc tệp phải được tải xuống dưới nền và thực thi ngay sau khi được tải xuống. nhưng không đồng bộ với các thuộc tính trì hoãn <script> thẻ để thực hiện khi toàn bộ trang web được tải.

<script src="" async defer></script> 

Cách tải tệp CSS không đồng bộ? Nếu bạn muốn tải tệp CSS của mình một cách không đồng bộ trước tiên, bạn phải đặt <script> vào tệp đầu và sau đó bạn có thể sử dụng hàm loadCSS() để tải tệp CSS không đồng bộ.

<script> 
// https://github.com/filamentgroup/loadCSS 
!function(e){"use strict" 
var n=function(n,t,o){function i(e){return f.body?e():void setTimeout(function(){i(e)})}var d,r,a,l,f=e.document,s=f.createElement("link"),u=o||"all" 
return t?d=t:(r=(f.body||f.getElementsByTagName("head")[0]).childNodes,d=r[r.length-1]),a=f.styleSheets,s.rel="stylesheet",s.href=n,s.media="only x",i(function(){d.parentNode.insertBefore(s,t?d:d.nextSibling)}),l=function(e){for(var n=s.href,t=a.length;t--;)if(a[t].href===n)return e() 
setTimeout(function(){l(e)})},s.addEventListener&&s.addEventListener("load",function(){this.media=u}),s.onloadcssdefined=l,l(function(){s.media!==u&&(s.media=u)}),s} 
"undefined"!=typeof exports?exports.loadCSS=n:e.loadCSS=n}("undefined"!=typeof global?global:this) 
</script> 

Bây giờ bạn chỉ cần sử dụng hàm loadCSS.

<script> 
loadCSS("https://www.yourCSSLinkHere.com"); 
</script> 

Bằng cách này bạn có thể tải CSS của bạn và tập tin JS không đồng bộ.


Bạn có thể sử dụng HTTP/2.0 để khắc phục vấn đề tốc độ vì HTTP/2.0 cho phép tập tin của bạn sẽ được tải xuống song song nhưng HTTP/1.0 sẽ không cho phép tập tin của bạn sẽ được tải về song song, theo cách khác HTTP/1.0 tuân theo quy tắc FIFO (First In First Out).

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