From 7e1b4c85ed2c7a1da9289fa501aec087ec294590 Mon Sep 17 00:00:00 2001 From: YasuOza Date: Wed, 11 Jul 2012 12:01:34 +0900 Subject: [PATCH] lazyCaching --- pagify.js | 54 +++++++++++++++++++++++++++++------------------------- 1 file changed, 29 insertions(+), 25 deletions(-) diff --git a/pagify.js b/pagify.js index ada6b9c..b0c34a6 100644 --- a/pagify.js +++ b/pagify.js @@ -22,6 +22,9 @@ 'cache': false }; this.settings = $.extend({}, this.defaults, options); + if (self.settings.cache) { + self.pages = {}; + } // Run after loading if caching, otherwise run immediately var runAfterLoading = function() { @@ -32,23 +35,36 @@ } if(self.settings.cache) { - // Load page content from cache - $(self)[self.settings.animationOut](self.settings.animationOutSpeed, function() { - $(self).html(self.pages[page])[self.settings.animation](self.settings.animationSpeed); - }) - self.settings.onChange(page); - } - else { - // Fetch page content - $.get(page+'.html', function(content) { + if (self.pages[page] == undefined) { + // Fetch and cache content + fetchPageContentAndShow(page); + } + else { + // Load page content from cache $(self)[self.settings.animationOut](self.settings.animationOutSpeed, function() { - $(self).html(content)[self.settings.animation](self.settings.animationSpeed); + $(self).html(self.pages[page])[self.settings.animation](self.settings.animationSpeed); }) self.settings.onChange(page); - }, 'text'); + } + } + else { + // Fetch page content + fetchPageContentAndShow(page); } } + var fetchPageContentAndShow = function(page) { + $.get(page+'.html', function(content) { + $(self)[self.settings.animationOut](self.settings.animationOutSpeed, function() { + $(self).html(content)[self.settings.animation](self.settings.animationSpeed); + }) + self.settings.onChange(page); + if (self.settings.cache) { + self.pages[page] = content; + } + }, 'text'); + }; + // Respond to hash changes $(window).bind('hashchange', function() { self.switchPage(); @@ -59,20 +75,8 @@ else if(self.settings['default']) self.switchPage(self.settings['default']); }; - // Cache pages - if(self.settings.cache) { - self.pages = {}; - var pageLoads = self.settings.pages.length; - $.each(self.settings.pages, function(ndx, page) { - $.get(page+'.html', function(content) { - self.pages[page] = content; - pageLoads--; - //alert(pageLoads); - if(!pageLoads) runAfterLoading(); - }, 'text'); - }); - } - else runAfterLoading(); + // loadPage + runAfterLoading(); }; })(jQuery);