cordova-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrew Grieve <agri...@chromium.org>
Subject Re: [cordova-js] What is the purpose of <runs /> ?
Date Wed, 09 Apr 2014 00:54:30 GMT
It changes semantics (code that didn't use to run at start-up, now does).
That's not backwards compatible.

We had a huge perf gain in CLI by not requiring sub-modules on start-up. I
don't think it'd be quite as bad for plugins... but...

One example in the org.chromium.runtime plugin is that it includes a crypto
library as a module that isn't parsed until someone accesses the
chrome.runtime.id getter. Parsing this at start-up would be noticeable.



On Tue, Apr 8, 2014 at 1:19 PM, Anis KADRI <anis.kadri@gmail.com> wrote:

> It is not a breaking change therefore it is backward compatible [1]. If
> there is a good reason to keep the current "feature" then I'd like to know
> it.
>
> [1] http://en.wikipedia.org/wiki/Backward_compatibility
>
>
> On Tue, Apr 8, 2014 at 10:51 AM, Andrew Grieve <agrieve@chromium.org>
> wrote:
>
> > If there's an option to not change the behaviour, I think we should use
> it.
> > This is a pretty big change, so anything we can keep the same will help.
> We
> > can't say that it's backwards compatible if the runtime behaviour
> changes.
> >
> >
> > On Mon, Apr 7, 2014 at 6:39 AM, Braden Shepherdson <braden@chromium.org
> > >wrote:
> >
> > > Strictly speaking it may be that a plugin could actually want to not be
> > run
> > > until it was require()d. In practice, I suspect most plugins either
> want
> > to
> > > clobber, merge or run, all of which will require it. So I think we're
> > okay
> > > with this change. That seems like an odd practice by browserify, but I
> > > suppose it should be mostly harmless.
> > >
> > > Braden
> > >
> > > On Sat, Apr 5, 2014 at 1:09 AM, Michal Mocny <mmocny@chromium.org>
> > wrote:
> > >
> > > > So I did try your node.js sample code, and you're right, it runs all
> > > > modules by default.  This surprises me, but I guess having all
> modules
> > > have
> > > > an implicit <runs/> is better than dropping support for it.
> > > >
> > > > The thing to keep an eye out for is degraded startup performance with
> > > this
> > > > change.
> > > >
> > > > -Michal
> > > >
> > > >
> > > > On Fri, Apr 4, 2014 at 11:04 PM, Anis KADRI <anis.kadri@gmail.com>
> > > wrote:
> > > >
> > > > > The reason why JS-only platforms (firefoxos, tizen, windows8, ...)
> > use
> > > > > <runs/> is because they need to populate their commandProxyMap
in
> > order
> > > > for
> > > > > exec to direct calls to the appropriate module. All js-only modules
> > > call
> > > > > something like this:
> > > > >
> > > > > require("cordova/firefoxos/commandProxy").add("Vibration",
> > > > module.exports);
> > > > > Obviously this has to run before the module can be used.
> > > > >
> > > > > browserify runs all modules by default (yes, even if they're not
> > > > required)
> > > > > when the bundle first loads. Which means a module can set itself
> up,
> > > > > clobber, merge whateva...or just define itself and set its
> > > module.exports
> > > > > map for it to be consumed by other modules.
> > > > > Check out my response in the long thread if you want to experiment.
> > > > >
> > > > > _There is a way_ to call only a subset of modules or just one
> module
> > > > (like
> > > > > a main.js) but the real point is:
> > > > >
> > > > > Do we have a reason to prevent a module from running (defining
> itself
> > > > > really) until require()d ? That's the example I am requesting and
> the
> > > > > question I am asking.
> > > > >
> > > > >
> > > > > On Fri, Apr 4, 2014 at 7:05 PM, Michal Mocny <mmocny@chromium.org>
> > > > wrote:
> > > > >
> > > > > > > gfind -name plugin.xml -exec grep -Hn "runs" {} \;
> > > > > > ./cordova-plugin-battery-status/plugin.xml:90:            <runs/>
> > > > > > ./cordova-plugin-camera/plugin.xml:37:          <runs />
> > > > > > ./cordova-plugin-contacts/plugin.xml:159:            <runs
/>
> > > > > > ./cordova-plugin-device/plugin.xml:29:            <runs />
> > > > > > ./cordova-plugin-device-motion/plugin.xml:34:          <runs
/>
> > > > > > ./cordova-plugin-device-motion/plugin.xml:133:            <runs/>
> > > > > > ./cordova-plugin-device-orientation/plugin.xml:36:         
<runs
> > />
> > > > > > ./cordova-plugin-device-orientation/plugin.xml:145:
> > >  <runs/>
> > > > > > ./cordova-plugin-dialogs/plugin.xml:34:          <runs />
> > > > > > ./cordova-plugin-geolocation/plugin.xml:147:            <runs
/>
> > > > > > ./cordova-plugin-globalization/plugin.xml:91:            <runs/>
> > > > > > ./cordova-plugin-media/plugin.xml:138:            <runs/>
> > > > > > ./cordova-plugin-network-information/plugin.xml:32:
> >  <runs
> > > />
> > > > > > ./cordova-plugin-network-information/plugin.xml:143:
> >  <runs
> > > > />
> > > > > > ./cordova-plugin-splashscreen/plugin.xml:103:            <runs
/>
> > > > > > ./cordova-plugin-vibration/plugin.xml:27:            <runs
/>
> > > > > > ./cordova-plugin-vibration/plugin.xml:115:            <runs
/>
> > > > > > ./cordova-plugins/websql/plugin.xml:12:            <runs
/>
> > > > > >
> > > > > >
> > > > > > Most of these are for firefoxos or tizen (Haven't investigated),
> > but
> > > > one
> > > > > is
> > > > > > not:
> > > > > > [android]: ./cordova-plugins/websql
> > > > > > -- Why is it needed? Because it only clobbers WebSql when run
> from
> > > > > file://
> > > > > > protocol
> > > > > >
> > > > > >
> > > > > > Anyway, more generally, its useful for when you need to do some
> > setup
> > > > > > before pluginready / DOMContentLoaded, which is especially useful
> > > when
> > > > > you
> > > > > > are dealing with code that isn't cordova.require() aware.
> > > > > >
> > > > > >
> > > > > > For Chrome Apps, we used to use <runs/> a lot, but miraculously
I
> > see
> > > > now
> > > > > > that we have replaced all usage with <clobbers/> and <merges/>
> > (which
> > > > is
> > > > > > like runs + extra).  I proposed we could replace clobbers/merges
> > > with a
> > > > > > single runs in another thread.
> > > > > >
> > > > > > -Michal
> > > > > >
> > > > > >
> > > > > > On Fri, Apr 4, 2014 at 8:47 PM, Anis KADRI <anis@apache.org>
> > wrote:
> > > > > >
> > > > > > > If we need it. Could anybody point me to an example of
how/why
> > that
> > > > is
> > > > > > > needed ?
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
>

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