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 <nikhi...@microsoft.com> 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 infrastruct...@apache.org or file a JIRA ticket with INFRA. --- --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org For additional commands, e-mail: dev-h...@cordova.apache.org