mirror of
https://github.com/status-im/react-native.git
synced 2025-01-10 09:35:48 +00:00
8edc35004c
Summary:We found that moving the preloaded modules to the startup section of the RAM Bundle improves TTI quite a bit by saving lots of through the bridge calls and injecting multiple modules at once on JSC. However, doing this on a non hacky way required a lot of work. The main changes this diff does are: - Add to `BundleBase` additional bundling options. This options are fetched based on the entry file we're building by invoking a module that exports a function (`getBundleOptionsModulePath`). - Implement `BundleOptions` module to include the `numPreloadedModules` attribute as a bundle additional option. This value is computed by getting the dependencies the entry file has and looking for the first module that exports a module we don't want to preload. The `numPreloadedModules` attribute is then used to decide where to splice the array of modules. - Additional kung fu to make sure sourcemaps work for both preloaded and non preloaded modules. Reviewed By: davidaurelio Differential Revision: D3046534 fb-gh-sync-id: 80b676222ca3bb8b9eecc912a7963be94d3dee1a shipit-source-id: 80b676222ca3bb8b9eecc912a7963be94d3dee1a
57 lines
1.9 KiB
JavaScript
57 lines
1.9 KiB
JavaScript
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*/
|
|
'use strict';
|
|
|
|
const sourceMap = require('source-map');
|
|
const SourceMapConsumer = sourceMap.SourceMapConsumer;
|
|
|
|
/**
|
|
* Builds the sourcemaps for any type of unbundle provided the Bundle that
|
|
* contains the modules reachable from the entry point.
|
|
*
|
|
* The generated sourcemaps correspond to a regular bundle on which each module
|
|
* starts on a new line. Depending on the type of unbundle you're using, you
|
|
* will have to pipe the line number to native and use it when injecting the
|
|
* module's code into JSC. This way, we'll trick JSC to believe all the code is
|
|
* on a single big regular bundle where as it could be on an indexed bundle or
|
|
* as sparsed assets.
|
|
*/
|
|
function buildUnbundleSourcemap(bundle) {
|
|
const generator = new sourceMap.SourceMapGenerator({});
|
|
|
|
let offset = 0;
|
|
bundle.getUnbundle('INDEX').allModules.forEach(module => {
|
|
if (module.map) { // assets have no sourcemap
|
|
const consumer = new SourceMapConsumer(module.map);
|
|
consumer.eachMapping(mapping => {
|
|
generator.addMapping({
|
|
original: {
|
|
line: mapping.originalLine,
|
|
column: mapping.originalColumn,
|
|
},
|
|
generated: {
|
|
line: mapping.generatedLine + offset,
|
|
column: mapping.generatedColumn,
|
|
},
|
|
source: module.sourcePath,
|
|
});
|
|
});
|
|
|
|
generator.setSourceContent(module.sourcePath, module.sourceCode);
|
|
}
|
|
|
|
// some modules span more than 1 line
|
|
offset += module.code.split('\n').length;
|
|
});
|
|
|
|
return generator.toString();
|
|
}
|
|
|
|
module.exports = buildUnbundleSourcemap;
|