为asp.net找到合适的缓存和压缩策略

时间:2009-06-11 14:38:54

标签: asp.net asp.net-mvc caching compression screen-scraping

我正在试图找出为website我正在构建的缓存的最佳方法。它严重依赖屏幕抓取维基百科网站。这是我目前正在做的过程:

  1. 用户通过我的网站从维基百科请求一个主题(即http://www.wikipedia.org/wiki/Kevin_Bacon将是http://www.wikipediamaze.com/wiki?topic?=Kevin_Bacon)注意:因为IIS无法处理requests that end in a '.'我被迫使用querystring参数< / LI>
  2. 检查我是否已将格式化的html存储在我的数据库中,如果存在,则只显示给用户
  3. 否则我会对维基百科发送网页请求
  4. 根据需要解压缩流。
  5. 做一堆DOM操作来摆脱我不需要的东西(并注入我需要的东西)。
  6. 将html存储在我的数据库中以供将来请求
  7. 将html返回浏览器
  8. 因为它依赖于屏幕抓取和DOM操作,所以我试图保持速度快,这样我每个主题只需要做一次而不是每个请求。以下是我的问题:

    1. 有没有更好的缓存方式或我可以做的其他事情来帮助提高性能?
    2. 我知道asp.net内置了缓存机制,但是它会以我需要的方式工作吗?我不想在每次请求时从数据库中检索html(非常重),但我需要存储html以便每个用户都获得相同的页面。我只想一次从维基百科获取数据。
    3. 有什么我可以用压缩来更快地进入浏览器,如果是这样,浏览器可以处理uncmopressing并显示html吗?或者这甚至不是一个考虑因素。我问的唯一原因是,因为维基百科的一些页面通过HttpWebRequest发送给我作为gzip流。
    4. 非常感谢任何和所有建议,指导等。

      谢谢!

2 个答案:

答案 0 :(得分:1)

缓存策略:将HTML写入静态文件,让用户从该文件下载。 压缩策略:查看Google's PageSpeed Best Practices

答案 1 :(得分:1)

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

如果您解压缩从Wikipedia获得的内容是个问题,那么请不要发送Accept-Encoding标头。这应该迫使维基百科将页面发送给您未压缩的页面。