Desde la URL de entrada hasta el proceso de visualización de la página: análisis en profundidad de las solicitudes de red y la representación

Lectura recomendada

Project Combat: mejores prácticas para el reconocimiento OCR de texto con IA

AI Gamma genera un enlace directo a la herramienta PPT con un clic

Reproduzca el artefacto de codificación en línea de Cloud Studio

Juegue con pintura, voz y traducción de IA de GPU, la GPU ilumina el espacio de imaginación de IA

El intercambio de información

Compartir la documentación más completa sobre la difusión estable de pintura con IA de la historia

Pintura AI sobre enciclopedia SD, MJ, GPT, SDXL

Pintura de IA difusión estable Documento GPT oficial de mitad de viaje Recopilación de datos de la enciclopedia AIGC

「java、python面试题」来自UC网盘app分享,打开手机app,额外获得1T空间
https://drive.uc.cn/s/2aeb6c2dcedd4
AIGC资料包
https://drive.uc.cn/s/6077fc42116d4
https:
## 引言

在当今互联网时代,我们每天都会通过浏览器访问各种网页。但是,你是否曾经思考过在我们输入一个URL后,浏览器是如何加载并显示页面的呢?这背后涉及到一系列复杂的技术和过程。本文将带领大家深入了解从输入URL到页面展示的过程,并给出相应的代码示例,让我们一起探索这个神奇而又复杂的世界。

## 1. 网络请求的发起

通过浏览器输入URL后,浏览器会根据协议类型(如HTTPHTTPS)向服务器发起请求。这个过程可以通过下面的代码示例来体现:

```javascript
const url = "https://example.com";
fetch(url)
  .then(response => response.text())
  .then(data => {
    
    
    console.log(data);
  })
  .catch(error => {
    
    
    console.error(error);
  });

En el código, utilizamos la API de recuperación de JavaScript para iniciar solicitudes de red y convertir la respuesta del servidor en texto y enviarlo a la consola.

2. Resolución DNS

Antes de enviar una solicitud de red, el navegador primero debe resolver el nombre de dominio en la URL en la dirección IP correspondiente. Este proceso se llama resolución DNS. La siguiente es una versión simplificada del código de muestra de resolución DNS:

const dns = require('dns');

const domain = "example.com";
dns.resolve(domain, 'A', (err, addresses) => {
    
    
  if (err) {
    
    
    console.error(err);
    return;
  }
  console.log(addresses);
});

En el código anterior, utilizamos el dnsmódulo Node.js para realizar la resolución DNS y generar la dirección IP resuelta.

3. Establecer una conexión TCP

Después de la resolución DNS, el navegador intentará establecer una conexión TCP con el servidor. Este proceso implica un protocolo de enlace de tres vías para garantizar que los datos se puedan transmitir de forma segura y confiable. A continuación se muestra un ejemplo de código de conexión TCP simplificado:

const net = require('net');

const serverIP = '192.168.0.1';
const port = 80;

const client = new net.Socket();
client.connect(port, serverIP, () => {
    
    
  console.log('TCP connection established');
});

En el código anterior, utilizamos el netmódulo Node.js para crear un socket TCP y connectestablecer una conexión con el servidor a través de métodos.

4. Enviar solicitud HTTP

Una vez establecida la conexión TCP, el navegador construye una solicitud HTTP y la envía al servidor. A continuación se muestra un ejemplo de código simplificado para enviar una solicitud HTTP:

const http = require('http');

const options = {
    
    
  hostname: 'example.com',
  port: 80,
  path: '/',
  method: 'GET'
};

const req = http.request(options, res => {
    
    
  console.log(`HTTP response status code: ${
      
      res.statusCode}`);
});

req.end();

En el código anterior, utilizamos el httpmódulo Node.js para crear una solicitud HTTP y requestenviarla al servidor a través del método.

5. El servidor procesa la solicitud.

Una vez que el servidor recibe la solicitud HTTP enviada por el navegador, la procesará en consecuencia según el contenido de la solicitud. Este proceso suele incluir operaciones como resolución de rutas y consulta de datos. A continuación se muestra un ejemplo de código simplificado de cómo el servidor maneja las solicitudes:

const http = require('http');

const server = http.createServer((req, res) => {
    
    

  if (req.url === '/') {
    
    

res.writeHead(200, {
    
     'Content-Type': 'text/plain' });

res.end('Hello, World!');

  } else if (req.url === '/about') {
    
    

res.writeHead
(200, {
    
     'Content-Type': 'text/html' });
    res.end('<h1>About Page</h1>');
  } else {
    
    
    res.writeHead(404, {
    
     'Content-Type': 'text/plain' });
    res.end('Page not found');
  }
});

server.listen(80, () => {
    
    
  console.log('Server running at http://localhost:80/');
});

En el código anterior, httpcreamos un servidor HTTP simple usando módulos Node.js. Dependiendo de la ruta URL solicitada, el servidor devolverá un contenido de respuesta diferente.

6. Recibir datos de respuesta

Cuando el servidor procesa la solicitud y genera una respuesta, el navegador recibe los datos de la respuesta. Este proceso ocurre dentro del navegador y no tenemos acceso directo a su código. El navegador almacenará los datos de respuesta en el caché y los preparará para su posterior análisis y representación.

7. Analizar HTML

Una vez que el navegador recibe los datos de respuesta, analiza el HTML y crea un árbol DOM. Este proceso implica identificar etiquetas HTML, atributos, texto, etc. y convertirlos en estructuras de datos manipulables. A continuación se muestra un ejemplo de código de análisis HTML simplificado:

const parser = new DOMParser();
const htmlString = '<html><head><title>Hello, World!</title></head><body><h1>Welcome</h1></body></html>';
const doc = parser.parseFromString(htmlString, 'text/html');

console.log(doc.title); // Output: "Hello, World!"
console.log(doc.body.innerHTML); // Output: "<h1>Welcome</h1>"

En el código anterior, utilizamos DOMParser de JavaScript para analizar cadenas HTML y obtener la información requerida manipulando el árbol DOM analizado.

8. Construir árbol DOM

Después de que el navegador analice el HTML, creará un árbol DOM basado en la relación jerárquica entre etiquetas. Cada elemento HTML se convertirá en un nodo DOM y formará una jerarquía de nodos padre-hijo de acuerdo con su relación anidada en HTML. Aquí hay un ejemplo simplificado de construcción de árbol DOM:

const htmlString = '<html><head><title>Hello, World!</title></head><body><h1>Welcome</h1></body></html>';
const doc = new DOMParser().parseFromString(htmlString, 'text/html');

console.log(doc.documentElement); // Output: HTML元素节点
console.log(doc.documentElement.childNodes.length); // Output: 2,包含<head>和<body>
console.log(doc.documentElement.childNodes[1].childNodes[0]); // Output: <h1>Welcome</h1>

En el código anterior, usamos DOMParser para analizar la cadena HTML y obtener la información del nodo del árbol DOM a través del acceso documentElementy los atributos.childNodes

9. Renderizar la página

Una vez construido el árbol DOM, el navegador representará la página según la estructura y la información de estilo del árbol DOM. Este proceso incluye cálculo de diseño, dibujo de elementos, carga de recursos externos y otras operaciones, y finalmente muestra la página al usuario. Debido a que el proceso de renderizado del navegador es muy complejo, no podemos operar directamente su motor de renderizado. Sin embargo, podemos utilizar herramientas de depuración para observar la representación de la página.

10. Interacción del usuario y efectos dinámicos.

Una vez completada la representación de la página, los usuarios pueden interactuar con la página y disfrutar de ricos efectos dinámicos. Esto incluye acciones como hacer clic en enlaces, enviar formularios, activar eventos, etc. JavaScript juega un papel importante aquí, puede escuchar las operaciones del usuario y actualizar el contenido de la página o ejecutar la lógica correspondiente en consecuencia.

11. Optimización del rendimiento

Para brindar una mejor experiencia de usuario, debemos centrarnos en la optimización del rendimiento. Esto incluye estrategias como reducir la cantidad de solicitudes de red, comprimir archivos de recursos y usar caché. Al mismo tiempo, optimizar la forma en que se escriben JavaScript y CSS también puede mejorar la velocidad de carga y la capacidad de respuesta de la página.

Supongo que te gusta

Origin blog.csdn.net/weixin_42373241/article/details/132596011
Recomendado
Clasificación