Utiliza el Compilador Google Closure desde C#
Hace unos días, Google lanzó al mercado su proyecto Closure Compiler para optimizar código JavaScript. Aquí hay una breve descripción que aparece en su página sobre este compilador:
El Closure Compiler es una herramienta para lograr que JavaScript se descargue y se ejecute más rápido. Es un verdadero compilador de JavaScript. En lugar de compilar un código fuente y convertirlo en código máquina, este copilador convierte código JavaScript en código JavaScript optimizado. Analiza tu código JavaScript, remueve pedazos de código muerto y reescribe el código restante minimizándo.
La parte interesante de este Closure Compiler es que no sólo remueve espacios en blanco y tabulaciones, también reescribe tu código JavaScript para hacerlo más pequeño y óptimo, lo que es equivalente a mejor rendimiento. Las pruebas demuestran que puede reducir archivos de JavaScript en un 60% – ¡y esto antes de comprimirlos via HTTP! Considerando las grandes cantidades de JavaScript que sitios modernos utilizan, permiten que esta herramienta sea bastante útil.
Closure Compiler viene en dos sabores: – Una versión escrita en Java lista para ejecutarse desde línea de comandos, y un API RESTful. A continuación una demostración de su uso desde C#.
El Código
public class GoogleClosure {
public string Compress(string file)
{
string source = File.ReadAllText(file);
XmlDocument xml = CallApi(source);
return xml.SelectSingleNode("//compiledCode").InnerText;
}
private static XmlDocument CallApi(string source)
{
using (WebClient client = new WebClient())
{
client.Headers.Add("content-type", "application/x-www-form-urlencoded");
string data = string.Format(PostData, HttpUtility.UrlEncode(source));
string result = client.UploadString(ApiEndpoint, data);
XmlDocument doc = new XmlDocument();
doc.LoadXml(result);
return doc;
}
}
}
¿Cómo lo utilizo?
Puedes utilizar esta clase de las sig. maneras. Puedes escribir un script MSBuild o un Nant que automáticamente comprima tus archivos JavaScript como parte de un proceso de integración o, si lo prefieres, escribir un Handler HTTP que haga lo mismo pero en tiempo de ejecución. Recuerda salvar el reultado en cache. A continuación un ejemplo de su uso a través de una clase de ASP.NET:
GoogleClosure gc = new GoogleClosure();
string script = gc.Compress(Server.MapPath("~/script.js"));
Recuerda que esta clase es sólo de ejemplo y no está realizando ningún timpo de análisis de fallos o manejo de excepciones.
- via .NET slave