Just did a few quick tests: while shelljs exec may be slow, seems we are not using it in a nested way (which seems quite obvious).
I wrote a quick benchmark to: cordova plugin ls cordova platform ls cordova prepare in a loop a bunch of times and see almost zero time difference replacing shelljs with shelljs-ffi. I would imagine that means very little benefit to replacing with child_process as well, at least for a perf standpoint. It may still be worth doing for other benefits, but in the interest of trying to make cordova-cli faster, I'm going to benchmark for other bottlenecks. -Michal 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(); > >> >>>> > >> >> > >> > >> > >
