Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Safari将URL#片段合并到浏览器缓存中_Javascript_Ajax_Caching_Safari_Fragment - Fatal编程技术网

Javascript Safari将URL#片段合并到浏览器缓存中

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,然后加载应用程序的下一页:

$.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代码


如果社区有任何想法,我将不胜感激。谢谢

我只看到几个选项:

  • 向苹果提交一份bug报告,不用担心。:-)您的缓存内容仍适用于其他浏览器。总的来说,Safari有一个独特的功能,当然,如果你的网站是针对(比如)iPad或iPhone用户的,这会改变你特定网站的统计数据的性质。:-)(您可能从日志中知道您的Safari受众有多大。)

    子类别:如果Safari是你目标市场的一个重要部分,而这确实让你感到困扰,那么看看它是否是其中任何一个开源部分的一个bug,如果是的话,提供一个补丁

  • 不要使用片段标识符来传递信息,而是使用其他东西(可能是cookie)


  • 我可以说:哇,你真的深入研究了这件事。不错。
    * 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');