2009年5月31日,星期日

有关优化,HTTP 304等的更多信息。– a solution?

在我的最后一篇文章中 优化,BLOB缓存和HTTP 304,我在一个问题上做了很长时间的演练’d具有SharePoint发布网站的经验。一些人发表评论,主要是说他们’d注意到了同样的事情,但是我想分享进一步的发展和发现!

快速回顾

在某些情况下,尽管浏览器缓存中存在一些SharePoint中的某些文件,但它们始终会被浏览器重新请求(“临时网络文件”)。具体来说,这是针对 存储在样式库和母版页库中的文件,供匿名用户使用。尽管SharePoint会使用HTTP 304进行响应,说确实可以使用缓存的文件(而不是发送 文件本身 再次),对于每个文件,我们实际上都不必要地往返了服务器–当整个页面都可能有很多这样的文件’的图像/ CSS / JS文件被考虑。这种额外的网络流量可能会对站点性能产生明显影响,如果用户在地理位置上与服务器距离较远,则这种影响会被放大。

一个办法?

瓦尔德克 最近,我一直在通过电子邮件处理一些开发问题,他很好奇地亲自调查了这个问题。再现并播放了一段时间后,Waldek发现刷新基于磁盘的缓存似乎会导致行为更改– or in layman’的条款,解决了所有问题。更具体地说,我们’re 假设 it’刷新具有影响的BLOB缓存– in both 瓦尔德克’的测试和我随后的验证,对象缓存也被刷新:

FlushDiskCache

在此页面上单击“确定”按钮后,问题似乎完全消失了,因此 现在 现在首次以匿名用户身份访问该页面时,正确的‘max-age’标头已添加到文件中(根据web.config中的BLOB缓存声明)– contrast the ‘max-age=86400’样式库文件上的标头以及我在文档中记录的内容 最后发表:

匿名CorrectHeadersAfterFlushCache

这意味着,在随后的请求中,样式库文件直接从浏览器缓存中提供,而没有304往返:

SecondRequestNo304s

这是个好消息,因为这意味着我所描述的问题本质上是没有问题的,因此在发布样式库中存储文件不会造成性能损失。

那有什么呢?

I’我现在想知道这是否只是一个‘gotcha’BLOB缓存和发布网站。我知道其他人由于 对我以前的帖子的评论,有趣的是,有一位发帖人说他们专门使用反向代理技术来解决此问题。难道真的是每个看到这种行为的人都没有’在执行过程中某处刷新BLOB缓存’实际上是必需的步骤吗?还是我和Waldek所做的测试在某种程度上存在缺陷?还是确实,尽管其他人也报告了同样的问题,但我的最初调查是否有缺陷?

我很想听到你的消息–如果您能重现问题,我’已经描述了您的发布网站 ’如果已经开发了,刷新BLOB缓存是否可以按此处所述为您解决?发表评论,让我们知道!

好工作沃尔德克:-)

14条评论:

哈罗德说过...

Flushing the blobcache didn't solve the 是sue on my VPC. I have a VPC with the default "blueband" publishing site. After flushing the blobcache the 最大年龄 是 still set to 0.

在测试过程中,我有一些奇怪的提琴手行为。我将Internet Explorer与经过身份验证的会话结合使用,而将Chrome与匿名会话结合使用。在Chrome中刷新页面后,我突然被认证了!

Therefore I have used two other techniques to verify the 最大年龄=0 是sue. I have installed FireFox with firebug. In the network view of firebug all items in the style library had a 最大年龄 of 0.
Next I have installed wireshark on the 的SharePoint VPC to capture the "real" network packages. Then I browsed from my laptop to the site on the VPC with Internet Explorer. And wireshark still showed packeges with 最大年龄=0....

Can you please verify that the 最大年龄 still 是n't 0 when you're anonymous on the site? Or perhaps you were mislead (just as I was) by the strange behaviour of fiddler?

亲切的问候,
哈罗德

克里斯·奥'Brien说过...

@哈罗德

非常 有趣-我将按照这些思路进行更多测试。与我有关的方面之一是,我不断地登录/注销以进行测试(均在VM上本地进行)。我可能会尝试将网络排序到VM(当前具有Windows 7 / VMware的乐趣。),这样我可以在主机上匿名,但可以安全地登录VM(例如刷新BLOB缓存)。

还将推动Waldek。

谢谢,

克里斯。

威廉·普雷斯说过...

我已经看到使用Fiddler的类似行为。似乎在服务器和Fiddler之间建立了身份验证会话。这意味着,通过Fiddler的一个会话通过身份验证后,所有会话都将通过身份验证。

我相信解决此问题的方法是禁用连接重用(Fiddler-> Tools Menu ->常规选项卡)。这意味着Fiddler将在每个请求上与服务器建立新连接(因此,其行为更像是真正的代理)。

HTH!

克里斯·奥'Brien说过...

@将,

嗯-那可能就是我的意思。我当然不知道Fiddler的这种行为。

在第二天或第二天进行重新测试时,将按照您建议的步骤进行操作。

谢谢你,万分感谢!

克里斯。

马克西姆·庞巴迪说过...

刷新基于磁盘的缓存(如果使用复选框,仅对该区域和服务器起作用)可能会或可能不会暂时解决此问题。

正如我在另一篇文章中提到的's a 已知错误 that 是n'目前正计划在MOSS 2007中进行修复(尽管可能会有所变化)。

