asp.net-mvc-4 requirejs bundling-and-minification

Optimización de Require.js vs asp.net mvc 4 agrupación y minificación



asp.net-mvc-4 requirejs (2)

Recientemente, vi que Mvc 4 incluía agrupar y minificar varios scripts y css en un único enlace que minimiza y disminuye el tiempo de carga del script con una sola configuración.

El require.js r.js es también una herramienta de optimización disponible para la carga y minificación de scripts. ¿Puede alguien decirme qué es mejor? ¿O si require.js se puede usar igual que minification + bundling tool para cargar script en un solo archivo o no? al igual que Mvc 4?

Prefiero usar require.js para cargar AMD, así que pienso aplicar los conceptos de idea de minividación Mvc 4 si está disponible en require.js como carga de url única para scripts y css para optimización y minificación.

¿Alguien puede poner algunas ideas y luces sobre este tema?


En mi caso particular (y muchos otros que he conocido anteriormente) no tiene mucho sentido realizar una carga de servidor adicional con una solicitud por separado solo con el fin de cargar un script de 1-3kb o un archivo de estilo.

  • Como se mencionó, dicha solicitud usa recursos del servidor que generalmente son limitados
  • Lleva tiempo cargar, retraso garantizado de 50-200ms
  • Cuantos más archivos tenga, mayor será la probabilidad de que uno de ellos no se cargue debido a un problema de conexión.
  • También hay una sobrecarga con la cantidad de código repetitivo requerido para envolver todo en módulos

Parece mucho más eficiente y seguro cargar incluso una enorme secuencia de comandos de 5mb (lo cual es irreal) y cargarla más tarde desde la memoria caché. Al usar GZip, exprimirá sus 5 mb de texto en 200 kb de datos binarios, que es mucho menor que la cantidad de contenido gráfico que utiliza un sitio promedio por solicitud.


Require.js es una herramienta del lado del cliente, que permite al cliente solicitar solo los scripts que necesita. A menudo, en una aplicación MVC, cada script termina agregándose al archivo _layout.cshtml, y no se piensa mucho en lo que cada controlador necesita. Require.js le permite pensar en qué necesita cada módulo para ejecutar.

r.js requiere nodo o java, y es una herramienta del lado del servidor que es en cierto modo análoga a la agrupación MVC4 y la minificación. r.js funciona junto con require para tratar de minimizar los paquetes comúnmente utilizados y enviarlos como un paquete. Pero al agruparlos y empaquetarlos, los está enviando potencialmente antes de que el script los "requiera".

Donde se pone interesante es que al empacar casi estás derrotando el propósito de AMD. es decir, está agrupando una gran cantidad de scripts dependientes en un solo archivo, en lugar de dejar que require.js determine cuáles necesita y realice la solicitud cuando los necesite.

Una buena referencia sobre la integración require y mvc: http://www.stefanprodan.eu/2012/09/intro-requirejs-for-asp-net-mvc/ - tenga en cuenta que no utiliza la agrupación.

Entonces, para mí, creo que minimizar los archivos individuales (y agrupar / minify el css) y permitir que requiera su trabajo como sea necesario para soportar AMD.