關(guān)于javascript模塊加載技術(shù)的一些思考
來源:易賢網(wǎng) 閱讀:732 次 日期:2014-12-01 10:53:21
溫馨提示:易賢網(wǎng)小編為您整理了“關(guān)于javascript模塊加載技術(shù)的一些思考”,方便廣大網(wǎng)友查閱!

前不久有個(gè)網(wǎng)友問我在前端使用requireJs和seajs的問題,我當(dāng)時(shí)問他你們公司以前有沒有自己編寫的javascript庫(kù),或者javascript框架,他的回答是什么都沒有,他只是聽說像requirejs和seajs是新東西新技術(shù),很有價(jià)值所以想用它。

這位網(wǎng)友的問題引起了我對(duì)javascript模塊加載技術(shù)的思考,上篇文章我給出了自己寫的一個(gè)javascript庫(kù)的基本結(jié)構(gòu),其實(shí)寫這篇文章的一個(gè)起因就是因?yàn)槲蚁胧褂胷equirejs或者seajs這樣的技術(shù)來重新設(shè)計(jì)我寫javascript庫(kù)的基本模型,當(dāng)我深入了解這個(gè)技術(shù)后,我發(fā)現(xiàn)使用模塊加載系統(tǒng)來解決把javascript庫(kù)里通用代碼和業(yè)務(wù)代碼解耦的問題,是不正確的,模塊加載系統(tǒng)的作用范圍是解決不同javascript庫(kù)之間的依賴問題,而不是幫助你去如何開發(fā)一個(gè)javascript庫(kù)。

那么什么是javascript的模塊加載系統(tǒng)呢?

模塊系統(tǒng)主要為了解決不同javascript庫(kù)里操作對(duì)象的命名沖突問題以及不同javascript庫(kù)之間依賴的問題,模塊加載系統(tǒng)是針對(duì)大型web前端應(yīng)用或者說是巨型的web前端應(yīng)用。

一般巨型的web前端應(yīng)用頁(yè)面里,該頁(yè)面的功能非常豐富,業(yè)務(wù)非常龐雜,而且隨著時(shí)間推移,頁(yè)面的功能經(jīng)常會(huì)發(fā)生變遷,所以導(dǎo)致前端開發(fā)人員經(jīng)常要開發(fā)出針對(duì)新功能的功能模塊,但是實(shí)際業(yè)務(wù)里各個(gè)功能模塊之間的功能還有可能相互滲透,相互依賴的,關(guān)系錯(cuò)綜復(fù)雜,當(dāng)頁(yè)面復(fù)雜后,各個(gè)前端庫(kù)之間的關(guān)系就出現(xiàn)很難管理和控制的問題,這個(gè)時(shí)候模塊加載系統(tǒng)才會(huì)派上用場(chǎng)。

對(duì)于大多數(shù)程序員而言,能獨(dú)立承擔(dān)這么大web前端應(yīng)用的機(jī)會(huì)并不是太多,而開發(fā)中小型web前端應(yīng)用的機(jī)會(huì)會(huì)多的多,例如企業(yè)級(jí)的web項(xiàng)目,這樣的項(xiàng)目使用到的javascript庫(kù)的種類很少,各個(gè)庫(kù)的依賴關(guān)系很好控制,是沒有必要引入什么模塊管理系統(tǒng)的必要,就算很多中小型互聯(lián)網(wǎng)公司的網(wǎng)頁(yè),估計(jì)也不會(huì)比企業(yè)級(jí)web應(yīng)用前端那么復(fù)雜,所以它的模塊之間或者說javascript庫(kù)之間的關(guān)系很好管理的。其實(shí)像上面這些中小應(yīng)用都是針對(duì)某些或某一個(gè)具體場(chǎng)景進(jìn)行的,因此我個(gè)人覺得面對(duì)這樣的web前端項(xiàng)目我們最后能自己形成一個(gè)獨(dú)立的javascript庫(kù),這個(gè)庫(kù)的特點(diǎn)應(yīng)該和jQuery這種類型的庫(kù)類似:一個(gè)主庫(kù)加上若干個(gè)插件庫(kù)的模式,主庫(kù)的目的是解決通用性的問題,它應(yīng)該是可以進(jìn)行復(fù)用和遷移的,而插件庫(kù)的目的往往和業(yè)務(wù)代碼相關(guān)的,不過為了區(qū)別主庫(kù)和插件庫(kù)的作用域問題,所以我在庫(kù)里加上了命名空間的功能。

Javascript模塊加載技術(shù)和hadoop的技術(shù)有些相同點(diǎn),那就是它們都是針對(duì)超大型系統(tǒng)的技術(shù),它們只有在一定條件下才能發(fā)揮它們的作用,所以這些技術(shù)都是從大型互聯(lián)網(wǎng)公司推出出來,因?yàn)榇笮突ヂ?lián)網(wǎng)公司隨著應(yīng)用變大變復(fù)雜后必須要去解決的問題,當(dāng)你系統(tǒng)還是處于起步階段,這些技術(shù)的運(yùn)用往往要謹(jǐn)慎,我們應(yīng)該找出最簡(jiǎn)單最有效的方法解決我們實(shí)際問題,如果你覺得這個(gè)系統(tǒng)以后會(huì)越來越大,那么你應(yīng)該保留以后使用這些技術(shù)的接口,如果使用太早了,很有可能當(dāng)系統(tǒng)規(guī)模擴(kuò)大后,你重構(gòu)代碼的代價(jià)會(huì)更高。

對(duì)于模塊加載系統(tǒng),它最適合的場(chǎng)景是解決大型web前端應(yīng)用模塊之間的解耦的問題,如果我們只要新寫一個(gè)javascript文件就馬上使用模塊加載技術(shù),這個(gè)不是有點(diǎn)濫用技術(shù)的嫌疑了,我們運(yùn)用某個(gè)技術(shù)之前不應(yīng)該只是考慮它怎么用,如何用,應(yīng)該還要想想使用它有沒有價(jià)值的問題。

最后我想說的是,我覺得中小型web前端應(yīng)用到了生產(chǎn)部署,因?yàn)閖avascript并非最復(fù)雜,所以所有外部javascript文件都打包成一個(gè)javascript外部文件最好,這樣的好處就是減少了http請(qǐng)求個(gè)數(shù),使用模塊加載技術(shù)會(huì)讓你打包文件操作很麻煩,甚至無法做到(像requirejs和seajs的模塊都是以文件為單位的,每個(gè)模塊就是一個(gè)獨(dú)立文件),這和解決減少http目的是相悖的。

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看腳本欄目
易賢網(wǎng)手機(jī)網(wǎng)站地址:關(guān)于javascript模塊加載技術(shù)的一些思考
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2025國(guó)考·省考課程試聽報(bào)名

  • 報(bào)班類型
  • 姓名
  • 手機(jī)號(hào)
  • 驗(yàn)證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)