cordova-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jason Ginchereau <jason...@microsoft.com>
Subject RE: [DISCUSS] Faster incremental builds
Date Thu, 21 Apr 2016 21:12:39 GMT
If "cordova clean" would also take care of deleting the files copied by prepare, then I'd be
confident in making prepare incremental by default. Then if anyone was ever concerned about
whether the incremental prepare was doing the right thing, "cordova clean" would be a fairly
obvious way to reset the build. I still can't think of a realistic developer scenario where
that would be necessary, but it seems like the right thing for a "clean" command to do regardless.

So I will work on enhancing the "clean" function for each platform at the same time I enable
the incremental prepare.

Jason

-----Original Message-----
From: Jason Ginchereau [mailto:jasongin@microsoft.com] 
Sent: Wednesday, April 20, 2016 10:00 AM
To: dev@cordova.apache.org
Subject: RE: [DISCUSS] Faster incremental builds

My concern with making this the default behavior is that Cordova prepare doesn't have a corresponding
"clean" operation. While there is a "cordova clean" command, it only does a clean for the
native-code project (e.g. gradle clean), which doesn't affect the files copied during prepare.
I guess this would only be a problem if you did something to give your source files older
last-modified times... then a cordova prepare/build/run that was incremental would not pick
up the older files, and "cordova clean" wouldn't fix it. I was thinking a git checkout could
do that, but upon investigation it actually doesn't reset files' last-modified times. (I guess
any source control tools shouldn't, as it would mess up any kind of incremental build system.)

Maybe "cordova clean" should also delete the files that are copied by prepare? Or maybe there
could be something like a "cordova prepare --force" flag for the rare case when a non-incremental
prepare is needed? Between those two I'd prefer making "cordova clean" more thorough; I didn't
think of that until now.

Jason

-----Original Message-----
From: Steven Gill [mailto:stevengill97@gmail.com]
Sent: Wednesday, April 20, 2016 9:18 AM
To: dev@cordova.apache.org
Subject: Re: [DISCUSS] Faster incremental builds

Thanks for sharing the stats! Looks like a great improvement!

I'm fine with this going in sans flag if we test it  bit more first.

Have your tried it with the --browserify flag?
On Apr 20, 2016 7:18 AM, "Victor Sosa" <sosah.victor@gmail.com> wrote:

> This is an amazing improvement in Cordova performance. Thanks Jason
> +1!!
>
> On Wed, Apr 20, 2016 at 9:14 AM Shazron <shazron@gmail.com> wrote:
>
> > +1 what Jesse said
> >
> > On Tuesday, April 19, 2016, Jesse <purplecabbage@gmail.com> wrote:
> >
> > > This sounds great!
> > > Personally, I don't think this belongs behind a flag, why would 
> > > anyone
> > not
> > > want to build faster?
> > > I think we just need to test more to make sure it functions as 
> > > expected everywhere, and then it should just make it's way in 
> > > directly, without
> > the
> > > overhead of addition flag code, or documentation ...
> > >
> > >
> > > @purplecabbage
> > > risingj.com
> > >
> > > On Tue, Apr 19, 2016 at 5:58 PM, Jason Ginchereau <
> > jasongin@microsoft.com
> > > <javascript:;>>
> > > wrote:
> > >
> > > > I collected data for 4 projects with varying numbers and sizes 
> > > > of
> > source
> > > > files (mostly .js and .png):
> > > >     Tiny  :     17 files, 0.24 MB (A new Cordova project created from
> > the
> > > > VS template)
> > > >     Small :     55 files,  7.7 MB
> > > >     Medium:    242 files,   44 MB
> > > >     Large : 12,923 files,  134 MB
> > > >
> > > > Following are full -> incremental times for 'cordova prepare android'
> > > > commands, without any source file changes in between, averaged 
> > > > over 5
> > > warm
> > > > runs on my medium-spec Windows desktop machine with SSD:
> > > >
> > > >     Tiny  :  1.98 -> 1.84 s
> > > >     Small :  2.40 -> 1.94 s
> > > >     Medium:  4.22 -> 2.02 s
> > > >     Large : 50.24 -> 5.81 s
> > > >
> > > > As you can see, larger projects see greatly improved prepare 
> > > > times
> when
> > > > using the incremental option.
> > > >
> > > > Also, I confirmed that without using the --incremental option 
> > > > with
> this
> > > > change, times are not measurably different compared to the 
> > > > released
> > > version
> > > > 6.1.1 of Cordova. So there doesn't seem to be any regression 
> > > > compared
> > to
> > > > the previous use of shelljs.cp('-R') to blindly copy files when
> > > preparing.
> > > >
> > > > Jason
> > > >
> > > > -----Original Message-----
> > > > From: Steven Gill [mailto:stevengill97@gmail.com <javascript:;>]
> > > > Sent: Tuesday, April 19, 2016 3:14 PM
> > > > To: dev@cordova.apache.org <javascript:;>
> > > > Subject: Re: [DISCUSS] Faster incremental builds
> > > >
> > > > Sounds like a worthy cause. Do you have any stats on how much 
> > > > time is saved?
> > > >
> > > > Definitely put it behind the --incremental flag to start.
> > > >
> > > > On Tue, Apr 19, 2016 at 2:43 PM, Jason Ginchereau <
> > > jasongin@microsoft.com <javascript:;>>
> > > > wrote:
> > > >
> > > > > We've had a few customers complain that the dev inner loop for
> > Cordova
> > > > > apps is slow compared to native app development. So recently 
> > > > > I've
> > been
> > > > > looking at ways to optimize it. The two largest pieces of a 
> > > > > Cordova build are "prepare" and "compile" phases. While 
> > > > > there's not much we can realistically do to speed up the 
> > > > > native-code compilation (in
> > which
> > > > > gradle/xcodebuild/etc is invoked), it's clear that the prepare
> phase
> > > > > is not nearly as efficient as it could be. So I opened a JIRA 
> > > > > for that, and I have a solution in the works that I want to 
> > > > > get
> feedback
> > > on.
> > > > >
> > > > > CB-11117: Preparing platforms should skip copying files which
> haven't
> > > > > changed<
> > https://na01.safelinks.protection.outlook.com/?url=https%3a%2f
> > > > > %2fissues.apache.org
> > %2fjira%2fbrowse%2fCB-11117&data=01%7c01%7cjasongi
> > > > > n%40microsoft.com
> > %7c297f714a60a94c3f258108d3689ff306%7c72f988bf86f141a
> > > > >
> > f91ab2d7cd011db47%7c1&sdata=E2Ww9LusEmVkUgjXPPGnxcGz%2fMH8fWruqGWUrL
> > Xq
> > > > > KRk%3d> Many cordova CLI commands include a "prepare" 
> > > > > operation, including 'cordova build', 'cordova run', 'cordova 
> > > > > plugin add', and more. Every time each of those commands runs, 
> > > > > the target platform
> is
> > > > > "prepared", which involves copying all files from 
> > > > > [<project>/www, <project>/platforms/<platform>/platform_www,
> > > > > <project>/merges/<platform>] to the platform's target
www 
> > > > > folder,
> as
> > > > > well as copying a bunch of icons and splash screens to
> > > platform-specific
> > > > locations.
> > > > >
> > > > > For the very first prepare of a platform, all that file 
> > > > > copying is necessary. But most of the time after that most of 
> > > > > the files being copied have not changed and therefore don't 
> > > > > really need to be
> copied
> > > > > again. So the typical developer inner loop (edit a few source
> files,
> > > > > build and run the app, repeat) is a lot slower than it could 
> > > > > be
> for a
> > > > > Cordova project, especially one that includes a significant 
> > > > > number
> of
> > > > > source files or resources.
> > > > >
> > > > > Instead, Cordova should be smart enough to skip copying of 
> > > > > files
> that
> > > > > haven't changed, based on their last-modified timestamp. But 
> > > > > there should still be a way to force a 
> > > > > clean/full/non-incremental copy if desired. To preserve 
> > > > > compatibility with all possible existing workflows, I'm 
> > > > > leaning toward keeping the full copy as the default behavior, 
> > > > > and enabling the optimization only with a new
> --incremental
> > > > > flag, at least initially. If we find the incremental option is
> > working
> > > > > well for everyone, we can promote that behavior to default in 
> > > > > a
> > future
> > > > major version update.
> > > > >
> > > > > See PRs here for implementation of this idea...
> > > > > https://github.com/apache/cordova-lib/pull/429: Add 
> > > > > FileUpdater
> > module
> > > > > to cordova-common
> > > > > https://github.com/apache/cordova-android/pull/295: Use
> FileUpdater
> > to
> > > > > optimize prepare for android platform I'll submit PRs for
> cordova-ios
> > > > > and cordova-windows platforms soon, as well as a cordova-cli 
> > > > > change
> > to
> > > > > enable the optimization via a new --incremental flag (assuming 
> > > > > we don't want to make it the default behavior).
> > > > >
> > > > > Jason
> > > > >
> > > > >
> > > >
> > >
> >
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@cordova.apache.org
For additional commands, e-mail: dev-help@cordova.apache.org
Mime
View raw message