[
https://issues.apache.org/jira/browse/COUCHDB-2489?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14236166#comment-14236166
]
Ben Keen commented on COUCHDB-2489:
-----------------------------------
Okay, think I have an approach for this. It's not too bad!
First, we'd update the generated index.html page to output the following:
{code}
<script src="libs-HASH.js"></script>
<script>require("main-HASH.js", function() { });</script>
{code}
libs-HASH.js would contain the following, in order:
- requireJS
- the requireJS config file (/app/config), minus the "deps" property so it
doesn't auto-run our startup code
- the list of whatever libs we use: d3, jquery, lodash, backbone etc. Since
we're wrapping them all in AMD format, we need require to have already been
loaded, hence the order here.
I figure this file would be the same for dev + prod. We could either add a
watcher to auto-generate the file, or just generate it when starting Fauxton.
main-HASH.js would just be our existing app/main.js file - no changes. The key
difference is that in the Grunt process, we'd provide it with a list of
dependencies to omit. These would be the libs specified in the previous file:
d3, jquery etc. So the filesize will be significantly smaller, but all of those
dependencies will have been loaded.
For dev, the filename would just be "main.js"; for prod it would be
"main-HASH.js". This would be handled by Grunt, just like now.
That's all we need, I think.
Just to really emphasize the point to all this: by separating them into the two
files like above, we'll have the much-smaller code that always changes be in a
separate bundle, and the libs (larger, and which seldom change) in their own
file. That'll greatly reduce the amount of stuff a user has to repeatedly
download.
______________
N.B. once this is complete, it would be nice to update the server to send
1-year cache headers on all CSS/JS files that end in '-' + 32 char hash +
'.js'|'.css']. The hash ensures uniqueness of the contents, so we can safely
increase the cache expiry times to prevent needless downloads/checks.
> Remove libs from main require.js bundle
> ----------------------------------------
>
> Key: COUCHDB-2489
> URL: https://issues.apache.org/jira/browse/COUCHDB-2489
> Project: CouchDB
> Issue Type: Improvement
> Security Level: public(Regular issues)
> Components: Fauxton
> Reporter: Ben Keen
> Assignee: Ben Keen
>
> This'll take a little investigation. Right now the prod bundling process
> sticks everything - libs + code - into a single require.js file. Libs seldom
> change; code changes all the time. Split them so that browsers would cache
> the unchanging libs file and not force a re-download each time. The key libs
> are:
> - require
> - d3
> - jquery
> - backbone
> - bootstrap
> - lodash
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)