I'd在另一个库中部署CSS / JS / XSL。

马克西姆

克里斯·奥'Brien说过...

@Maxime,

再次感谢您。我很难按照之前的评论来验证测试(无论哪种方式),所以它'从MS某人那里获得更可靠的答案是一件好事。

所以我们在那里总结 一个已确认的问题,建议的解决方案不太可能可靠,并且在我之前的文章中,我们应该根据您的建议将CSS / JS文件存储在另一个库或文件系统中。

干杯!

克里斯。

匿名 said...

我也遇到样式库缓存问题,但就我而言,这是经过身份验证的用户,而不是遇到问题的匿名用户(我们不允许任何匿名访问)。

有趣的是,Windows身份验证(默认)区域正在缓存样式库,而表单身份验证(互联网)区域正在缓存样式库以外的所有内容。 (在Windows和Forms站点中,web.config blobcache指令完全相同)。

我们寻找了大多数陷阱(例如,未发布的图片赢得了't cache, "Access to the path 'D:\ BLOBCACHE \ ...被拒绝。"在应用程序事件日志等中),但到目前为止没有运气。

谁能确认"known bug"仅与匿名用户有关,还是经过身份验证的表单用户也受到影响?他们似乎是。

匿名 said...

我完全相信,此错误不仅会影响匿名用户,还会影响经过身份验证的(membershipprovider)用户。

我已经尝试了无休止的建议和小提琴,包括刚刚发布的Chris,但是我无法让样式库为表单用户缓存。

克里斯·奥'Brien说过...

有趣。不幸的是我没有'当前无法访问使用FBA和样式库中的图像进行检查的站点。这意味着'对于将静态文件存储在样式库之外,这一点尤为重要(我们必须 测试 如果存储在另一个库中以确保问题不会't occur there also).

感谢您举报。

克里斯。

匿名 said...

只是说我们最终为FBA用户提供了样式库来缓存!

这是我们进行活动之前的确切事件顺序(并非所有步骤都必要,具体取决于您的安装):

1.将Blobcache重置为"false"在两个web.configs中(默认区域和Internet区域)。

2. iisreset。

3.手动删除blobcache目录。

4.将blobcache设置为"true"仅适用于互联网FBA区域。

5.以网站集管理员用户身份访问Internet网站,转到顶级网站设置>网站集对象缓存,请根据Chris选中所有复选框's suggestion.

6. iisreset。

7.浏览到FBA互联网站点及其'现在正在工作! (感谢克里斯!)

8.返回到默认区域的web.config并将blobcache设置为"true"

我们一路上发现了几件事:

一世。它'如果您有2个区域,最好先使您的互联网站点blobcache正常工作。

2. Yslow(一个免费的firefox插件)是调试什么/不缓存的好工具(只需查看插件窗口中的components选项卡)

毋庸置疑,这看起来似乎有点挑剔,但我们花了很多时间才使它起作用。因此,请重申马克西姆的话-这"...可能会或可能不会暂时解决此问题。"

在我们看来,似乎确实希望选择所有复选框都与众不同。的"重置基于磁盘的缓存"单独的复选框不足。

克里斯·奥'Brien说过...

哇,非常感谢。

做得好,让它正常工作。我可以相信该过程会奏效,但是我有点担心某些事情可能会阻止它正常运行-您提到的脆弱性。有兴趣听听您接下来几天/几周的情况。

非常感谢您抽出宝贵的时间写下您的解决方法!

谢谢,

克里斯。

匿名 said...

克里斯,你好

只是FBA网站上的更新。

到目前为止,尽管我们最初在设置问题上遇到了问题,但缓存标头在Dev,Sys和Uat平台(目前正在进行负载测试)上仍然可以通过。

我们已经对该网站进行了几周的测试,唯一的变化是'我们要做的就是允许我们所有的FBA用户在样式库中都具有受限的读取访问权限。

因此,似乎有两个主要问题:
1.清除缓存时,选中所有复选框,然后
2.确保您的用户(至少)对样式库具有受限的读取访问权限。

这似乎反映了您对匿名用户的体验。

尽管Maxime表示blobcache可能存在问题,并且最好将文件存储在其他位置,但在开发周期的后期,这不是我们的选择。它's a shame she wasn'更确切地说明问题的本质。

无论如何,当我(和您碰巧)在Sharepoint最佳实践会议上时,我的一位同事专门询问了一位MS Rep,我们应该在哪里存储CSS及其相关的图像(而不是发布图像)。我们告诉他这是一个经过FBA认证的网站,具有不同级别的用户权限,他说,样式库将是放置这些信息的正确位置。公平地说,缓存不是'提到了MS Rep,但是就像我说的那样,我们不再遇到任何问题,'现在改变任何东西为时已晚...

克里斯·奥'Brien说过...

感谢更新。

我希望您的环境继续正常运行。我更喜欢将文件存储在其他地方所带来的确定性,但是请确保您'll be fine.

在与MS人的对话方面-我认为这个问题只对人们产生了影响'的雷达,所以不会'一定希望每个与SharePoint有关的MS人员都知道此问题。

干杯,

克里斯。

匿名 said...

马克西姆现在在这里发布了关于此的博客:

http://blogs.msdn.com/maximeb/archive/2009/08/11/blobcache-style-library-and-anonymous-users.aspx