Un proyecto web cargado consume terabytes de tráfico. Para grandes números, los ahorros del 10-20% pueden ahorrar significativamente dinero y ayudar a no ir más allá de las cuotas.¿Qué debo hacer si el tráfico se acerca peligrosamente a los límites de su tarifa de alojamiento o incluso los supera?En este artículo, analizaremos las técnicas básicas que ayudan a ahorrar tráfico en el servidor web.¡Exprimirlo!
La forma más fácil de ahorrar en tráfico es comprimirlo. Esto carga el procesador del servidor, pero le permite enviar datos al cliente más rápido, reduciendo su tamaño, para que las conexiones se puedan cerrar más rápido. Se utilizan principalmente algoritmos compatibles con Deflate, pero también hay exóticos.Gzip
El algoritmo de compresión más común. Compresión sin pérdidas, con una buena relación de compresión (configurable de 1 a 9, por defecto 6) y desembalaje rápido. Simple y efectivo, adecuado en la mayoría de los casos.
Nginxgzip on;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/xml;
apacheAddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
Zopfli
La alternativa moderna a gzip comprime 3-8% mejor, pero mucho más lentamente (se descomprime en el cliente a la misma velocidad). Funciona en Deflate, por lo tanto, es 100% compatible con zlib, el soporte en los navegadores también está completo.git clone https://code.google.com/p/zopfli/
cd zopfli
make
Nginxgzip_static on;
Brotli
Como Zopfli, desarrollado en las entrañas de Google. Capaz de comprimir no solo en estática, sino también sobre la marcha, como gzip. A diferencia de los algoritmos anteriores, no solo busca repeticiones en el texto, sino que también asigna inmediatamente su propio diccionario, que tiene muchas etiquetas y frases de código estándar, lo cual es extremadamente efectivo para la compresión html / css / js: si Zopfli proporciona aproximadamente un 8% de compresión después de gzip , entonces Brotli puede lanzar otro 10-15%, ¡mientras que otra persona tiene 23%! Pero solo es compatible con https y es incompatible con zlib / deflate. Caniuse es alentador: el soporte de
Nginxen forma de módulo estándar solo está disponible en Plus, Nginx normal debe construirse con un módulo de terceros ( --add-module = / path / to / ngx_brotli ):git clone https://github.com/google/ngx_brotli.git
git clone https://github.com/bagder/libbrotli.git
./autogen.sh
./configure
make
cd /path/to/nginx
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_xslt_module=dynamic --with-http_image_filter_module=dynamic --with-http_geoip_module=dynamic --with-http_perl_module=dynamic --with-threads --with-stream --with-stream_ssl_module --with-stream_geoip_module=dynamic --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_v2_module --with-cc-opt='-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' --with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,--as-needed' --add-module=/path/to/ngx_brotli
make
Config:brotli_static on;
En modo dinámico:brotli on;
brotli_comp_level 6;
brotli_types text/plain text/css text/xml application/x-javascript;
ApacheEverything es más simple aquí, instala mod_brotli y configura el módulo:<IfModule brotli_module>
BrotliCompressionLevel 10
BrotliWindowSize 22
AddOutputFilterByType BROTLI text/html text/plain text/css text/xml
AddOutputFilterByType BROTLI text/css
AddOutputFilterByType BROTLI application/x-javascript application/javascript
AddOutputFilterByType BROTLI application/rss+xml
AddOutputFilterByType BROTLI application/xml
AddOutputFilterByType BROTLI application/json
</IfModule>
Cachéalo!
También puede descargar el canal entre el usuario y el servidor, minimizando la necesidad de volver a cargar recursos. Si el archivo se almacenó en caché, en la siguiente solicitud, el navegador recibirá su contenido localmente.Los encabezados HTTP Cache-control, Expires y Vary le permiten diseñar una política de caché muy flexible, aunque puede poner max-age = 2592000 en todas partes en la frente.Nginxlocation ~* ^.+\.(js|css)$ {
expires max;
}
apache<ifModule mod_headers.c>
<FilesMatch "\.(html|htm)$">
Header set Cache-Control "max-age=43200"
</FilesMatch>
<FilesMatch "\.(js|css|txt)$">
Header set Cache-Control "max-age=604800"
</FilesMatch>
<FilesMatch "\.(flv|swf|ico|gif|jpg|jpeg|png)$">
Header set Cache-Control "max-age=2592000"
</FilesMatch>
<FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
Header unset Cache-Control
</FilesMatch>
</IfModule>
<ifModule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 5 seconds"
ExpiresByType image/x-icon "access plus 2592000 seconds"
ExpiresByType image/jpeg "access plus 2592000 seconds"
ExpiresByType image/png "access plus 2592000 seconds"
ExpiresByType image/gif "access plus 2592000 seconds"
ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
ExpiresByType text/css "access plus 604800 seconds"
ExpiresByType text/javascript "access plus 604800 seconds"
ExpiresByType application/javascript "access plus 604800 seconds"
ExpiresByType application/x-javascript "access plus 604800 seconds"
ExpiresByType text/html "access plus 43200 seconds"
ExpiresByType application/xhtml+xml "access plus 600 seconds"
</ifModule>
Distribuirlo!
Un buen CDN para un sitio ocupado generalmente cuesta mucho dinero, pero por primera vez, gratis es suficiente. ¡Descargar recursos pesados a través de CDN puede reducir el tráfico varias veces! No desaproveches esta oportunidad, especialmente cuando se trata de shareware. Hay muchos artículos únicos con la parte superior de las redes gratuitas en Internet, pero Cloudflare siempre es lo primero.
Y también tienen trabajadores de servicio gratuitos, en los que puede aumentar manualmente su CDN con preferencia y cortesanas. Hay pocos ejemplos, pero el tutorial está en el portal oficial de SW.Conclusión
Si no está utilizando al menos gzip, bienvenido a Internet, aquí más del 80% de los sitios trabajan con él. Si no tiene suficiente compresión estándar y -9, use Brotli con una copia de seguridad en forma de Zopfli (ya que Brotley aún no tiene una cobertura del 100%). Esto puede ahorrar mucho tráfico:- gzip: 50-95% de compresión dependiendo del contenido. Promedio web 65-80%
- Zopfli: + 3-8% de compresión en relación con gzip en promedio, pero ocurre 10%
- Brotli: + 10-15% de compresión en relación con gzip dependiendo del contenido con disparos raros de hasta 20% y más
Datos de caché en el cliente, esto reduce el tráfico durante visitas repetidas en un 99% o menos, dependiendo de la política de caché seleccionada y los cambios en el sitio.Use un CDN para la entrega de contenido y el equilibrio básico. El servidor de distribución se lleva la peor parte, mientras que el tráfico principal se reducirá varias veces. Cuánto depende exactamente de la red, la carga y el modo operativo seleccionado.Todo lo anterior se lleva a cabo en el menor tiempo posible y no requiere una reestructuración compleja de la arquitectura del servidor, lo que le da tiempo para su diseño competente. Comprime, almacena en caché, distribuye y controla tus costos para que no obtengas mucho dinero.