我正在编写一个网站(C#,ASP 3.5),同时实现一个简单的CMS。 在几个有限的地方 - 我允许网站管理员管理页面内容。
编辑内容由Edit控件完成 - 输出HTML存储在数据库中(SqlServer Express)。
每次页面加载时 - 我从数据库中读取页面HTML内容并在屏幕上打印。
至于现在(发展阶段),一切都很顺利。
但是,我有点害怕现实世界中的性能问题(过多的数据库调用?)。
我正在寻找缓存动态HTML页面的最佳解决方案: 假设页面内容不会经常更新,我应该:
我认为页面内容,即HTML文本 - 不会太长。
由于
答案 0 :(得分:0)
我会实现一个不涉及磁盘i / o的缓存策略。 例如,您可以下载Enterprise Library并执行以下操作:
ICacheManager cacheManager = CacheFactory.GetCacheManager(); object obj = cacheManager.GetData(YOUROWNCACHEKEY);YourCMSContentType cmsContent = null;
if (obj == null) { cmsContent = ""; //get cms content from db here cacheManager.Add(YOUROWNCACHEKEY, cmsContent); } else { cmsContent = obj as YourCMSContentType; }
return cmsContent;
您需要参考:
这些也需要在服务器上提供:
编辑app.config或web.config,右键单击,单击编辑企业库配置,右键单击.config节点,添加缓存应用程序块。
此致
微米。
答案 1 :(得分:0)
使用页面上的OutputCache属性。
超级易用,将其缓存为60分钟,然后在给定的一天中每页最多只能进行24次DB调用。
答案 2 :(得分:0)
我不想发布否定回复或不提供答案,但在做任何事情或考虑缓存之前,您应该决定/解决这是否是性能问题。如果你从那些积极参与表演的人那里读到任何东西(Rico Mariani和他的博客就是一个很好的例子)那么你会看到通过测量实现这一目标的方法之一。
您每小时或每分钟会有多少次点击?数据库调用在生产服务器上需要多长时间?
有很多方法可以找到这个,一个简单的代码分析器(.NET自定义类 - 如果你需要详细信息,请给我发消息)可用于计时每个请求并将其输出到日志文件。也可以注销进行数据库调用所花费的时间。这可以让您了解单个请求的性能(假设分段硬件/环境与生产环境非常相似)。要在负载下测试它,您可以使用压力测试工具并模拟预期负载。这应该告诉你平均每秒请求服务时间。如果可以接受,您可能根本不需要任何缓存。很多时候可以在必要之前采用缓存。添加代码以使用企业库缓存功能将不必要地增加代码的复杂性。输出缓存也会引入微妙的问题,但在这种情况下,我同意答案,认为这是一个可行的解决方案。
从您所描述的内容来看,听起来并不像是会有太多的数据库命中,您会惊讶于某些网站的每次请求的点击量。至于你的第二点,我绝对不会考虑在测量之前重新设计性能应用程序。我假设您将内容存储在数据库中是有充分理由的,将其移动到磁盘上会带来其他开销和安全隐患。