GitHub user nikhilkh opened a pull request:
https://github.com/apache/cordova-lib/pull/434
CB-11194 Improve cordova load time
I instrumented module load and this change improves our load time by ~50%
(300+ ms) for `cordova build android` on a hello world project. Biggest gains
are from delay loading only when required:
- browserify
- unorm
- unpack
```diff
--- a/Users/nikhil/Developer/cordova/require.log
+++ b/Users/nikhil/Developer/cordova/require-after.log
@@ -1,116 +1,64 @@
> Module load underscore: 4
->>> Module load graceful-fs: 3
->>> Module load osenv: 3
->>> Module load write-file-atomic: 4
->> Module load configstore: 17
->>>> Module load color-convert: 4
+>> Module load child_process: 3
+>>> Module load graceful-fs: 6
+>>> Module load osenv: 4
+>>>>> Module load crypto: 4
+>>>> Module load ./rng: 5
+>>> Module load uuid: 6
+>>> Module load write-file-atomic: 3
+>> Module load configstore: 24
+>>>> Module load color-convert: 5
>>> Module load ansi-styles: 6
->> Module load chalk: 11
->> Module load semver-diff: 3
-> Module load update-notifier: 36
->> Module load ../hooks/HooksRunner: 3
-> Module load ./build: 3
->>> Module load unorm: 24
->> Module load ../platforms/PlatformApiPoly: 30
->>>>>>>>>>>> Module load graceful-fs: 12
->>>>>>>>>>> Module load ./lib/reader.js: 13
->>>>>>>>>>>>>> Module load minimatch: 3
->>>>>>>>>>>>>> Module load inflight: 3
->>>>>>>>>>>>> Module load glob: 9
->>>>>>>>>>>> Module load rimraf: 10
->>>>>>>>>>> Module load ./lib/writer.js: 15
->>>>>>>>>> Module load fstream: 33
->>>>>>>>> Module load ./entry.js: 35
->>>>>>>> Module load ./entry-writer.js: 37
->>>>>>> Module load ./lib/pack.js: 39
->>>>>> Module load tar: 44
->>>>> Module load ../../util/unpack: 46
->>>> Module load ../plugman/registry/registry: 49
->>> Module load ./plugin: 54
->> Module load ./restore-util: 54
->>>>>> Module load acorn: 6
->>>>> Module load falafel: 7
->>>>> Module load ./loadConfig: 3
->>>> Module load browserify-transform-tools: 13
->>> Module load aliasify: 15
->>>>>>> Module load resolve: 3
->>>>>> Module load browser-resolve: 4
->>>>>>> Module load acorn: 20
->>>>>>>> Module load estraverse: 3
->>>>>>>> Module load esutils: 4
->>>>>>> Module load escodegen: 11
->>>>>> Module load detective: 33
->>>>>>>>>> Module load ./_stream_readable: 3
->>>>>>>>> Module load ./_stream_duplex: 9
->>>>>>>> Module load ./lib/_stream_transform.js: 9
->>>>>>> Module load readable-stream/transform: 10
->>>>>> Module load through2: 12
->>>>>> Module load concat-stream: 3
->>>>>>>>>>> Module load ./_stream_readable: 3
->>>>>>>>>> Module load ./_stream_duplex: 7
->>>>>>>>> Module load ./lib/_stream_transform.js: 7
->>>>>>>> Module load readable-stream/transform: 8
->>>>>>> Module load through2: 8
->>>>>> Module load stream-combiner2: 11
->>>>> Module load module-deps: 70
->>>>> Module load deps-sort: 3
->>>>>> Module load JSONStream: 3
->>>>>>>>>> Module load ./_stream_readable: 3
->>>>>>>>> Module load ./_stream_duplex: 6
->>>>>>>> Module load ./lib/_stream_transform.js: 7
->>>>>>> Module load readable-stream/transform: 8
->>>>>> Module load through2: 8
->>>>>>>>> Module load ./source-map/source-map-generator: 10
->>>>>>>>> Module load ./source-map/source-node: 3
->>>>>>>> Module load source-map: 14
->>>>>>> Module load inline-source-map: 15
->>>>>>>>> Module load ./source-map/source-map-generator: 9
->>>>>>>>> Module load ./source-map/source-map-consumer: 3
->>>>>>>> Module load source-map: 15
->>>>>>> Module load ./lib/mappings-from-map: 16
->>>>>> Module load combine-source-map: 33
->>>>> Module load browser-pack: 46
->>>>>>>> Module load acorn: 18
->>>>>>> Module load astw: 18
->>>>>> Module load lexical-scope: 19
->>>>>>>>> Module load ./source-map/source-map-generator: 8
->>>>>>>>> Module load ./source-map/source-map-consumer: 5
->>>>>>>> Module load source-map: 16
->>>>>>> Module load inline-source-map: 17
->>>>>> Module load combine-source-map: 21
->>>>> Module load insert-module-globals: 43
->>>>>> Module load acorn: 25
->>>>> Module load syntax-error: 26
->>>>> Module load ./lib/builtins.js: 9
->>>>>> Module load stream-splicer: 4
->>>>> Module load labeled-stream-splicer: 5
->>>> Module load browserify: 208
->>> Module load cordova-js/tasks/lib/bundle-browserify: 216
->> Module load ../plugman/browserify: 234
-> Module load ./prepare: 319
->>>>>>>> Module load sax: 3
->>>>>>> Module load ./sax: 4
->>>>>> Module load ./parsers/index: 4
->>>>> Module load ./parser: 5
->>>> Module load elementtree: 9
+>> Module load chalk: 12
+>>> Module load semver: 3
+>> Module load semver-diff: 4
+> Module load update-notifier: 46
+> Module load ./src/platforms/platforms: 4
+>>>>>>> Module load underscore: 4
+>>>>>>>>>>> Module load sax: 3
+>>>>>>>>>> Module load ./sax: 3
+>>>>>>>>> Module load ./parsers/index: 4
+>>>>>>>> Module load ./parser: 4
+>>>>>>> Module load elementtree: 8
+>>>>>> Module load ../util/xml-helpers: 14
+>>>>> Module load ./PluginInfo: 15
+>>>> Module load ./src/PluginInfo/PluginInfoProvider.js: 16
+>>> Module load ./scriptsFinder: 18
+>>>> Module load q: 5
+>>> Module load ./src/superspawn: 8
+>> Module load ../hooks/HooksRunner: 29
+> Module load ./build: 30
+>> Module load ./src/PlatformJson: 5
+>>> Module load shelljs: 6
+>>> Module load ../plugman/pla`tforms/common: 3
+>>> Module load ./src/ActionStack: 3
+>>>> Module load semver: 5
+>>> Module load ./src/ConfigChanges/ConfigChanges.js: 11
+>> Module load ../platforms/PlatformApiPoly: 26
+> Module load ./prepare: 36
+>>>>>>>> Module load sax: 4
+>>>>>>> Module load ./sax: 5
+>>>>>> Module load ./parsers/index: 6
+>>>>> Module load ./parser: 6
+>>>> Module load elementtree: 12
>>>>> Module load underscore: 5
>>>> Module load ./src/util/xml-helpers: 7
->>> Module load ./AndroidManifest: 17
+>>> Module load ./AndroidManifest: 21
>>>> Module load shelljs: 6
>>> Module load ./pluginHandlers: 8
->> Module load ./lib/AndroidProject: 28
+>> Module load ./lib/AndroidProject: 31
>>> Module load q: 5
->>> Module load ./PlatformJson: 4
+>>> Module load ./PlatformJson: 5
+>>>> Module load semver: 3
>>> Module load ./ConfigChanges/ConfigChanges: 5
->> Module load ./src/PluginManager: 19
->> Module load ./src/CordovaLogger: 3
-> Module load
/Users/nikhil/Developer/apps/perf/platforms/android/cordova/Api.js: 50
-load: 764ms
+>> Module load ./src/PluginManager: 20
+> Module load
/Users/nikhil/Developer/apps/perf/platforms/android/cordova/Api.js: 54
+load: 341ms
> Module load ./lib/prepare: 5
ANDROID_HOME=/Users/nikhil/Library/Android/sdk
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home
->> Module load ./Adb: 3
-> Module load ./lib/build: 7
+> Module load ./lib/build: 6
+> Module load ./GradleBuilder: 4
:preBuild UP-TO-DATE
:preDebugBuild UP-TO-DATE
:checkDebugManifest
@@ -171,6 +119,6 @@
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home
BUILD SUCCESSFUL
-Total time: 1.027 secs
+Total time: 1.244 secs
Built the following apk(s):
/Users/nikhil/Developer/apps/perf/platforms/android/build/outputs/apk/android-debug.apk
```
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/MSOpenTech/cordova-lib faster
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/cordova-lib/pull/434.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #434
----
commit 1d5de898689886dfe71f47a07fa9a9a01cf65c4c
Author: Nikhil Khandelwal <[email protected]>
Date: 2016-05-03T16:10:25Z
CB-11194 Improve cordova load time
----
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]