在舊方法,可以潛在地加載許多腳本。腳本加載器(是Yepnope或其他)測試您指定的功能,並且對於每個測試,它選擇要加載的腳本。
舉一個簡單的例子,讓我們說,要加載自己的腳本,再加上支持版本的jQuery的IE < 9如果需要的話,或者如果可能的較新的jQuery:
yepnope({
"test" : document.attachEvent,
"yep" : 'jquery-1.11.3.js',
"nope" : 'jquery-2.1.4.js'
});
yepnope({
"load" : "myscript.js"
});
在新的方法,你只加載一個腳本:它可能有幾個版本,但瀏覽器只關注其中的一個。這些不同的版本將處理瀏覽器功能的不同組合,但瀏覽器(和用戶)只需要關心一個文件。腳本加載器運行其測試,並根據結果選擇要下載的構建版本。
用上面的例子做這件事需要你建立myscript.js
兩次。一個版本將與現代瀏覽器的jQuery 2.x連接,另一個版本將與jQuery 1.x連接,以便在舊瀏覽器中支持。你可能使yepnope在這種情況下工作,假設你有其他方式創建構建。它看起來像這樣:
yepnope({
"test" : document.attachEvent,
"yep" : "myscript-oldie.js",
"nope" : "myscript-modern.js"
});
但是,這留下了什麼用於構建工具的問題。許多其他的腳本加載程序-require.js,Browserify,webpack等等已經有了自己的工具來構建腳本。 Yepnope沒有,其後面的人決定其他裝載機已經建立了比他們可能的更好的腳本。
爲什麼這樣做?網絡延遲。 許多腳本 - 甚至可能最小 - 足夠小,以至於需要更多時間來設置和拆除HTTP請求,而不是實際下載文件。如果您可以將它們全部整合到一個文件中,那麼只需一個HTTP請求就可以獲得整個腳本,而不必爲每個模塊發出一個請求。即使正在下載的數據量沒有真正改變,這也可以提高您的性能。
用戶代理測試(即瀏覽器版本)通常充滿了危險 –
您可能會通過檢測用戶代理標頭並在瀏覽器不需要它時返回空JavaScript來執行此操作。 –