vNext Async Dependencies
by Troy Rhinehart
Why?
- Lodash (8.4%)
- OLS Core (2.6%)
- HTTP/2 +Cache (15 deps)
- Shared Deps
- editor
- api
- render
- sdk-app
Lodash
- Ship Core instead of Full
- ~24kB vs ~4kB gzipped
- 83% decrease
- Add more as needed
import _, { merge, forEach } from 'lodash';import _ from 'lodash/core';
import merge from 'lodash.merge';
import forEach from 'lodash.foreach';before
after
How?
- AMD
- SystemJS
- Registry?
AMD
Asynchronous module definition

define("components/Hello", [
"react"
], React => {
return props => {
return React.createElement("h1", props, "Hello World")
};
});
define("app/index", [
"react", "react-dom", "components/Hello"
], (React, ReactDOM, Hello) => {
ReactDOM.render(
React.createElement(Hello),
document.getElementById("app")
);
});
require(["app/index"]);SystemJS
Dynamic ES module loader

System.register("components/Hello.js", ["react"], (_export, _context) => {
let React;
return {
setters: [_React => {
React = _React;
}],
execute: () => {
_export('default', props => {
return React.createElement("h1", props, "Hello World")
});
}
}
});
System.register("app/index.js", ["react", "react-dom", "components/Hello.js"], (_export, _context) => {
let React, ReactDOM, Hello;
return {
setters: [_react => {
React = _react.default;
}, _reactDom => {
ReactDOM = _reactDom.default;
}, _componentsHelloJs=> {
Hello = _componentsHelloJs.default;
}],
execute: () => {
ReactDOM.render(
React.createElement(Hello),
document.getElementById("app")
);
}
}
});
System.import("app/index.js");Demos!
vNext Async Dependencies
By gingur
vNext Async Dependencies
- 96