Как рассчитать размер файла и скорость загрузки
Формула расчёта времени загрузки файла, преобразование единиц хранения (МБ, ГБ) для оптимизации сети
Перед запуском очередного релиза вы отправляете коллегам ссылку на 450 МБ архив с билдом. Через пять минут в чате появляется вопрос: «Сколько ещё ждать?». Вы открываете калькулятор, вспоминаете формулу преобразования мегабитов в мегабайты и понимаете — проще было сразу посчитать. Разбираемся, как быстро оценить время загрузки и выбрать оптимальный формат для передачи данных.
Базовые единицы измерения
Первая путаница начинается с того, что скорость интернета измеряют в мегабитах в секунду (Мбит/с), а размер файлов — в мегабайтах (МБ). Один байт = 8 битов, поэтому для преобразования делим скорость на 8.
Пример: провайдер обещает 100 Мбит/с. Реальная скорость скачивания = 100 / 8 = 12,5 МБ/с. Именно это число вы увидите в браузере или торрент-клиенте.
Основные единицы хранения:
- 1 КБ (килобайт) = 1024 байта
- 1 МБ (мегабайт) = 1024 КБ
- 1 ГБ (гигабайт) = 1024 МБ
- 1 ТБ (терабайт) = 1024 ГБ
В реальности производители жёстких дисков часто используют десятичную систему (1 ГБ = 1000 МБ), поэтому заявленный терабайтный диск в системе показывает 931 ГБ.
Формула расчёта времени загрузки
Базовая формула выглядит так:
Время (сек) = Размер файла (МБ) / Скорость (МБ/с)
Пошаговый алгоритм:
- Узнайте размер файла в мегабайтах
- Измерьте реальную скорость загрузки (не ту, что обещал провайдер)
- Разделите размер на скорость
- Добавьте 10-15% на накладные расходы протокола
Практический пример:
const fileSize = 450; // МБ
const connectionSpeed = 100; // Мбит/с
const realSpeed = connectionSpeed / 8; // 12.5 МБ/с
const timeSeconds = fileSize / realSpeed; // 36 секунд
const timeWithOverhead = timeSeconds * 1.1; // 39.6 секунд
Для файла 450 МБ при скорости 100 Мбит/с получаем около 40 секунд. Если коллега жалуется через пять минут — проблема точно не в размере файла.
Факторы, влияющие на скорость
Реальная скорость загрузки почти никогда не совпадает с расчётной. Вот основные причины:
Ограничения сервера. Хостинг может лимитировать отдачу до 10 МБ/с даже при гигабитном канале пользователя. CDN-сети решают проблему, но стоят денег.
Перегрузка сети. В офисе 50 человек одновременно открывают YouTube — ваш файл загружается со скоростью улитки. В домашней сети роутер за $30 не справляется с торрентами соседа.
Протокол передачи. HTTP/1.1 открывает 6-8 соединений на домен, HTTP/2 мультиплексирует запросы в одно соединение. TCP требует подтверждения каждого пакета, UDP (в QUIC/HTTP3) работает быстрее на нестабильных каналах.
Расстояние до сервера. Пинг до сервера в США из России — 150-200 мс, до европейского — 30-50 мс. Для больших файлов критично при медленных соединениях.
Проверить реальную скорость можно через Speedtest, но лучше измерить на практике — скачайте тестовый файл и засеките время.
Выбор оптимального формата
Размер файла напрямую зависит от формата и степени сжатия. Вот практические сценарии:
Архивы и бэкапы
ZIP — универсальный, но не самый эффективный. 7z с максимальным сжатием уменьшает текстовые файлы на 60-70%, но архивация займёт в 5-10 раз больше времени.
# Быстрое сжатие
zip -1 archive.zip folder/
# Размер: 450 МБ, время: 30 сек
# Максимальное сжатие
7z a -mx=9 archive.7z folder/
# Размер: 180 МБ, время: 4 минуты
Для регулярных бэкапов выбирайте баланс: tar.gz с умеренным сжатием (gzip -6) даёт неплохую компрессию при приемлемой скорости.
Изображения и медиа
JPEG с качеством 85% визуально идентичен 100%, но весит в 3-4 раза меньше. WebP сжимает ещё на 25-35% без потери качества, но старые браузеры его не поддерживают.
Для видео: H.264 — стандарт совместимости, H.265 (HEVC) уменьшает размер вдвое при том же качестве, AV1 ещё эффективнее, но требует мощного железа для кодирования.
Текстовые данные
JSON читабелен, но избыточен. Для API-ответов используйте gzip-компрессию на уровне сервера — экономия 70-80% трафика. MessagePack или Protocol Buffers сжимают данные ещё сильнее за счёт бинарного формата.
// JSON: 1.2 МБ
{"users": [{"id": 1, "name": "Alice"}, ...]}
// То же через gzip: 180 КБ (сжатие 85%)
Оптимизация для веб-приложений
При разработке фронтенда размер бандла напрямую влияет на Time to Interactive. Вот что реально работает:
Code splitting. Разделите приложение на чанки — загружайте только нужные модули. React.lazy, динамические импорты в Webpack.
// Вместо статического импорта
import HeavyComponent from './HeavyComponent';
// Ленивая загрузка
const HeavyComponent = React.lazy(() => import('./HeavyComponent'));
Tree shaking. Удаляет неиспользуемый код при сборке. Lodash целиком весит 70 КБ, lodash/debounce — 2 КБ.
Compression. Настройте Brotli на сервере (сжимает на 15-20% эффективнее gzip). Nginx и Apache поддерживают из коробки.
Кэширование. Service Worker сохраняет статику локально. Повторный визит — мгновенная загрузка без обращения к серверу.
Практические инструменты
Для быстрых расчётов и оптимизации файлов пригодятся специализированные сервисы. Калькулятор размера файла покажет время загрузки при разных скоростях интернета и поможет спланировать доставку больших файлов пользователям. Если работаете с изображениями в base64 для вставки в CSS или HTML, конвертер base64 быстро преобразует файлы и покажет итоговый размер — важно помнить, что base64 увеличивает вес на 33%.
Перед отправкой релиза команде посчитайте реальное время загрузки с учётом среднего интернета пользователей. Архив на 2 ГБ при скорости 10 Мбит/с будет скачиваться почти полчаса — возможно, стоит разбить на части или настроить торрент-раздачу.