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:

Isso é realmente possível? Existem mágicas pretas no RequireJS que procura por chamadas pararequire() 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?

questionAnswers(2)

yourAnswerToTheQuestion