【Android】Notas de estudio de optimización de red de aplicaciones

Razones de optimización de la red

La optimización web es importante para las aplicaciones móviles por las siguientes razones:

experiencia de usuario:

La conectividad de red es una de las funciones principales de las aplicaciones móviles. A través de la optimización de la red, se puede mejorar la velocidad de carga y la velocidad de respuesta de la aplicación, se puede reducir el tiempo de espera del usuario y se puede brindar una experiencia de usuario más fluida y eficiente. Una conexión de red rápida y estable puede aumentar la satisfacción del usuario y mejorar la competitividad de las aplicaciones.

Ahorre costos de tráfico:

Al usar una conexión de datos móviles en un dispositivo móvil, el tráfico de la red puede ser limitado y se les puede cobrar a los usuarios por el uso de datos. A través de la optimización de la red, se puede reducir el tráfico de red consumido por la aplicación en segundo plano o en primer plano, lo que reduce la tarifa de datos para que el usuario use la aplicación y proporciona una experiencia de red más económica.

Ahorra consumo de batería:

La conectividad de red es uno de los principales consumos de energía para los dispositivos móviles. A través de la optimización de la red, se puede reducir el uso frecuente de conexiones de red por parte de las aplicaciones, y se puede reducir el consumo de batería de los dispositivos en estado de red continua. Esto prolongará la duración de la batería del dispositivo, lo que permitirá al usuario utilizar el dispositivo durante un período de tiempo más prolongado.

Para adaptarse a un entorno de red inestable:

Los dispositivos móviles a menudo se enfrentan a la inestabilidad de la red, como retrasos en la red y pérdida de paquetes. A través de la optimización de la red, se pueden adoptar algunas estrategias para lidiar con entornos de red inestables, como el mecanismo de reintento, la fusión de solicitudes, la compresión de datos, etc., para garantizar que las aplicaciones puedan proporcionar servicios estables y confiables en diversas condiciones de la red.

Cumple con las especificaciones y restricciones:

Las plataformas de dispositivos móviles, como Android e iOS, suelen tener algunas normas y restricciones de uso de la red. Por ejemplo, es posible que una aplicación deba obedecer restricciones de red en segundo plano, número máximo de solicitudes, políticas de uso de datos, etc. Realizar la optimización de la red puede asegurar que las aplicaciones cumplan con las especificaciones de la plataforma correspondiente y evitar restricciones o penalizaciones.

Optimización de red

El proceso por el que debe pasar una solicitud de red normal es el siguiente:

1. Resolución de DNS, solicitando al servidor DNS que obtenga la dirección IP correspondiente al nombre de dominio
2. Establecimiento de una conexión con el servidor, incluido el protocolo de enlace de tres vías TCP, proceso de sincronización del protocolo de seguridad 3.
Una vez establecida la conexión, envíe y recibir datos, y decodificar los datos.

Aquí hay tres puntos de optimización obvios:
1. Use la dirección IP directamente y elimine el paso de resolución de DNS
2. No restablezca la conexión para cada solicitud, reutilice la conexión o use siempre la misma conexión (conexión larga)
3 Comprimir datos, para reducir el tamaño de los datos transmitidos.

optimización de DNS

DNS (Sistema de nombres de dominio), su función es que 根据域名查出IP地址es la premisa del protocolo HTTP, solo después de que el nombre de dominio se resuelve correctamente en una dirección IP, el proceso HTTP posterior puede continuar.

El proceso completo de resolución de DNS es muy largo. Primero se obtendrá del caché del sistema local. De lo contrario, se obtendrá del servidor DNS más cercano. De lo contrario, se obtendrá del servidor de nombres de dominio principal. Cada capa tiene un caché Cada capa de caché tiene un tiempo de caducidad.

El mecanismo tradicional de resolución de DNS tiene varias desventajas:

1. 缓存时间设置得长,域名更新不及时,设置得短,大量 DNS 解析请求影响请求速度

2. 域名劫持,容易被中间人攻击,或被运营商劫持, para resolver el nombre de dominio a una dirección IP de terceros, según las estadísticas, la tasa de secuestro alcanzará el 7%;

3. DNS 解析过程不受控制,无法保证解析到最快的IP

4. 一次请求只能解析一个域名

Para resolver estos problemas, hay uno HTTPDNS. El principio es muy simple. Es hacer el trabajo de resolución del nombre de dominio usted mismo y obtener la dirección IP correspondiente al nombre de dominio a través del fondo de solicitud HTTP, para resolver directamente todos los problemas anteriores.

inserte la descripción de la imagen aquí

El principio detallado de HTTPDNS (Sistema de nombres de dominio basado en HTTP) es el siguiente:

客户端发起请求:
Cuando un cliente necesita resolver un nombre de dominio, envía uno HTTP请求al servidor HTTPDNS. La solicitud URLcontiene lo que debe analizarse 域名信息, generalmente usa el método GET o POST y especifica los parámetros relevantes en el encabezado de la solicitud.

DNS解析请求:
HTTPDNS服务器Después de recibir la solicitud del cliente, se pondrá en funcionamiento 域名解析. Primero 检查本地的缓存verifica si hay un resultado de resolución para el nombre de dominio. Si la hay, y la memoria caché no ha caducado (según el valor TTL), la dirección IP se obtiene directamente de la memoria caché y se devuelve al cliente.

