cordova-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Michal Mocny <mmo...@chromium.org>
Subject Re: Why CLI & Plugman are so slow
Date Wed, 07 Aug 2013 15:39:09 GMT
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 <fil@adobe.com> 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 <fil@adobe.com> wrote:
> >
> >> cheers
> >>
> >> On 7/25/13 10:54 AM, "Andrew Grieve" <agrieve@chromium.org> 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 <fil@adobe.com> 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" <anis.kadri@gmail.com> wrote:
> >> >>
> >> >> >xD. +1 for child_process because it comes with node too eh :)
> >> >> >
> >> >> >On Thu, Jul 25, 2013 at 10:36 AM, Filip Maj <fil@adobe.com>
wrote:
> >> >> >> Changed your named to Gmail now huh Jesse?
> >> >> >>
> >> >> >> On 7/25/13 10:32 AM, "Gmail" <purplecabbage@gmail.com>
wrote:
> >> >> >>
> >> >> >>>+1 to child_process or leave it slow.
> >> >> >>>
> >> >> >>>Sent from my iPhone
> >> >> >>>
> >> >> >>>On Jul 25, 2013, at 10:28 AM, Filip Maj <fil@adobe.com>
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" <agrieve@chromium.org>
> >>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
> >><anis.kadri@gmail.com
> >> >
> >> >> >>>>>wrote:
> >> >> >>>>>
> >> >> >>>>>> https://github.com/rbranson/node-ffi
> >> >> >>>>>>
> >> >> >>>>>> looks like it does
> >> >> >>>>>>
> >> >> >>>>>> On Thu, Jul 25, 2013 at 10:14 AM, Filip Maj
<fil@adobe.com>
> >> >>wrote:
> >> >> >>>>>>> Does it work with Windows?
> >> >> >>>>>>>
> >> >> >>>>>>> On 7/25/13 10:11 AM, "Andrew Grieve" <agrieve@chromium.org>
> >> >>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 <fil@adobe.com>
> >> >> 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"
<agrieve@chromium.org>
> >> >> 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();
> >> >> >>>>
> >> >> >>
> >> >>
> >> >>
> >>
> >>
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message