I’m writing my first HTML5 + jquery.mobile web app.
The app is basically a menu which redirects to internal pages (data-role=”page”) defined in the same index.html. I do not write pages as external files to avoid reloading and rewriting the – substantially – same <head>: I suppose it’s faster to jump to an internal tag than loading a new page…
Now, I have a page which needs some specific jquery plugins and some specific css. No other page needs these plugins or css.
Of course I could load these js/css in the main <head> section, but this approach would slow the first page loading, uselessly.
I could solve the problem with CSS, with:
$('head:first').append('<link rel="stylesheet" type="text/css" href="' + file + '" />');
I could even solve the problem with JS, but only for ‘standard’ JavaScript, with something like:
<script>
$(document).ready(function() {
$('#page-availability').live('pageinit', function () {
$.getScript("js/jqm-datebox.core.js");
$.getScript("js/jqm-datebox.mode.calbox.js");
$.getScript("js/jquery.mobile.datebox.i18n.en.utf8.js");
$('#datepicker').data({
"mode": "calbox",
...
});
...
});
...
});
Unfortunately this approach seems not to work (firebug croaks: “TypeError: a.mobile.datebox is undefined”…) with jquery plugins: it looks like they are not evaluated… (even if they are there, before the end of the <head> section, viewing at the “Generated Source”…).
I’m using Firefox (15) to debug, but I suppose this isn’t the point…
Any hint?
The one page approach can be good for mobile if:
Done well, the user gets OK performance on loading the first page and very quick performance when going to the other “embedded” pages that don’t have to load new content over the network.
The one page approach is not so good if:
So, in the end, it’s a real tradeoff and depends very much on how big things are, how many things you’re loading and what the actual performance comes out to be. A compact mobile site can serve server-loaded page views from one page to the next pretty quickly if the pages are kept very lightweight and there are very few requests that must be satisfied for each page.
In general, you want to pursue these types of optimizations:
Other things to be aware of: