1
我已經看到以下IIFE模式(有名字嗎?),根據this博客文章防止其他插件,提高縮小和具有微小的性能優勢。我也親自給IIFE添加了一個命名空間:我已經在每個JavaScript文件中看到了這種模式。在連接和縮小之後怎麼樣?我如何確保我的代碼僅包含上述IIFE的一個?在這方面做像NPM,Gulp/Grunt這樣的工具?有沒有處理這種情況的標準方法?避免多個副本的IIFE模式
我已經看到以下IIFE模式(有名字嗎?),根據this博客文章防止其他插件,提高縮小和具有微小的性能優勢。我也親自給IIFE添加了一個命名空間:我已經在每個JavaScript文件中看到了這種模式。在連接和縮小之後怎麼樣?我如何確保我的代碼僅包含上述IIFE的一個?在這方面做像NPM,Gulp/Grunt這樣的工具?有沒有處理這種情況的標準方法?避免多個副本的IIFE模式
經過一番調查之後,像jQuery和knockout這樣的庫編寫者通過預先掛起並將IFFE附加到JavaScript來處理此問題。然後他們有一個將所有內容連接在一起的make文件。
jQuery IIFE的開始處理非瀏覽器場景要複雜得多。
(function(global, factory) {
if (typeof module === "object" && typeof module.exports === "object") {
module.exports = global.document ?
factory(global, true) :
function(w) {
if (!w.document) {
throw new Error("jQuery requires a window with a document");
}
return factory(w);
};
} else {
factory(global);
}
}(typeof window !== "undefined" ? window : this, function(window, noGlobal) {
return jQuery;
}));
淘汰賽(感謝@JamesThorpe)採用一種略微不同的方法來解決窗口和它的後代。
(function(undefined){
var window = this || (0, eval)('this'),
document = window['document'],
navigator = window['navigator'],
jQueryInstance = window["jQuery"],
JSON = window["JSON"];
}());
然後,您可以使用類似gulp-concat夾在你自己的腳本文件的前奏和結尾的文件。
這對性能的影響很小,由於模式的多次使用,你有什麼問題? – Barmar
這是您必須在每個文件中複製的代碼。連接和縮小後,您只需要它的一個副本,這將進一步幫助縮小。這似乎是一個相當常見的模式,我曾希望有人解決了這個問題。 –
在什麼狀態下運行您的構建工具?作爲最後一步,觀看還是更多? – atmd