Como conseguir um carregamento lento com o RequireJS?
Estamos construindo uma aplicação web não-trival usando Backbone, RequireJS e Handlebars, e bem, estou apenas curioso. No momento, cada um dos nossos modelos se parece com isso:
define(['Backbone', 'js/thing/a', 'js/thing/b', 'js/lib/bob'], function(a, b, bob) {
return Backbone.Router.extend({
// stuff here
});
});
onde thing / a, thing / b ambos têm suas próprias dependências, por exemplo em modelos de Handlebars, etc. O que acontece agora é que no meu main.js, todos os roteadores de 'alto nível' são carregados e inicializados; cada roteador de nível superior tem um conjunto de dependências (modelos, visualizações, etc), cada qual com suas próprias dependências (modelos, ajudantes, utilitários, etc). Basicamente, uma grande estrutura de árvore.
O problema neste caso é que toda esta árvore é resolvida e carregada no carregamento da página. Eu não me importo com isso, pois nós iremos executá-lo através do otimizador e acabar com um grande arquivo único (reduzindo RequireJS para basicamente uma estrutura de modularização). No entanto, estou curioso para saber se você pode carregar coisas como visualizações e modelos "on demand".
Existe o "embrulho simplificado do CommonJS" explicadoAqui, então eu tentei isso:
define(function(require) {
Backbone = require('Backbone');
return Backbone.Router.extend({
doStuff: function() {
var MyView = require('js/myView');
new MyView().render();
}
});
});
No entanto, olhando para o inspetor de rede do Chrome, parece que o RequireJS - de alguma forma, mesmo sem acionar a rota que aciona o manipulador doStuff - ainda carrega omyView
dependência. Questões:
require()
sem realmente acionar odoStuff
rota?Essa é a maneira correta, em termos teóricos, de fazer o carregamento sob demanda dos módulos e recursos do RequireJS?O otimizador r.js ainda funciona como anunciado se você usar essa notação?