You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@couchdb.apache.org by "Ben Keen (JIRA)" <ji...@apache.org> on 2014/12/05 22:46:12 UTC
[jira] [Commented] (COUCHDB-2489) Remove libs from main require.js
bundle
[ 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)