DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> 關於javascript模塊加載技術的一些思考
關於javascript模塊加載技術的一些思考
編輯:關於JavaScript     

前不久有個網友問我在前端使用requireJs和seajs的問題,我當時問他你們公司以前有沒有自己編寫的javascript庫,或者javascript框架,他的回答是什麼都沒有,他只是聽說像requirejs和seajs是新東西新技術,很有價值所以想用它。

  這位網友的問題引起了我對javascript模塊加載技術的思考,上篇文章我給出了自己寫的一個javascript庫的基本結構,其實寫這篇文章的一個起因就是因為我想使用requirejs或者seajs這樣的技術來重新設計我寫javascript庫的基本模型,當我深入了解這個技術後,我發現使用模塊加載系統來解決把javascript庫裡通用代碼和業務代碼解耦的問題,是不正確的,模塊加載系統的作用范圍是解決不同javascript庫之間的依賴問題,而不是幫助你去如何開發一個javascript庫。

  那麼什麼是javascript的模塊加載系統呢?

  模塊系統主要為了解決不同javascript庫裡操作對象的命名沖突問題以及不同javascript庫之間依賴的問題,模塊加載系統是針對大型web前端應用或者說是巨型的web前端應用。

  一般巨型的web前端應用頁面裡,該頁面的功能非常豐富,業務非常龐雜,而且隨著時間推移,頁面的功能經常會發生變遷,所以導致前端開發人員經常要開發出針對新功能的功能模塊,但是實際業務裡各個功能模塊之間的功能還有可能相互滲透,相互依賴的,關系錯綜復雜,當頁面復雜後,各個前端庫之間的關系就出現很難管理和控制的問題,這個時候模塊加載系統才會派上用場。

  對於大多數程序員而言,能獨立承擔這麼大web前端應用的機會並不是太多,而開發中小型web前端應用的機會會多的多,例如企業級的web項目,這樣的項目使用到的javascript庫的種類很少,各個庫的依賴關系很好控制,是沒有必要引入什麼模塊管理系統的必要,就算很多中小型互聯網公司的網頁,估計也不會比企業級web應用前端那麼復雜,所以它的模塊之間或者說javascript庫之間的關系很好管理的。其實像上面這些中小應用都是針對某些或某一個具體場景進行的,因此我個人覺得面對這樣的web前端項目我們最後能自己形成一個獨立的javascript庫,這個庫的特點應該和jQuery這種類型的庫類似:一個主庫加上若干個插件庫的模式,主庫的目的是解決通用性的問題,它應該是可以進行復用和遷移的,而插件庫的目的往往和業務代碼相關的,不過為了區別主庫和插件庫的作用域問題,所以我在庫裡加上了命名空間的功能。

  Javascript模塊加載技術和hadoop的技術有些相同點,那就是它們都是針對超大型系統的技術,它們只有在一定條件下才能發揮它們的作用,所以這些技術都是從大型互聯網公司推出出來,因為大型互聯網公司隨著應用變大變復雜後必須要去解決的問題,當你系統還是處於起步階段,這些技術的運用往往要謹慎,我們應該找出最簡單最有效的方法解決我們實際問題,如果你覺得這個系統以後會越來越大,那麼你應該保留以後使用這些技術的接口,如果使用太早了,很有可能當系統規模擴大後,你重構代碼的代價會更高。

  對於模塊加載系統,它最適合的場景是解決大型web前端應用模塊之間的解耦的問題,如果我們只要新寫一個javascript文件就馬上使用模塊加載技術,這個不是有點濫用技術的嫌疑了,我們運用某個技術之前不應該只是考慮它怎麼用,如何用,應該還要想想使用它有沒有價值的問題。

  最後我想說的是,我覺得中小型web前端應用到了生產部署,因為javascript並非最復雜,所以所有外部javascript文件都打包成一個javascript外部文件最好,這樣的好處就是減少了http請求個數,使用模塊加載技術會讓你打包文件操作很麻煩,甚至無法做到(像requirejs和seajs的模塊都是以文件為單位的,每個模塊就是一個獨立文件),這和解決減少http目的是相悖的。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved