這是構建我的應用程序的方式:
我有一個JavaScript路徑,這我由服務器涅槃點播時客戶端訪問「/ JavaScript的」,所以我只在一個腳本行我index.html的:
<script src='/javascript'></script>
我的/ JavaScript的目錄結構如下:
application.js
router.js
lib/
lib/jquery.js
lib/underscore.js
lib/backbone.js
lib/require.js
lib/other_libraries.js
views/
views/navigation.js
views/overlay.js
views/content.js
views/page
views/page/constructor.js
views/page/elements
views/page/elements/constructor.js
views/page/elements/table.js
views/page/elements/form.js
views/page/elements/actions.js
collections/
collections/paginated.js
所有這些文件都微細化以及在第一個請求從客戶端加載。通過這樣做,我的很多代碼已經在我的瀏覽器中加載,然後應用程序使用RequireJS發出任何請求。
在我的服務器上,我有一個目錄,它也是公開的,但是用於動態JavaScript加載和模板(它可以在任何給定時間由應用程序訪問)。目錄如下:
dynamic/
dynamic/javascript
dynamic/javascript/pages
dynamic/javascript/pages/articles.js
dynamic/templates
dynamic/templates/pages
dynamic/templates/pages/articles.hb
dynamic/templates/pages/items.hb
當我的服務器請求「/templates/pages/articles.hb」服務器返回JSON對象,它看起來是這樣的:
{ html : "<div class='page' id='articles'>blah blah blah</div>", javascript : "javascript/pages/articles.js" }
,當我的客戶端應用程序接收和在返回的JSON對象 「的JavaScript」 屬性就會觸發RequireJS要求
if (typeof json.javascript === string) {
require([ json.javascript ], function(constructor) {
window.app.page = new constructor();
});
}
在動態/ JavaScript的/網頁/ articles.js我有類似:
define(function() {
var Model = Backbone.Model.extend({});
// Collections.Paginated is in fact the Collection defined by /javascript/collection/paginated.js
// it is already loaded via the initial javascript loading
var Collection = Collections.Paginated.extend({
url : '/api/articles'
});
// Views.Page is in fact the View defined by /javascript/views/page/constructor.js
// it is also already loaded via the initial javascript loading
var articles = Views.Page.extend({
collection : Collection,
initialize: function(options) {
this.collection = new Collection();
});
});
return articles;
});
幾乎就是這樣。我有RequireJS的最低要求,因爲每次點擊require('something.js')它都向服務器發出請求,這對您的應用程序速度不利。因此,你的問題的確切答案(在我看來)是:你應該儘可能地分開初始加載的文件,但後來使用requireJS加載的文件應儘可能小以節省流量。