在HTML5 localstorage中缓存整个jquery.min.js文件

时间:2011-06-30 14:18:57

标签: javascript jquery html5 local-storage

我一直在尝试使用localstorage来存储Jquery-min,但我无法做到。我已经尝试了一些Jquery插件,但它们也不起作用。

为我的Web应用程序加载Jquery一次似乎是个好主意,再也不用担心了。我正在创建的应用程序有每天访问的人。我不认为他们需要多次下载JS文件或CSS文件。

我能够将所有CSS存储在localstorage中,但不能存储Jquery或Jquery UI。

无论如何,我知道人们会试着让我使用缓存清单......等等。但我正在寻找一种方法将Jquery库存储在localstorage中。 (这是目标)。

有什么想法吗?

修改 每个人都在问一个代码示例。所以这里......它非常直接,我只使用少量的Jquery缩小版本以保持帖子小:

localStorage.setItem("name", "(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!cj[a]){var b=f('<'+a+'>').appendTo('body'),d=b.css('display');b.remove();if(d==='none'||d===''){ck||(ck=c.createElement('iframe'),ck.frameBorder=ck.width=ck.height=0),c.body.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write('<!doctype><html><body></body>"); 

查看时保存的内容:

(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!cj[a]){var b=f('<'+a+'>').appendTo('body'),d=b.css('display');b.remove();if(d==='none'||d===''){ck||(ck=c.createElement('iframe'),ck.frameBorder=ck.width=ck.height=0),c.body.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write(' 

它不能保存所有内容。我可以使用parsefloat()或其他东西吗?如果能起作用我该怎么做?

我喜欢本地存储的原因是我可以轻松控制它。而且我不必担心用户清空缓存。如果我需要更新localstorage,我可以用一行代码来完成。它几乎充当我的Web应用程序的更新功能。如果我遗漏了某些内容或者有更简单的方法,请告诉我。示例代码即将推出

3 个答案:

答案 0 :(得分:3)

如果在将脚本文件保存到localstorage之前对其进行Base64编码,它可以正常工作。在下面的示例中,我省略了jQuery文件,但在演示中,整个jQuery 1.7已经编码。

我使用以下网站将整个文件编码为一个字符串(大多数将其分成块):http://textmechanic.co/ASCII-Hex-Unicode-Base64-Converter.html?type=text

演示:http://jsfiddle.net/ThinkingStiff/ZMAKn

HTML:

<div></div>

脚本:

var jquery = '<Base64 encoded file>';
var result = 'jQuery: ' + ( typeof $ != 'undefined' ) + '<br />';

window.localStorage.setItem( 'jquery', jquery );
jquery = '';
jquery = window.localStorage.getItem( 'jquery' );

eval( atob( jquery ) );

result += 'jQuery: ' + ( typeof $ != 'undefined' ) + '<br />';

$( 'div' ).html( result ); //this works, so jQuery loaded

window.localStorage.removeItem( 'jquery' );

输出:

jQuery: false
jQuery: true

答案 1 :(得分:3)

对于HTML5本地存储来说,这是一个很棒的练习,但是你的网络服务器不应该只响应HTTP 304(未修改)?自1998年以来几乎所有的Web服务器都支持此功能。让你的服务器用简单的304响应要比编写大量的javascript来加载jQuery进出本地存储要快得多。

如果由于某种原因你无法让你的网络服务器工作,请使用public jQuery CDNs之一,他们会为你做这件事。

答案 2 :(得分:0)

我同意Cyan Lite。您需要为此使用浏览器缓存,而不是浪费时间对其进行编码。

如果您不想像Cyan建议的那样使用CDN,您可以在服务器上轻松启用缓存:https://developers.google.com/speed/docs/best-practices/caching#LeverageBrowserCaching