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

Reply via email to