On Tuesday, October 27, 2015 at 10:56:12 AM UTC-7, James Burke wrote:
> For apps that use a different HTML document for each view, it means a
> few built files that contain some duplicate code, at least for the
> common core of functionality (the stuff that is not view-specific but
> which all views need). I expect to see an increase in app file size on
> disk/in packaged format. Although perhaps that is already a known
> thing for the separate view HTML files if they are already getting
> gaia_build_*.js files. This new approach might reduce sizes from those
> levels.

We can be even smarter than that!

We could allow for some naming convention shared between files. I can imagine 
sth like:

<script role="shared-db" data-lazy-src="./foo1"></script>
<script role="shared-db" data-lazy-src="./foo2"></script>
 

And then in all HTML files it links to a single ./js-opt/shared-db.js.

> It also seems to imply an extra layer of implicit dependency
> knowledge: not only should you order the scripts based on what you
> know of their dependencies, but also to make sure use the correct
> attribute for load section. This is hopefully easy to spot though: the
> common stuff probably all fits in a similar "role" name.

That's true. But I believe that as we aim for good performance characteristic 
with our apps we do want our developers to make conscious decisions on when to 
load what JS to meet the performance budget.

If you already have to think where to put performance.marks, it should actually 
help you to cluster JS code to meet those bootstrap stages.

> Not sure how this works running in a debug/non-built state, if the
> roles are used as loading keys, but those roles have not been
> aggregated. Maybe they are just ignored in that case if it can detect
> a non-built state.

In debug/non-opt stage I believe it'll work the same way as it does right now - 
it'll just ignore the roles and load each script separately.

> Anyway, just some things to consider during the experimentation.

Thanks for that!

> For the apps that are using a module system/alameda/r.js: you can get
> a similar effect by using a dynamic `require(['module_id'])` inside
> app bootstrap stages to dynamically load layers of code. Email does
> this to delay loading the model layer/worker until the view has been
> worked out.

I think that for alameda module loader this doesn't change much at all. I can 
imagine that such code might be interested in bundling and then loading 
'./js-opt/foo.js', but that will break for non-optimized code, so I'd prefer 
not to touch that.

> Using a module system like the one used in some of the gaia apps today
> will also translate well to the future when the ES module system is
> fully functional. That one will also be an async-based loader.

In that future I imagine we will want to bundle groups of files together or we 
may learn that with http2 and faster I/O on our zip reader we really don't need 
to bundle files at all anymore :)

zb.
_______________________________________________
dev-fxos mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-fxos

Reply via email to