成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript代碼組織結(jié)構(gòu)良好的5個(gè)特點(diǎn)[reuqire.js]

wushuiyong / 2024人閱讀

摘要:可重用的代碼變得更可靠,單元測試的數(shù)量增加了倍也是一個(gè)因素。模塊不應(yīng)依賴全局變量為了進(jìn)一步加強(qiáng)我們的代碼庫,我們已經(jīng)幾乎完全消滅了全局變量除了由提供的全局變量,如和。

隨著JavaScript項(xiàng)目的成長,如果你不小心處理的話,他們往往會變得難以管理。我們發(fā)現(xiàn)自己常常陷入的一些問題: 當(dāng)在創(chuàng)建新的頁面時(shí)發(fā)現(xiàn),很難重用或測試之前寫的代碼。
當(dāng)我們更深處地研究這些問題,我們發(fā)現(xiàn)根本原因是無效的依賴管理造成的。比如,腳本A依賴腳本B,并且腳本B又依賴腳本C,當(dāng)C沒有被正確引入時(shí),整個(gè)依賴鏈就無法正常工作了。
為了解決這個(gè)問題,我們已經(jīng)采取了異步模塊定義(AMD)的模式,并引入require.js到我們的技術(shù)堆棧。經(jīng)過對AMD的進(jìn)一步探索,我們已經(jīng)基本確定,組織嚴(yán)密的JavaScript一般都呈現(xiàn)以下五個(gè)特點(diǎn):

始終聲明我們的依賴

為第三方代碼庫添加shim(墊片)

定義跟調(diào)用應(yīng)該分離

依賴應(yīng)該異步加載

模塊不應(yīng)依賴全局變量

讓我們詳細(xì)討論一下。

始終聲明我們的依賴

我們最常碰到了的一個(gè)問題是,我們會經(jīng)常忽略那些會被確定加載的依賴項(xiàng)。舉例來說,如果我們創(chuàng)建了一個(gè)jQuery插件,一般認(rèn)為沒有必要申報(bào)jQuery的依賴,因?yàn)樗诖蠖鄶?shù)頁面都是默認(rèn)裝載的。雖然這似乎適用于大多數(shù)的網(wǎng)頁,但當(dāng)我們試圖進(jìn)行單元測試或在一個(gè)全新的頁面加載時(shí),它就變成一個(gè)問題。
始終聲明我們的依賴,我們就消除了JavaScript中90%的問題。可重用的代碼變得更可靠,單元測試的數(shù)量增加了4倍也是一個(gè)因素。

為第三方代碼庫添加shim(墊片)

在管理JavaScript依賴時(shí)經(jīng)常碰到的一個(gè)有趣問題是,較舊的第三方庫可能無法和您的依賴關(guān)系管理系統(tǒng)配合工作。例如,你們內(nèi)部使用了jQuery的一個(gè)很酷的插件,但它對require.js一無所知。這會成為一個(gè)問題,因?yàn)榈谝粋€(gè)特點(diǎn),我們來添加對這個(gè)插件的引用。
解決的辦法是通過依賴管理工具為這個(gè)插件制作一個(gè)墊片。在require.js中,這可以很容易地通過配置來完成:

var require = {
    "shim": {
        "lib/cool-plugin": {
            "deps": ["lib/jquery"]
        }
    }
}

有了這個(gè)簡單的配置,每一個(gè)加載 lib/cool-plugin.js 的腳本都會自動(dòng)加載jQuery。將有助于滿足所有相關(guān)性.
最終的結(jié)果是代碼更容易測試和重用,因?yàn)槟憧偸怯幸粋€(gè)require()來調(diào)用所需的功能。

定義跟調(diào)用應(yīng)該分離

這是限制JavaScript代碼的可重用性和可測試性的一個(gè)常見問題。問題表現(xiàn)在一個(gè)單一的文件即定義了一個(gè)類/函數(shù)又調(diào)用了它。考慮下面的代碼:

## js/User.js

define(functino(require) {
   var User = function(name, greeter) {
        this.name = name;
        this.greeter = greeter;
   };

   User.prototype.sayHello = function() {
        this.greeter("Hello, " + this.name);
   };

   var user = new User("Alice", window.alert);
   user.sayHello();
});

在這個(gè)例子中,一個(gè)單一的文件即定義了User類又調(diào)用它。這將很難重用這個(gè)代碼,因?yàn)橹灰虞d這個(gè)腳本就會出現(xiàn)alert。同樣greeter這個(gè)非常難以測試。
解決的辦法是保持定義和執(zhí)行的分離。這有助于確??芍赜眯院涂蓽y性:

