对于一个谟,我已经生成静态html的网页,这是会被远程服务器上发布。
我已经自动将这些文件从C#代码,它从一个SQL Server数据库中提取数据的创建。
数据将不经常改变(每4-5个月),和本网站将高度经常光顾。
因为我觉得asp.net MVC3剃刀synthax非常有效的,我想知道是否有可能使用asp.net MVC3 /剃刀生成这些html的网页?
所以:
- 这是一个好主意吗?
- 如果是的话,有什么好方法?
- 如果你觉得这样做,哪种方式的另一种很好的方式?
感谢您的帮助
编辑
至于答案,我需要一个精确的:我不想/需要使用Web缓存,对于很多的原因(负载(百万页面加载每月),集成(我们在优化的Apache的整合我们的页面,一个网站的另一部分),页数(缓存只会帮助我,如果我有相同的页面了很多时间,但我一定要有〜2500页,所以墨菲定律,但如果我把一个非常高的高速缓存超时,我会经常来生成)。所以,我真的寻找的东西生成HTML页面。
编辑2我刚得到一个新的约束:/这些模板必须本地化。 意思是说我应该有一些等同于以下剃刀代码: @MyLocalizationFile.My.MyValue
编辑3目前,我正在考虑做一个动态的网站,并调用一些HTTP查询就可以了,保存生成的HTML。 但是,是否有办法避免HTTP? 意为模拟HTTP调用,specifiy输出流并称为URL(只有GET调用)。
我们以前的负荷数字被低估了真正的,实际上他们有一点点超过一百万游客每一天,-14万页的加载/天。
您可以使用剃刀引擎( 的NuGet链接 ,他们的网站 ),这样就可以不使用asp.net MVC创建一个控制台应用程序模板。
我使用它,如下所示:
public string ParseFile<T>(string fileName, T model) {
var file = File.OpenText(fileName);
var sb = new StringBuilder();
string line;
while ((line = file.ReadLine()) != null)
{
// RazorEngine does not recognize the @model line, remove it
if (!line.StartsWith("@model ", StringComparison.OrdinalIgnoreCase))
sb.AppendLine(line);
}
file.Close();
// Stuff to make sure we get unescaped-Html back:
var config = new FluentTemplateServiceConfiguration(
c => c.WithEncoding(RazorEngine.Encoding.Raw));
string result;
using (var service = new TemplateService(config))
{
return service.Parse<T>(sb.ToString(), model);
}
}
}
而不是生成静态的HTML页面,我认为这将是更好的动态生成的网页每一次,但使用缓存以提高性能。
看到这篇文章的缓存与ASP.NET MVC3的详细资料:
http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/improving-performance-with-output-caching-cs
有没有你碰到的任何性能原因将值得的预渲染网页的努力? 我们多少页都在谈论? 做你的控制器采取什么样的参数? 如果香草缓存不能满足您的要求,对我来说,最好的办法是基于磁盘的缓存提供者...
http://www.juliencorioland.net/Archives/en-aspnet-mvc-custom-output-cache-provider
最后我创造一个正常的asp.net MVC的网站,然后通过使用Web客户端页面上会生成页面。
像这样我可以在网站的预览,我可以享受剃刀+ MVC佣工的全部力量。
我工作的一个类似的解决方案。 我的网站是在登台环境中正常(ASP.NET + DB + CMS)运行,然后我使用wget抓取并生成静态html页面。 然后,这些静态的HTML页面,其中包括资产上传到亚马逊S3桶。 这样的网站变成完全静态的,没有依赖关系。
我打算每天有一个每日任务是抓取网站的特定页面,使其更快,例如,只抓取/新闻。
我知道你已经找到了解决办法,但也许这个答案可能是帮助他人。