Как замедлить загрузку сайта?
Мне нужно замедлить загрузку страницы таким образом, чтобы она не просто остановилась как это делает sleep($second) , а именно медленная загрузка. То есть, если бы скорость загрузки была несколько КБ.
Как я могу это сделать?
- Вопрос задан более трёх лет назад
- 3017 просмотров
3 комментария
Простой 3 комментария

Дмитрий @Compolomus Куратор тега PHP
Ну если только реализовать свою реализацию буфера, после того как собрали буфер, перед выводом читаем буфер и отдаём порциями по сколько то кб и слипим на секунду, сбрасываем в вывод и так до конца.

Lander @usdglander Куратор тега PHP
А зачем? (Просто для опыта интересно)

Vlad @TRen208 Автор вопроса
Проверить загрузку элеменов и выполнение скрипта.
Решения вопроса 1
Евгений Вольф @Wolfnsex Куратор тега PHP
Если не хочешь быть первым — не вставай в очередь!
Если Вам для отладочных (собственных) целей — в Google Chrome (я думаю и в его производных тоже) есть настройки скорости загрузку/отдачи, можете там выставить любые параметры и тестировать.
Если «глобально» — я думаю это можно попробовать реализовать, например, на уровне Nginx’а.
Если и этого мало — можете попробовать ограничить скорость на уровне сервера, на эту тему так же масса информации, например тут обсуждалось.
Ограничение скорости скачивания файлов средствами PHP
Иногда появляется необходимость ограничивать скорость скачивания файлов пользователями. Причин тому может быть множество (бесплатный и платный режимы, регистрация пользователя и т.д.), однако не всегда есть возможность приобрести сервер или настроить его должным образом. В данном топике предлагаю переложить задачу на плечи чистый PHP.
Функция:
function loadfile ($filename, $speed=false) < // содержимое функции ниже >
$filename — адрес файла, который собираемся отдавать.
$speed — скорость скачивания.
Убираем лимиты и ограничения, запускаем буферизацию вывода:
// лимит времени выполнения set_time_limit(0); // продолжаем выполнятся при отключении пользователя ignore_user_abort(true); // старт буферизации ob_start();
Собираем необходимые данные о файле:
// размер файла $filesize = filesize($filename); // время последнего изменения файла $filetime = gmdate('r', filemtime($filename)); // генерируем Etag $etag = md5($filename."=".$filesize." -")); // с какого байта начать часть $to = (integer)(strtok("-")); // каким байтом закончить // Отдаем заголовки header('HTTP/1.1 206 Partial Content'); header('Content-Range: bytes '.$from.'-'.($to-1).'/'.$filesize); > else < header('HTTP/1.1 200 Ok'); >// В случае, если клиент не передал информацию о первом последнем байте, то присвоим // самостоятельно. if ($to==0) $to = $filesize; if (empty($from)) $from = 0;
Ограничение потоков для одного пользователя:
Для того, чтобы пользователь скачивал файл с необходимой скоростью и не мог обойти ограничение при помощи программ обеспечивающих скачивание в несколько потоков, нам необходимо установить их лимит для одного посетителя. Для этого нам потребуется ввести дополнительную функцию, которая будет проверять наличие уже установленных соединений. В качестве СУБД предлагаю использовать MySQL.
Итак, создаем таблицу. Так и назовем — `file_session`. В данном примере нам необходимо всего одно поле `session_ip` которое будет содержать IP-адрес скачивающего. При наличии необходимого IP в БД отдаем true, в противном случае записываем его и отдаем false.
function is_active_user($clear = false) < global $dbi; // это подключение к БД // проверяем на наличие соединений от пользователя $result = mysql_query ("SELECT `session_ip` FROM `file_session` WHERE `session_ip`='".$_SERVER['REMOTE_ADDR']."' LIMIT 1", $dbi); if (mysql_num_rows($result)) < // если установлено $clear, значит пользователь //разорвал соединение. Удаляем запись. if (!$clear) < return true; >else < mysql_query ("DELETE FROM `file_session` WHERE session_ip='".$_SERVER['REMOTE_ADDR']."' LIMIT 1", $dbi); >> else < // если запись отсутствует, то добавляем mysql_query ("INSERT INTO `file_session` VALUES ('".$_SERVER['REMOTE_ADDR']."')", $dbi); return false; >>
В последствии функцию можно модернизировать, добавив еще и проверку на залогиненность, наличие оплаты и т.д.
Отдаем файл:
// Отдаем заголовки header('ETag: "' . $etag . '"'); header('Accept-Ranges: bytes'); header('Content-Length: ' . ($filesize-$from)); header('Content-Type: application/octet-stream'); header('Last-Modified: ' . gmdate('r', filemtime($filename))); header('Content-Disposition: attachment; filename="' . $filename . '";'); // Проверяем, есть ли у пользователя // активные потоки is_active_user() // и не отключился ли он connection_status(). while(is_active_user() and !connection_status()) < // спим пока у пользователя есть активные потоки sleep(1); >// Открываем файл $f = fopen($filename, 'rb'); // Устанавливаем указатель а нужную позицию fseek($f, $from, SEEK_SET); // Устанавливаем общий объем части и объявляем переменную хранящую скачанный объем $size = $to - $from; $isready = 0; // Начинаем отдачу while(!feof($f) and !connection_status() and ($isready <$size)) < // Если ограничений нет, то считываем по 0.5 Мб и отдаем без задержек. // Установлено ограничение? Считываем и отдаем ровно столько, сколько установлено ограничением и засыпаем на 1 секунду. echo fread($f, !$speed?512000:$speed); // считываем и отдаем flush(); ob_flush(); // очищаем буфер и выводим пользователю if ($speed) sleep(1); // засыпаем $isready += !$speed?512000:$speed; // обновляем счетчик >// Закрываем файл fclose($f); // Удаляем информацию о соединении из БД is_active_user(true);
Вызов функции:
loadfile ("/files/moifilm.avi", 10240); // Скорость указываем в байтах
Итог:
Полный код и рабочий пример скачивания без ограничения и с ограничением в 10 Кб/сек — файл 1 Мб.
P.S. Мой первый хабрапост (:
Как увеличить скорость загрузки любых файлов из интернета: актуально для всех браузеров
Используя нехитрые, но действенные советы, даже большие по объему файлы будут загружаться за минуты, а не часы.

Многие пользователи Chrome и других популярных браузеров определенно не раз замечали, насколько скачивание файлов с интернета может быть долгим процессом. Особенно, если речь идет о гигабайтах данных.
Времени скачивать файлы часами, как правило, нет, так как всегда есть дополнительные задачи, которые нужно выполнить. К счастью, скорость загрузки можно легко увеличить несколькими способами.
Как увеличить скорость загрузки в Chrome, Edge и Opera
Сделать скачивание файлов более быстрым можно используя опцию Parallel downloading, которая находится в скрытых настройках популярных браузеров. Эта функция позволяет скачивать файлы не одним потоком, а разделяя их на несколько потоков.
Чтобы запустить работу функции, нужно ввести в адресную строку комбинацию:
- chrome://flags/#enable-parallel-downloading.
Затем нужно переключить настройку в состояние Enabled и перезапустить браузер.

Как заставить Firefox скачивать файлы быстрее
В случае с Firefox простыми изменениями в настройках не обойтись. Нужно будет скачать дополнительные расширения.
Наиболее надежным и эффективным является Multithreaded Download Manager. После установки достаточно лишь нажать на значок в панели инструментов, щелкнуть плюсик и добавить URL, которых хотите скачать.
Дополнительные утилиты
Если по тем или иным причинам перечисленные выше способы не справляются с проблемой или являются слишком неудобными для использования, всегда можно использовать специальные программы, которые сделают скачивание файлов более быстрым и эффективным. В основном, они ориентированы для закачки больших объемов данных.
Одним из наиболее популярных бесплатных менеджеров для закачки является uGet. Приложение умеет как перехватывать ссылки из браузеров, так и загружать файлы по требованию. При этом не нужно долго возиться с настройкой потоков, здесь это делается в параметрах загрузки.

Для пользователей macOS есть своя бесплатная альтернатива – Progressive Downloader. Количество потоков также можно ввести в настройках, в пункте «Задача». Теперь тяжелые файлы должны качаться куда быстрее.
Читайте также:
![]()
Напомним, недавно в браузере Chrome появился энергосберегающий режим. Он позволяет продлить время работы ноутбука без подзарядки.
К слову, УНИАН в одной из предыдущих заметок рассказывали о «фишках» Microsoft Edge, которые делают его лучше Google Chrome. В их числе удобные вертикальные вкладки, режим эффективности и встроенная защита от утечки паролей.
Вас также могут заинтересовать новости:
- В Google Chrome появилась полезная фича для любителей «миллиона открытых вкладок»
- Как усилить сигнал Wi-Fi у себя дома: 6 простых способов, доступных каждому
- Пора обновляться: Microsoft отправила «на пенсию» популярную версию Windows 10
Есть ли браузер в котором можно поставить ограничение на скорость закачки (upload / исходящий трафик)?
Не слышал про такие, но подозреваю что в большинство браузеров можно подсунуть прокси, который будет делать то что вам нужно.
anonymous
( 24.03.17 13:19:35 MSK )

Я не видел, да и не нужно оно — есть менеджеры загрузок.
panter_dsd ★★★★
( 24.03.17 13:35:33 MSK )

Обычно эти фичи в браузерах реализованы в виде плагина, вот один из них для chrome:https://chrome.google.com/webstore/detail/sabdrop/bapfpoccgpihfmdaigglhnpkklhacmge
Для таких дел все же лучше использовать «Download manager».
mikuhatsune
( 25.03.17 17:58:58 MSK )
Ответ на: комментарий от mikuhatsune 25.03.17 17:58:58 MSK

Кстати в этом плагине есть api.
mikuhatsune
( 25.03.17 18:00:21 MSK )
Ответ на: комментарий от mikuhatsune 25.03.17 18:00:21 MSK
на самом деле меня интересует именно Upload ) а в этом расширении его нет, и что-то оно у меня вообще не заработало, пишет:
Error while connecting to SABnzbd
что за SABnzbd и зачем ему коннектицца куда-то еще я не понимаю)
Мне именно для браузера нужно, потому что мне нужно залогиниться на чужом сайте и залить большой файлик)
Ну вообщем мне особо уже это не нужно, разве что для интереса, я ща trickle использую, он норм работает)
Осталось только найти и как-то заинсталить самый легкий браузер с поддержкой javascript на CentOS ))
AlexLichi
( 26.03.17 11:28:11 MSK ) автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Ограничение скорости: исходящий трафик (2008)
- Форум Ограничение скорости upload (2018)
- Форум Ограничение скорости закачки (2020)
- Форум ограничение скорости трафика (2002)
- Форум Apache: ограничение исходящего трафика (2004)
- Форум скорость входящего, исходящего трафика (2016)
- Форум ограничение скорости закачки на squid’e (2002)
- Форум Как убрать ограничение исходящей скорости (2005)
- Форум ограничение исходящего трафика в iptables (2004)
- Форум Ограничение скорости входящего трафика (2010)