🚇 The JavaScript bundler for React Native. https://facebook.github.io/metro
Go to file
Jean Lauliac 5a87cc6e4b packager: preprocess outdated dependencies
Summary:
Note: if this changeset causes some breakage, consider disabling rather than reverting. To disable, the call to `_preprocessPotentialDependencies` in `ResolutionRequest` can be removed.

It's a bit of an experiment. I couldn't see any particular regression caused by this, but I could see net improvement of the global cache performance, as it unlock much, much stronger batching: indeed, instead of discovering dependencies progressively, we synchronously figure out the list of all potential modules of a bundle, and kick-off cache fetching and/or transformations. So when it comes to fetching from the global cache, it'll do less requests, and each requests will ask for considerably more keys at a time.

Potential problem caused by this changeset: if a module's dependencies completely changed, then the first time we try to build the bundle it'll start transforming modules that we probably don't care at all anymore, spending precious CPU time for nothing. I've been thinking about it and I cannot see such a case happening much often. Even if it happens, it should not cause any bug or corruption, it would just take additional time.

Other potential problem: that this new code doesn't handle some types of edge cases. It's quite hard to figure out what could possibly break in the `ResolutionRequest` code (and I think it would benefit from a larger refactor). We do have a good test coverage for `DependencyGraph` and it seems to work smoothly, so I'm relatively confident we're not breaking edge cases.

Reviewed By: davidaurelio

Differential Revision: D4875467

fbshipit-source-id: 2dfcc755bec638d3d1c47862ec1de5220953e812
2017-04-13 10:36:51 -07:00
.github Initial repository structure. 2017-01-26 12:56:40 +00:00
flow-typed Initial repository structure. 2017-01-26 12:56:40 +00:00
packages packager: preprocess outdated dependencies 2017-04-13 10:36:51 -07:00
scripts Make most tests work. 2017-04-11 19:19:25 +01:00
.babelrc Fixes. 2017-04-11 18:14:32 +01:00
.eslintignore Initial repository structure. 2017-01-26 12:56:40 +00:00
.eslintrc Repo updates. 2017-02-28 11:45:45 +00:00
.flowconfig Update flow. 2017-04-11 18:22:31 +01:00
.gitignore Use Yarn with lerna. 2017-03-01 11:01:35 +00:00
.npmignore Initial repository structure. 2017-01-26 12:56:40 +00:00
.travis.yml Initial repository structure. 2017-01-26 12:56:40 +00:00
CHANGELOG.md Initial repository structure. 2017-01-26 12:56:40 +00:00
CONTRIBUTING.md Initial repository structure. 2017-01-26 12:56:40 +00:00
LICENSE Initial repository structure. 2017-01-26 12:56:40 +00:00
PATENTS Initial repository structure. 2017-01-26 12:56:40 +00:00
README.md Initial repository structure. 2017-01-26 12:56:40 +00:00
appveyor.yml Initial repository structure. 2017-01-26 12:56:40 +00:00
lerna.json Use Yarn with lerna. 2017-03-01 11:01:35 +00:00
package.json Make most tests work. 2017-04-11 19:19:25 +01:00
yarn.lock Make most tests work. 2017-04-11 19:19:25 +01:00

README.md

metro-bundler Build Status Windows Build Status npm version

The JavaScript bundler for React Native