## js/User.js

define(functino(require) {
   var User = function(name, greeter) {
        this.name = name;
        this.greeter = greeter;
   };

   User.prototype.sayHello = function() {
        this.greeter("Hello, " + this.name);
   };

   return User;
});



## js/my-page.js

define(functino(require) {
    var User = require("js/User");
    var user = new User("Alice", window.alert);
    user.sayHello();
});

這種變化,User類可以安全地在許多腳本中重用。

依賴應(yīng)該異步加載

因?yàn)樵噲D同步加載腳本會導(dǎo)致瀏覽器鎖死,這是非常重要的,你的腳本和你的模塊應(yīng)該使用異步加載機(jī)制。 Require.js在默認(rèn)情況下,所有異步加載你的模塊,只有所有的的依賴都加載完以后才會執(zhí)行你的模塊代碼的函數(shù)。
通過使用一個(gè)閉包,我們可以進(jìn)一步利用“use strict”的好處。

模塊不應(yīng)依賴全局變量

為了進(jìn)一步加強(qiáng)我們的JavaScript代碼庫,我們已經(jīng)(幾乎)完全消滅了全局變量(除了由require.js提供的全局變量,如require()和define())。全局變量是臭名昭著的潛在的進(jìn)入模塊的“隱藏的依賴關(guān)系”,它會使代碼很難重用或測試。
Require.js也讓我們轉(zhuǎn)換第三方全局變量,require() - 通過墊補(bǔ)功能能模塊。在這個(gè)例子中,lib/calculator 創(chuàng)建一個(gè)全局的計(jì)算器對象,這個(gè)庫是被require化的。

var require = {
    "shim" : {
        "lib/calculator": {
            "export": "Calc"
        }
    }
}
結(jié)論

管理依賴是挺難的(hard),但肯定不是做不到的(difficult)。通過使用依賴管理,你的代碼將更可靠。

via ourjs

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/85440.html

相關(guān)文章

  • require.js學(xué)習(xí)記錄

    摘要:工作方式為使用將每一個(gè)依賴加載為一個(gè)標(biāo)簽。然后在被瀏覽器加載完畢后,便會自動(dòng)繼承之前配置的參數(shù)??梢詥为?dú)定義鍵值隊(duì)數(shù)據(jù),作為配置文件來使用還可以定義依賴的關(guān)系壓縮使用來進(jìn)行壓縮時(shí),需要指定文件。在鏈接中有很好的示例,可以參看學(xué)習(xí)。 1、簡介 官方對requirejs的描述:RequireJS is a JavaScript file and module loader. It is o...

    鄒強(qiáng) 評論0 收藏0
  • 前端工程師知識體系

    摘要:目前只有和有這個(gè)概率。是快速開發(fā)應(yīng)用程序的前端工具包。調(diào)試工具前端的調(diào)試工具很多,比如,核心的的。前端流程部署,和現(xiàn)在幾乎是前端最流行的自動(dòng)化的項(xiàng)目構(gòu)建工具正則表達(dá)式瀏覽器插件開發(fā)瀏覽器原理溝通能力優(yōu)秀 下圖是前端工程師圖解:showImg(http://upload-images.jianshu.io/upload_images/1807893-de7c7404345922b6.jp...

    itvincent 評論0 收藏0
  • 前端工程師知識體系

    摘要:目前只有和有這個(gè)概率。是快速開發(fā)應(yīng)用程序的前端工具包。調(diào)試工具前端的調(diào)試工具很多,比如,核心的的。前端流程部署,和現(xiàn)在幾乎是前端最流行的自動(dòng)化的項(xiàng)目構(gòu)建工具正則表達(dá)式瀏覽器插件開發(fā)瀏覽器原理溝通能力優(yōu)秀 下圖是前端工程師圖解:showImg(http://upload-images.jianshu.io/upload_images/1807893-de7c7404345922b6.jp...

    raise_yang 評論0 收藏0
  • 前端工程師知識體系

    摘要:目前只有和有這個(gè)概率。是快速開發(fā)應(yīng)用程序的前端工具包。調(diào)試工具前端的調(diào)試工具很多,比如,核心的的。前端流程部署,和現(xiàn)在幾乎是前端最流行的自動(dòng)化的項(xiàng)目構(gòu)建工具正則表達(dá)式瀏覽器插件開發(fā)瀏覽器原理溝通能力優(yōu)秀 下圖是前端工程師圖解:showImg(http://upload-images.jianshu.io/upload_images/1807893-de7c7404345922b6.jp...

    Sanchi 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<