2009-06-11 31 views
2

我想弄清楚我正在构建的website缓存的最佳方法。它很大程度上依赖于屏幕上的维基百科网站。下面是我目前在做的过程:为asp.net寻找正确的缓存和压缩策略

  1. 用户通过我的网站请求来自维基百科的一个主题(即http://www.wikipedia.org/wiki/Kevin_Baconhttp://www.wikipediamaze.com/wiki?topic?=Kevin_Bacon)注:由于IIS不能处理requests that end in a '.'我被迫使用查询字符串看参数
  2. 检查,如果我已经存储在使用HTML在我的数据库,如果它不那么只需将它显示给用户
  3. 否则,我执行Web请求维基百科
  4. 解压缩,如果需要的流。
  5. 做一堆DOM操作来摆脱我不需要的东西(并注入我需要的东西)。
  6. 存放在我的数据库的HTML将来的请求
  7. 返回HTML浏览器

因为它依赖于屏幕抓取和DOM操作我试图让事情尽快让我只需要做它每个主题一次,而不是每个请求。这里是我的问题:

  1. 有没有更好的方式做缓存或我可以做的其他事情来帮助表演?
  2. 我知道asp.net内置了缓存机制,但它会以我需要的方式工作吗?我不想从每个请求的数据库中检索html(很重),但是我需要存储html,以便每个用户都可以得到相同的页面。我只想从维基百科获得数据1次。
  3. 有什么我可以做的压缩,以更快地得到它的浏览器,如果是的话可以浏览器处理uncmopressing和显示HTML?或者这甚至不是一个考虑因素。我问的唯一原因是,因为维基百科的某些页面通过HttpWebRequest发送给我,并以gzip流的形式发送。

任何和所有的建议,指导等,非常感谢。

谢谢!

回答

1

您可以尝试使用VaryByParam = topic为页面启用OutputCache。如果有多个客户端请求,它会将该页面的副本存储在内存中。当页面不在内存中时,服务器可以从数据库中检索它。 OutputCache的优点在于,您甚至可以存储gzip版本的HTML(使用VaryByEncoding)

如果解压缩从维基百科获得的内容时出现问题,请不要发送Accept-Encoding标头。这应该迫使维基百科发送页面给你未压缩。