我想实现javascript文件(Dojo工具包)的缓存,这些文件不会改变。目前,我的主页需要15-17秒的加载时间,刷新后需要5-6秒的加载时间。但是,当我们在新的浏览器会话中加载缓存的文件时,有没有办法再次使用它。我不希望浏览器在新的浏览器会话中加载应用程序主页时向服务器发出请求?还有一个选项可以将过期时间设置为一定的天数。我试着使用META标签,但没有多大帮助..要么是我做错了什么,要么是我没有正确地实现它。
我已经实现了dojo压缩工具包,看到性能略有提高,但并不显着。
发布于 2014-05-28 19:14:58
通常你的浏览器应该已经做到了这一点。请检查缓存是否真的打开了,而不仅仅是会话。
然而,使用您的应用程序配置文件创建自定义dojo构建,使用dojo定义层构建将您的所有代码放在一起,并将其与dojo.js捆绑在一起(这些文件仍然可以独立使用)。结果是对所有代码只有一个http请求(更大的文件,但只有一次)。由于减少的http请求而获得的速度远远超过高速缓存所能提供的速度。
有关详细信息,请参阅教程:http://dojotoolkit.org/documentation/tutorials/1.8/build/
发布于 2014-06-02 15:47:52
缓存是由浏览器进行的,浏览器的行为受缓存控制HTTP头(参见http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html)的影响。通常,浏览器会询问是否有较新版本的资源可用,因此您会收到每个资源的一个简短请求。
根据我的经验,即使使用非常激进的缓存,当浏览器被指示在给定的时间段内不请求服务器上的资源版本时,在浏览器缓存中检查如此大量的资源也是一个代价高昂的过程。
真正解决方案是自定义构建。您已经编写了一些关于"dojo压缩“的内容,我假设您对Dojo build profiles很熟悉。这是非常讨厌的文档,但是一旦你成功地使用它,你应该有一些包含层的大文件,格式如下:
require({cache:{
"name/of/dojo/resource": function() { ... here comes the content of JS file ... }
, ...
}});它是一个多定义文件,内联了单层中模块的所有定义。因此,加载这样的文件将加载单请求中的许多模块。但是你必须加载层。
为了让层运行,我不得不向我的每个入口JS文件(那些在HTML文件的头中引用的文件)添加额外的要求:
require(["dojo/domReady!"], function(){
// load the layers
require(['dojo/dojo-qm',/*'qmrzsv/qm'*/], function(){
// here is your normal dojo code, all modules will be loaded from the memory cache
require(["dojo", "dojo/on", "dojo/dom-attr", "dojo/dom-class"...],
function(dojo,on,domAttr,domClass...){
....
})
})
})它显著提高了性能。瓶颈是加载大量的小javascript模块,而不是解析它们。一次加载和解析所有模块比按需加载数百个模块要便宜得多。
https://stackoverflow.com/questions/23893932
复制相似问题