Вопрос проверяет знание методов оптимизации сетевых запросов для уменьшения времени ожидания ответа от сервера.
Сетевые задержки возникают из-за времени передачи данных между клиентом и сервером. Для их уменьшения применяются различные техники на разных уровнях стека.
Кэширование позволяет хранить часто запрашиваемые данные ближе к клиенту. Это может быть кэш браузера, серверный кэш (например, Redis) или кэш на уровне CDN. Пример настройки кэширования в Express:
app.get('/data', (req, res) => {
res.set('Cache-Control', 'public, max-age=3600');
res.json({ data: 'cached response' });
});CDN размещает копии статических ресурсов на серверах по всему миру, сокращая физическое расстояние до пользователя. Это особенно эффективно для изображений, CSS, JavaScript и видео.
HTTP/2 позволяет отправлять несколько запросов одновременно по одному соединению, устраняя проблему head-of-line blocking. Это снижает задержки за счет параллельной передачи данных.
Повторное использование TCP-соединений вместо создания нового для каждого запроса уменьшает накладные расходы на установку соединения. Пример в Node.js:
const http = require('http');
const agent = new http.Agent({ keepAlive: true });
http.get({ hostname: 'example.com', agent }, (res) => {
// обработка ответа
});Сжатие данных (gzip, brotli), минификация кода и использование форматов данных с меньшим размером (например, Protocol Buffers вместо JSON) уменьшают объем передаваемой информации.
Применение комбинации кэширования, CDN, HTTP/2 и оптимизации данных позволяет значительно сократить сетевые задержки, что критично для производительности веб-приложений и пользовательского опыта.