Это способ, которым я структурировать мое заявление:
У меня есть яваскрипта путь, который я Минимизация по требованию на сервере, когда клиент доступа «/ 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" }
И когда мой клиент получает приложение свойство "JavaScript" в возвращенном объекте JSON это вызывает 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 должны быть как можно меньше, чтобы сохранить трафик.