Al usar Spring Boot + Freemarker para desarrollar proyectos web, algunos archivos estáticos son relativamente grandes, y si se accede en una PC, la velocidad será mucho más lenta cuando se accede a un teléfono móvil, especialmente cuando use el tráfico, y consumirá mucho tráfico.
Al atrapar la solicitud, puede encontrar que cada vez que ingrese una página, debe cargar un archivo estático. Si una empresa que no tiene dinero puede colocar el archivo estático en un CDN para acelerar el acceso, o usar Nginx para almacenar en caché los archivos estáticos.
Hoy les presentaré un método de optimización de caché diferente. A través del mecanismo de caché de Spring, los archivos estáticos se almacenan en caché. Para configurar el caché de archivos estáticos en el arranque de primavera, solo necesita agregar la siguiente configuración al archivo de configuración:
# Tiempo de caché de recursos, Unidad segundos Spring.Resources.Cache-Period = 604800 # Habilitar compresión GZIP Spring.resources.chain.gzipped = true # habilitar cache spring.resources.chain.cache = false
Puede consultar la Documentación para la configuración: Spring Resources Handling Section de https://docs.spring.io/spring-boot/docs/1.5.4.release/reference/htmlsingleging
Después de agregar la configuración de caché, después de acceder a la página, los recursos estáticos cargados se almacenarán en caché. Durante la segunda visita, ya no solicitaremos la descarga nuevamente. Al atrapar el paquete, podemos ver que de hecho ha sido almacenado en caché.
En la columna de tamaño, hay de memoria caché. El recurso se almacena en caché en la memoria del navegador, y algunos archivos se almacenan en caché en el disco, es decir, desde el caché de disco.
El propósito de la optimización es lograr, pero hay un pequeño problema que no se ha resuelto, es decir, si mi archivo de recursos cambia, como el archivo CSS se modifica, y cuando mi servidor lo libera, todavía habrá un caché en el usuario.
El mejor efecto es cuando el archivo cambia o cuando se reinicia el programa del servidor, la solicitud del usuario necesita descargar los recursos más recientes en el servidor. Cuando no hay reinicio, use el contenido en caché, para que el usuario pueda ver el último contenido inmediatamente después del cambio.
Podemos usar el número de versión para resolver este problema, que es agregar un número de versión después del recurso estático, y cambiar el número de versión cuando el recurso cambie, para que no haya ningún problema.
Cómo usarlo es el siguiente:
<link rel = "stylesheet" href = "css /main-app.css? versión = $ {versión!}" rel = "nofollow externo" />El uso es muy simple, la clave es ¿de dónde proviene el valor de la versión?
Podemos establecer este valor a través del código antes de comenzar:
System.SetProperty ("Versión", versión);Este valor se puede pasar a través de los ARG del método principal y pasar dinámicamente al programa en el script que inicia el proyecto. El script de inicio puede obtener el valor MD5 del JAR del programa como el número de versión. De esta manera, cuando el programa del servidor se reinicia, el número de versión cambia y el caché se vuelve inválido.
Luego obtenga este valor en el filtro y configúrelo en la solicitud y puede usarlo en cada página.
Versión de cadena = System.getProperty ("Versión"); req.SetAttribute ("Versión", Versión == NULL? "1.0.0": Versión);Además de este método de pasar los parámetros, también puede usar complementos empaquetados personalizados para reemplazar la versión con contenido específico al empacar.
El método anterior es controlar los cambios de archivo generando la versión por sí mismo. De hecho, Spring MVC ha proporcionado la función de administración de versiones de los archivos estáticos. Hay dos formas. Una es generar el número de versión a través de MD5 del recurso. Si el contenido del archivo cambia, MD5 definitivamente también cambiará. Otra forma es prefijo el recurso con un número de versión.
MD5
Agregue la siguiente configuración al archivo de propiedades:
spring.resources.chain.strategy.content.enabled = truespring.resources.chain.strategy.content.paths =/**
Procesamiento de la URL de agregar:
@ControllerAdVicepublic ClassConConFig {@aUtowired ResourceUrlProvider ResourceUrlProvider; @ModelAttribute ("URLS") Public ResourceUrlProvider urls () {return this.resourceUrlProvider; }}El uso de la página es el siguiente:
La copia del código es la siguiente:
<Link rel = "stylesheet" type = "text/css" href = "$ {urls.getForLoPLaUppath ('/css/main-app.css')}" rel = "nofollow externo">
Después de la compilación, se convertirá en el siguiente contenido:
La copia del código es la siguiente:
<link rel = "stylesheet" type = "text/css" href = "/css/main-app-4v371326bb93ce4b611853a309b69b33.css" rel = "nofollow externo">
Número de versión
Agregue la siguiente configuración al archivo de propiedades:
spring.resources.chain.strategy.fixed.enabled = truespring.resources.chain.strategy.fixed.paths =/js/**,/v1.0.0/** spring.resources.chain.strategy.fixed.version = v1.0.0.0
El uso de la página es el siguiente:
<script type = "text/javaScript" src = "$ {urls.getForLoPlookUppath ('/js/main.js')}"> </script>Después de la compilación, se convertirá en el siguiente contenido:
<script type = "text/javaScript" src = "/v1.0.0/js/main.js"> </script>
No importa qué método use, puede lograr el efecto y la carga de trabajo no será demasiado grande. La optimización será interminable y se lanzará.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.