缓存更新:
Si está en la caché del servidor HTTPDNS 没有该域名的解析结果,或者缓存已过期, iniciará una DNS解析solicitud real. Esta solicitud se puede iniciar en un servidor DNS autorizado u otros proveedores de servicios de resolución de DNS de confianza. Después de que el servidor lo resuelva 域名对应的IP地址, lo hará 结果缓存y establecerá un valor TTL apropiado.

HTTP响应返回:
El servidor HTTPDNS envía los datos resueltos al cliente IP地址en forma de respuesta HTTP . 返回La respuesta generalmente contiene el resultado del análisis, el valor TTL y otra información relevante. El cliente extrae la dirección IP analizando el contenido de la respuesta HTTP para la comunicación de red posterior.

客户端更新解析结果:
Después de que el cliente reciba la respuesta HTTP, la extraerá 解析得到的IP地址y realizará el procesamiento correspondiente, como comunicarse con el servidor. El cliente también puede almacenar en caché el resultado del análisis según sea necesario y utilizar los datos almacenados en caché en la siguiente solicitud, a fin de reducir la dependencia del servidor HTTPDNS.

El resumen de los beneficios de HTTPDNS es:

1. Secuestro de DNS local: dado que se pasa HttpDns IP 直接请求 HTTP 获取服务器 A 记录地址, no hay ningún proceso para solicitar al operador local la resolución del dominio, por lo que fundamentalmente 避免了劫持问题.

2. DNS 解析由自己控制, para garantizar que se devuelva la dirección IP más cercana de acuerdo con la ubicación del usuario, o se use la IP más rápida de acuerdo con los resultados de la prueba de velocidad del cliente;

3. Una solicitud está bien 解析多个域名.

optimización de la conexión

La principal idea de optimización aquí es multiplexar conexiones, en lugar de restablecer conexiones cada vez que se realiza una solicitud, se puede decir que cómo multiplexar conexiones de manera más eficiente es el punto más importante en la optimización de la velocidad de solicitud de red.

【keep-alive】: Hay un keep-alive en el protocolo HTTP, HTTP1.1默认开启hasta cierto punto 缓解了每次请求都要进行TCP三次握手建立连接的耗时. El principio es 请求完成后不立即释放连接,而是放入连接池中que si hay otra solicitud para enviar en este momento, el nombre de dominio y el puerto de la solicitud son los mismos, y la conexión en el conjunto de conexiones se usa directamente para enviar y recibir datos, lo que reduce la conexión que consume mucho tiempo. establecimiento. De hecho, tanto el cliente como el navegador tienen habilitado por defecto el keep-alive, por lo que para un mismo nombre de dominio, ya no se establecerá una conexión cada vez que se envíe una petición, y la pura conexión corta ya no existirá.

Sin embargo 有 keep-alive 的连接一次只能发送接收一个请求, no se pueden aceptar nuevas solicitudes hasta que se haya procesado la solicitud anterior. Si se inician varias solicitudes al mismo tiempo, hay dos situaciones:

1. Si 串行envía una solicitud, puede 一直复用一个连接, pero 速度很慢cada solicitud debe esperar a que se complete la solicitud anterior antes de enviarla.
2. Si 并行envía una solicitud, solo 每个请求都要进行tcp三次握手建立新的连接.

Para el problema de las solicitudes paralelas, HTTP2se propone un protocolo de nueva generación 多路复用para solucionarlo. El mecanismo de multiplexación de HTTP2 es el mismo 复用连接, pero la conexión que multiplexa 支持同时处理多条请求, 所有请求都可以并发在这条连接上进行también soluciona el problema causado por la necesidad de establecer múltiples conexiones para solicitudes concurrentes mencionadas anteriormente.

La multiplexación se encapsula en la conexión 传输的数据uno a uno stream. Cada flujo tiene un identificador. Se puede realizar el envío y la recepción del flujo 乱序. No depende del orden, por lo que no habrá problema de bloqueo. El extremo receptor puede usar el identificador. de la secuencia Para distinguir a qué solicitud pertenece, y luego proceder 数据拼接a obtener los datos finales.

La biblioteca de red de código abierto de Android OKhttp默认就会开启 keep-alive, y también es compatible con HTTP2 en versiones superiores a Okhttp3.

compresión de datos

El impacto de los datos en la velocidad de solicitud se divide en dos aspectos, uno es 压缩率y el otro es 解压序列化反序列化的速度. En la actualidad, los dos formatos de datos más populares son jsony protobuf, json es una cadena y protobuf es binario. Incluso después de comprimirse con varios algoritmos de compresión, protobuf seguirá siendo más pequeño que json. Protobuf tiene ventajas en términos de volumen de datos y protobuf también tiene algunas ventajas en la velocidad de serialización.

enlace: protobuf

Además de elegir diferentes métodos de serialización (formatos de datos), Http puede codificar el contenido (es decir, la parte del cuerpo), y gzipdicha codificación se puede usar para lograr el propósito de la compresión.

lo hará automáticamente por OKhttpnosotros .BridgeInterceptor开启gzip解压的支持

otro

1. Usowebp代替png/jpg

2. 不同网络的不同图片下发, como (porque la imagen original es una imagen de 300x300):

2/3G usa imágenes de baja resolución: use imágenes de 100X100;

Si se determina que la intensidad de la señal de 4G es fuerte, use una imagen de 300X300, si es media, use una imagen de 200x200 y si la intensidad de la señal es débil, use una imagen de 100x100;

Red WiFi: envía directamente imágenes 300X300

3,http开启缓存 / 首页数据加入缓存

Supongo que te gusta

Origin blog.csdn.net/qq_43358469/article/details/132028073
Recomendado
Clasificación