2013-04-25 47 views
0

我很努力讓requireJS正常工作。網頁運行良好,但我認爲我正在以一種錯誤的方式做事。什麼時候定義一個模塊,什麼時候只需要使用requireJS文件

例如,頁XZY我添加下面的JavaScript頁面末(JS必須留在頁面上現在,因此無需外部JS-文件可能)

<script type="text/javascript" language="javascript"> 
    //<![CDATA[ 
    (function() { 
    require([ 
     'async!http://maps.google.com/maps/api/js?v=3&sensor=false', 
     'maps/jquery.ui.map.full.min.js', 
     'maps/jquery.ui.map.extensions.min' 
     ], function() { 

     // ... do stuff with Google Maps 

     } 
    ); 
    }()); 
//]]> 
</script> 

這樣做使google.map$.().gmap方法全局可用,這可能不應全局可用。

問題:
我應該將其轉換爲requireJS模塊嗎?爲什麼?

如果是這樣,該模塊是否可以在其他頁面上使用,或者我只是「重新定義」並且依賴項文件已經被緩存?

最後 - 我將不得不將我的require調用中的代碼轉換爲module.methods,然後我通過module_name.method_name(pass_some_parameters)調用?

回答

2

就看JS:

​​

你可以看到window.google是一個全球性的。沒有Google發佈AMD版本,你可以做的就不多了。

你應該創建一個模塊的決定首先應該是JS代碼的可讀性/可維護性問題。模塊是(應該),可讀,可重用的代碼塊/可重用的抽象塊,其餘代碼可以使用。你也應該從中獲得測試好處 - 每個模塊應該更容易獨立測試。

如果您選擇模塊化方法,您最終可能擁有更多的JS文件,並且您可能認爲這會導致性能問題 - 即多個HTTP請求。但是這可以通過使用RequireJS Optimiser將模塊優化爲單個文件來緩解。

如果您轉換爲模塊,那麼您可以從其他頁面登錄require,並且如果您設置了HTTP緩存頭,則瀏覽器可以選擇使用緩存版本,從而爲您節省HTTP請求(同樣的緩存如果您已將每個模塊優化爲單個文件,則啓發式應用)。

如果重新定義(我假設你的意思是複製和粘貼代碼塊),然後在通話上市require這些依賴應該都可以通過瀏覽器的緩存,因此立即可用(取決於您的Web服務器和HTTP緩存標頭)。

最後,是的,你可能需要重構一下代碼才能公開新模塊的API。如果這意味着用方法暴露單個對象,那麼這就是你應該做的。根據我的經驗,這個過程幾乎不可避免地會導致更好的代碼。由於您必須更多地考慮模塊的用途,而這往往會導致您破壞代碼段之間的耦合。

相關問題