Interesting, thanks for looking into it Michal!
On 8/7/13 8:39 AM, "Michal Mocny" <[email protected]> wrote:
>Update, as I'm trying to profile, I noticed something interesting.
>
>From node REPL console:
>
>var CLI = require('/Users/mmocny/dev/cordova/cordova-cli/src/cli'); //
><--
>takes a few seconds
>new CLI(['node','cordova','platform','ls']) // <-- instantaneous
>new CLI(['node','cordova','plugin','ls']) // <-- instantaneous
>new CLI(['node','cordova','prepare']) // <-- not instant, but ~1s
>
>So, it seems the majority of slowdown comes from initialization not
>inefficiencies with the actual implementations. Its possible we are doing
>too much up-front, or including some heavy dependency. Going to try to
>track that down.
>
>-Michal
>
>
>On Tue, Aug 6, 2013 at 11:30 AM, Filip Maj <[email protected]> wrote:
>
>>
>> >cordova plugin ls
>> >cordova platform ls
>> >cordova prepare
>>
>> I don't think any of these commands invoke shelljs
>>
>>
>> >On Thu, Jul 25, 2013 at 1:57 PM, Filip Maj <[email protected]> wrote:
>> >
>> >> cheers
>> >>
>> >> On 7/25/13 10:54 AM, "Andrew Grieve" <[email protected]> wrote:
>> >>
>> >> >Issues created.
>> >> >https://issues.apache.org/jira/browse/CB-4398
>> >> >https://issues.apache.org/jira/browse/CB-4397
>> >> >
>> >> >
>> >> >On Thu, Jul 25, 2013 at 1:41 PM, Filip Maj <[email protected]> wrote:
>> >> >
>> >> >> Chalk it up as another issue.
>> >> >>
>> >> >> Feel free to help out with CLI/plugman tagged issues everyone.
>>Lots
>> >>of
>> >> >> work there! ;)
>> >> >>
>> >> >> On 7/25/13 10:39 AM, "Anis KADRI" <[email protected]> wrote:
>> >> >>
>> >> >> >xD. +1 for child_process because it comes with node too eh :)
>> >> >> >
>> >> >> >On Thu, Jul 25, 2013 at 10:36 AM, Filip Maj <[email protected]>
>>wrote:
>> >> >> >> Changed your named to Gmail now huh Jesse?
>> >> >> >>
>> >> >> >> On 7/25/13 10:32 AM, "Gmail" <[email protected]> wrote:
>> >> >> >>
>> >> >> >>>+1 to child_process or leave it slow.
>> >> >> >>>
>> >> >> >>>Sent from my iPhone
>> >> >> >>>
>> >> >> >>>On Jul 25, 2013, at 10:28 AM, Filip Maj <[email protected]> wrote:
>> >> >> >>>
>> >> >> >>>> Yeah that¹s how a lot of the "hey this works native on
>>windows"
>> >> >> >>>>modules
>> >> >> >>>>on
>> >> >> >>>> npm works: they have to compile it D:
>> >> >> >>>>
>> >> >> >>>> On 7/25/13 10:26 AM, "Andrew Grieve" <[email protected]>
>> >>wrote:
>> >> >> >>>>
>> >> >> >>>>> just tried it, and it "does", but only if you have both
>>python
>> >>and
>> >> >> >>>>>visual
>> >> >> >>>>> studio installed on your machine. Guess it builds the .dll
>>at
>> >>npm
>> >> >> >>>>>install
>> >> >> >>>>> time :(
>> >> >> >>>>>
>> >> >> >>>>>
>> >> >> >>>>> On Thu, Jul 25, 2013 at 1:23 PM, Anis KADRI
>> >><[email protected]
>> >> >
>> >> >> >>>>>wrote:
>> >> >> >>>>>
>> >> >> >>>>>> https://github.com/rbranson/node-ffi
>> >> >> >>>>>>
>> >> >> >>>>>> looks like it does
>> >> >> >>>>>>
>> >> >> >>>>>> On Thu, Jul 25, 2013 at 10:14 AM, Filip Maj <[email protected]>
>> >> >>wrote:
>> >> >> >>>>>>> Does it work with Windows?
>> >> >> >>>>>>>
>> >> >> >>>>>>> On 7/25/13 10:11 AM, "Andrew Grieve"
>><[email protected]>
>> >> >>wrote:
>> >> >> >>>>>>>
>> >> >> >>>>>>>> Looks like the fix is pretty easy:
>> >> >> >>>>>>>>
>> >> >> >>>>>>>> agrieve@agrieve-macbookpro ~/git/cordova/tmp$ time node
>> >>go3.js
>> >> >> >>>>>>>> went 0 times
>> >> >> >>>>>>>> went 10 times
>> >> >> >>>>>>>> went 20 times
>> >> >> >>>>>>>> went 30 times
>> >> >> >>>>>>>> went 40 times
>> >> >> >>>>>>>> went 50 times
>> >> >> >>>>>>>> went 60 times
>> >> >> >>>>>>>> went 70 times
>> >> >> >>>>>>>> went 80 times
>> >> >> >>>>>>>> went 90 times
>> >> >> >>>>>>>> went 100 times
>> >> >> >>>>>>>>
>> >> >> >>>>>>>> real 0m0.444s
>> >> >> >>>>>>>> user 0m0.266s
>> >> >> >>>>>>>> sys 0m0.158s
>> >> >> >>>>>>>>
>> >> >> >>>>>>>>
>> >> >> >>>>>>>> All I did was replace "shelljs" with "shelljs-ffi".
>> >> >> >>>>>>>>
>> >> >> >>>>>>>>
>> >> >> >>>>>>>> On Thu, Jul 25, 2013 at 12:53 PM, Filip Maj
>><[email protected]>
>> >> >> wrote:
>> >> >> >>>>>>>>
>> >> >> >>>>>>>>> Cool, nice work.
>> >> >> >>>>>>>>>
>> >> >> >>>>>>>>> We could either try to contribute to shelljs or rip it
>>out
>> >> >>and go
>> >> >> >>>>>> all
>> >> >> >>>>>>>>> child process all the time
>> >> >> >>>>>>>>>
>> >> >> >>>>>>>>> In any case I think this bench should be submitted to
>> >>shelljs
>> >> >> >>>>>>>>>repo.
>> >> >> >>>>>>>>> @r2r,
>> >> >> >>>>>>>>> dude who maintains it, would probably like to know
>> >> >> >>>>>>>>>
>> >> >> >>>>>>>>> On 7/25/13 9:50 AM, "Andrew Grieve"
>><[email protected]>
>> >> >> wrote:
>> >> >> >>>>>>>>>
>> >> >> >>>>>>>>>> One reason: shelljs.exec()
>> >> >> >>>>>>>>>>
>> >> >> >>>>>>>>>> Did a test to see how many times I could execute
>>"true". 9
>> >> >> >>>>>>>>>>seconds
>> >> >> >>>>>> vs
>> >> >> >>>>>>>>> .5
>> >> >> >>>>>>>>>> seconds!
>> >> >> >>>>>>>>>>
>> >> >> >>>>>>>>>>
>> >> >> >>>>>>>>>> agrieve@agrieve-macbookpro ~/git/cordova/tmp$ time node
>> >> >> >>>>>> shelljstest.js
>> >> >> >>>>>>>>>> went 0 times
>> >> >> >>>>>>>>>> went 10 times
>> >> >> >>>>>>>>>> went 20 times
>> >> >> >>>>>>>>>> went 30 times
>> >> >> >>>>>>>>>> went 40 times
>> >> >> >>>>>>>>>> went 50 times
>> >> >> >>>>>>>>>> went 60 times
>> >> >> >>>>>>>>>> went 70 times
>> >> >> >>>>>>>>>> went 80 times
>> >> >> >>>>>>>>>> went 90 times
>> >> >> >>>>>>>>>> went 100 times
>> >> >> >>>>>>>>>>
>> >> >> >>>>>>>>>> real 0m8.873s
>> >> >> >>>>>>>>>> user 0m10.941s
>> >> >> >>>>>>>>>> sys 0m6.005s
>> >> >> >>>>>>>>>> agrieve@agrieve-macbookpro ~/git/cordova/tmp$ time node
>> >> >> >>>>>>>>>> child_processtest.js
>> >> >> >>>>>>>>>> went 10 times
>> >> >> >>>>>>>>>> went 20 times
>> >> >> >>>>>>>>>> went 30 times
>> >> >> >>>>>>>>>> went 40 times
>> >> >> >>>>>>>>>> went 50 times
>> >> >> >>>>>>>>>> went 60 times
>> >> >> >>>>>>>>>> went 70 times
>> >> >> >>>>>>>>>> went 80 times
>> >> >> >>>>>>>>>> went 90 times
>> >> >> >>>>>>>>>> went 100 times
>> >> >> >>>>>>>>>>
>> >> >> >>>>>>>>>> real 0m0.470s
>> >> >> >>>>>>>>>> user 0m0.278s
>> >> >> >>>>>>>>>> sys 0m0.228s
>> >> >> >>>>>>>>>>
>> >> >> >>>>>>>>>>
>> >> >> >>>>>>>>>> Here's the code:
>> >> >> >>>>>>>>>> shelljstest.js
>> >> >> >>>>>>>>>>
>> >> >> >>>>>>>>>> var shjs = require('shelljs');
>> >> >> >>>>>>>>>>> for (var i = 0; ; ++i) {
>> >> >> >>>>>>>>>>> shjs.exec('true');
>> >> >> >>>>>>>>>>> if ((i / 10 | 0) == i / 10) {
>> >> >> >>>>>>>>>>> console.log('went ' + i + ' times');
>> >> >> >>>>>>>>>>> }
>> >> >> >>>>>>>>>>> if (i == 100) {
>> >> >> >>>>>>>>>>> process.exit(0);
>> >> >> >>>>>>>>>>> }
>> >> >> >>>>>>>>>>> }
>> >> >> >>>>>>>>>>
>> >> >> >>>>>>>>>>
>> >> >> >>>>>>>>>> child_processtest.js
>> >> >> >>>>>>>>>>
>> >> >> >>>>>>>>>> var child = require('child_process');
>> >> >> >>>>>>>>>>> var i = 0;
>> >> >> >>>>>>>>>>> function go() {
>> >> >> >>>>>>>>>>> child.exec('true', function() {
>> >> >> >>>>>>>>>>> ++i;
>> >> >> >>>>>>>>>>> if ((i / 10 | 0) == i / 10) {
>> >> >> >>>>>>>>>>> console.log('went ' + i + ' times');
>> >> >> >>>>>>>>>>> }
>> >> >> >>>>>>>>>>> if (i == 100) {
>> >> >> >>>>>>>>>>> process.exit(0);
>> >> >> >>>>>>>>>>> }
>> >> >> >>>>>>>>>>> go();
>> >> >> >>>>>>>>>>> });
>> >> >> >>>>>>>>>>> }
>> >> >> >>>>>>>>>>> go();
>> >> >> >>>>
>> >> >> >>
>> >> >>
>> >> >>
>> >>
>> >>
>>
>>