c# - cshtml - ¿Usar razor/asp.net mvc3 para generar páginas html estáticas?
razor insert c# code (7)
Para un proyecto, tengo que generar páginas .html estáticas, que se publicarán en un servidor remoto.
Tengo que automatizar la creación de esos archivos a partir del código ac #, que toma datos de una base de datos de SQL Server.
Los datos no se cambiarán a menudo (cada 4-5 meses), y este sitio web será muy frecuentado.
Como me parece muy efectivo el sintáctico de asp.net MVC3, me pregunto si es posible usar asp.net MVC3 / Razor para generar esas páginas .html.
Asi que:
- ¿Es esta una buena idea?
- Si es así, ¿cuál es la buena manera?
- Si piensas a otra buena manera de hacerlo, ¿de qué manera?
Gracias por la ayuda
Editar
En cuanto a las respuestas, necesito hacer una precisión: no quiero / necesito usar el almacenamiento en caché web, por muchas razones (carga (millones de páginas cargadas cada mes), integración (integramos nuestra página en un apache optimizado, otra parte de un sitio web), número de páginas (el almacenamiento en caché solo me ayudará si tengo las mismas páginas mucho tiempo, pero tendré ~ 2500 páginas, así que con la ley de murphy, excepto si pongo un tiempo de espera de caché muy alto , Tendré que generarlos a menudo). Así que realmente busco algo para generar páginas HTML.
Edición 2 Acabo de recibir una nueva restricción: / Esas plantillas deben estar localizadas. Lo que significa que debería tener algo equivalente al siguiente código de afeitado: @MyLocalizationFile.My.MyValue
Edit 3 Actualmente, estoy pensando en hacer un sitio web dinámico, y llamar a alguna consulta http en él, para almacenar el HTML generado. PERO, ¿hay una manera de evitar el http? es decir, simular una llamada http, especificar el flujo de salida y la url llamada (solo con llamada GET).
Nuestros números de carga anteriores fueron realmente subestimados, en realidad tienen un poco más de un millón de visitantes por día, ~ 14 millones de páginas por día.
- Sí lo es. Incluso cuando puede almacenar en caché los resultados, las páginas HTML siempre serán más rápidas y utilizarán menos recursos del servidor
- Una buena manera es transformar sus vistas de maquinilla de afeitar en texto y luego guardar el texto como un archivo html.
- Otra forma es usar plantillas T4 , pero recomiendo Razor.
¿Hay alguna razón de rendimiento con la que se haya encontrado que merezca el esfuerzo de pre-renderizar el sitio web? ¿De cuántas páginas estamos hablando? ¿Qué tipo de parámetros toman sus controladores? Si el almacenamiento en caché de vainilla no satisface sus requisitos, para mí, el mejor enfoque sería un proveedor de almacenamiento en caché basado en disco ...
http://www.juliencorioland.net/Archives/en-aspnet-mvc-custom-output-cache-provider
En lugar de generar páginas HTML estáticas, creo que sería mejor generar dinámicamente las páginas cada vez, pero usar el almacenamiento en caché para aumentar el rendimiento.
Consulte este artículo sobre el almacenamiento en caché con ASP.NET MVC3 para obtener más información:
Estoy trabajando en una solución similar. Mi sitio web se ejecuta normalmente (ASP.NET + DB + CMS) en un entorno de prueba y luego uso wget para rastrearlo y generar páginas html estáticas. Esas páginas html estáticas, incluidos los activos, se cargan luego en un Amazon S3 Bucket. De esa manera el sitio web se vuelve completamente estático, sin dependencias.
Estoy planeando tener una tarea diaria que rastree páginas específicas en el sitio web para hacerlo más rápido, por ejemplo, solo rastreo / noticias todos los días.
Sé que ya ha encontrado una solución, pero tal vez esta respuesta podría ser útil para otros.
Mira las plantillas T4 o una solución de plantillas similar
Puede usar Razor Engine ( NuGet-link , su website ), de esta manera puede crear plantillas desde una aplicación de consola sin usar asp.net MVC.
Lo uso de la siguiente manera:
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);
}
}
}
Terminé creando un sitio web normal de asp.net MVC y luego generé una página yendo a la página con un WebClient.
Así puedo tener una vista previa del sitio web y puedo disfrutar de todo el poder de los ayudantes de Razor + MVC.