Javascript Safari将URL#片段合并到浏览器缓存中
我正在研究一个解决方案,以加快我们的网站。我让客户端先加载ajax,然后加载应用程序的下一页:Javascript Safari将URL#片段合并到浏览器缓存中,javascript,ajax,caching,safari,fragment,Javascript,Ajax,Caching,Safari,Fragment,我正在研究一个解决方案,以加快我们的网站。我让客户端先加载ajax,然后加载应用程序的下一页: $.ajax({url: '/some/real/path', ...}); 服务器对此作出响应,并在标头中包括: Cache-Control => 'max-age=20' 它将响应标记为可缓存 然后客户端应用程序等待查看其预测是否正确,一旦发现正确,则将浏览器切换到同一页面,但将一些信息作为#片段添加到URL中,只有当用户实际提交了他们的操作(即不可预测)时,这些信息才对我们可用: 当浏
$.ajax({url: '/some/real/path', ...});
服务器对此作出响应,并在标头中包括:
Cache-Control => 'max-age=20'
它将响应标记为可缓存
然后客户端应用程序等待查看其预测是否正确,一旦发现正确,则将浏览器切换到同一页面,但将一些信息作为#片段添加到URL中,只有当用户实际提交了他们的操作(即不可预测)时,这些信息才对我们可用:
当浏览器转换到页面时,片段中的附加信息由该页面的javascript获取,并在那里实现一些效果
对于所有浏览器(包括Safari),对启动ajax请求的响应都正确地插入到浏览器缓存中
然后,对于除Safari之外的所有浏览器,当我们将location.href转换到该页面时,浏览器会将该内容从缓存中取出。这避免了服务器被击中,是我们提高速度的基础
但是Safari没有使用缓存来重新提供内容。它似乎被过渡的“额外信息基础设施”部分绊倒了。它将片段包含在缓存键的构造中,该缓存键用于检查现有的缓存内容。以下是我通过sqlite转储的Safari的cache.db文件中的条目:
* ajax request: INSERT INTO "cfurl_cache_response" VALUES(3260,0,-1982644086,0,'http://localhost:8080/TomcatScratchPad/EmptyPage','2012-05-14 07:01:10');
* location.href transition: INSERT INTO "cfurl_cache_response" VALUES(3276,0,-230554366,0,'http://localhost:8080/TomcatScratchPad/EmptyPage#wtf','2012-05-14 07:01:20');
同样值得注意的是,Chrome运行正常,尽管两者共享大量WebKit代码
如果社区有任何想法,我将不胜感激。谢谢 我只看到几个选项:
我可以说:哇,你真的深入研究了这件事。不错。
* ajax request: INSERT INTO "cfurl_cache_response" VALUES(3260,0,-1982644086,0,'http://localhost:8080/TomcatScratchPad/EmptyPage','2012-05-14 07:01:10');
* location.href transition: INSERT INTO "cfurl_cache_response" VALUES(3276,0,-230554366,0,'http://localhost:8080/TomcatScratchPad/EmptyPage#wtf','2012-05-14 07:01:20');