遵循Steve (YSlow) Souder的传教,my site (LibraryThing.com)跨域拆分请求,以促进并行加载。我们做CSS,JS和图片;你也可以做Flash,等等。我们也使用Google版本的Prototype,它是跨域的,而不仅仅是跨子域的。
这一切对于速度来说都很棒,但对于一小部分用户来说,这是错误的。我认为问题在于过于热心的安全设置,可能是在IE中,但也可能在其他浏览器和/或上游系统中。我很惊讶Souders和其他人没有讨论这个问题,因为我们得到了很多。
问题是:处理这个问题的最好方法是什么?
现在,当它到达页面底部时,我们正在检查是否设置了某个在本应加载的脚本中声明的JS变量。如果没有设置,它会从主域获取cookie,并设置一个cookie,这样下次就不会从子域加载cookie。但是我们只是在底部重新加载JS,所以如果CSS也失败了,那么你看到的就是垃圾。
有没有更好的或者更通用的解决方案?我在想,可能有一个通用的"onload“或"onerror”脚本来设置cookie并加载内容?
发布于 2009-05-05 01:38:09
如果此行为至少始终影响JS文件,一种选择是保留一个cookie,以指示用户的浏览器是否已针对此行为进行过测试。如果它们还没有经过测试,则插入一个对跨域脚本的引用(作为标记中的第一个script元素),该脚本只是将此cookie设置为“成功”。然后立即让一些内联JS检查这个cookie,如果没有设置,则设置为"failed“并重新加载页面。
然后在服务器端,只需检查相同的cookie,并确保跨站点请求不会发送给任何具有“失败”结果的人。
这种方法应该确保使用支持跨站点请求的浏览器的用户不会看到任何奇怪的行为,但应该立即修复其他用户的问题,代价是他们第一次访问时会自动刷新。
发布于 2009-04-30 09:45:23
您是否有表示此行为的特定用户代理列表?也许Apache conf可以解决这个问题?(或创建一个新问题供您解决:-) )。
注意cookie的狂热--你添加的cookie越多(而且,在主域上),你的客户将不得不在他们的请求中发送更多cookie。
Souders也谈到了这一点,但检查你的客户端浏览器发送/接收请求的比率总是很好的。
发布于 2009-04-30 10:14:24
我要对你的问题胡乱猜测一下。
缓存。您是否在脚本文件中进行了这些更改,这些问题用户可能具有较旧的版本。IE6在过度热衷缓存的情况下非常糟糕。
我注意到您的脚本在url中没有build #,XYZ.js?version=3将强制浏览器不使用XYZ.ks?version=2等旧的缓存脚本。(也适用于图像/Css)
你还可以将内联javascript与HTML混合在一起,这也会被缓存。
3个域名可能是过度杀伤力,除非你的网站上有大量的内容(巨大的页面)
DNS查找的开销很大,而且超时值很长。
将我的网站javascript放在单独的域中会让我感到不舒服,因为可能会发生安全冲突。你必须让你的javascript/ajax调用与域保持同步。看起来是个麻烦而不是它的价值。
我已经使用i.domain.com和domain.com 5+多年了,没有任何问题。
我敢打赌,把JS放回主域会解决你的问题。它肯定会让它变得更简单,更容易处理。
但是如果操作得当,你的3个域应该可以工作。不幸的是,我在这个问题中没有足够的信息来找到这个问题。
https://stackoverflow.com/questions/805887
复制相似问题