45 lines
1.1 KiB
JavaScript
45 lines
1.1 KiB
JavaScript
|
/*
|
||
|
* Dependency Tree Cache
|
||
|
*
|
||
|
* Allows a build to pre-populate a dependency trace tree on the loader of
|
||
|
* the expected dependency tree, to be loaded upfront when requesting the
|
||
|
* module, avoinding the n round trips latency of module loading, where
|
||
|
* n is the dependency tree depth.
|
||
|
*
|
||
|
* eg:
|
||
|
* SystemJS.depCache = {
|
||
|
* 'app': ['normalized', 'deps'],
|
||
|
* 'normalized': ['another'],
|
||
|
* 'deps': ['tree']
|
||
|
* };
|
||
|
*
|
||
|
* SystemJS.import('app')
|
||
|
* // simultaneously starts loading all of:
|
||
|
* // 'normalized', 'deps', 'another', 'tree'
|
||
|
* // before "app" source is even loaded
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
(function() {
|
||
|
hookConstructor(function(constructor) {
|
||
|
return function() {
|
||
|
constructor.call(this);
|
||
|
this.depCache = {};
|
||
|
}
|
||
|
});
|
||
|
|
||
|
hook('locate', function(locate) {
|
||
|
return function(load) {
|
||
|
var loader = this;
|
||
|
// load direct deps, in turn will pick up their trace trees
|
||
|
var deps = loader.depCache[load.name];
|
||
|
if (deps)
|
||
|
for (var i = 0; i < deps.length; i++)
|
||
|
loader['import'](deps[i], load.name);
|
||
|
|
||
|
return locate.call(loader, load);
|
||
|
};
|
||
|
});
|
||
|
})();
|
||
|
|