Как я могу создать страницу JavaScript, которая будет определять скорость интернета пользователя и отображать ее на странице? Что-то вроде «ваша скорость интернета Кб / с » .
javascript
download-speed
Шарон Хаим Пур
источник
источник
Ответы:
В некоторой степени это возможно, но не совсем точно, идея заключается в том, чтобы загрузить изображение с известным размером файла, а затем по его
onload
событию измерить, сколько времени прошло, пока не сработало это событие, и разделить это время на размер файла изображения.Пример можно найти здесь: рассчитать скорость с помощью JavaScript
Тестовый пример применения исправления, предложенного там:
Быстрое сравнение с «настоящей» услугой тестирования скорости показало небольшую разницу в 0,12 Мбит / с при использовании большой картинки.
Чтобы обеспечить целостность теста, вы можете запустить код с включенным регулированием инструмента Chrome dev и посмотреть, соответствует ли результат ограничениям. (кредит переходит к пользователю 284130 :))
Важные вещи, которые нужно иметь в виду:
Используемое изображение должно быть правильно оптимизировано и сжато. Если это не так, то сжатие по умолчанию для подключений веб-сервером может показывать скорость, превышающую фактическую. Другой вариант - использовать несжимаемый формат файла, например, jpg. (спасибо Rauli Rajande за указание на это и Fluxine за напоминание )
Описанный выше механизм блокировки кэша может не работать с некоторыми серверами CDN, которые можно настроить так, чтобы они игнорировали параметры строки запроса, следовательно, лучше настраивать заголовки управления кэшем на самом изображении. (спасибо orcaman за указание на это ) )
источник
Ну, это так , 2017 года вы теперь Network Information API (хотя и с ограниченной поддержкой различных браузеров , как сейчас) , чтобы получить какое - то оценку информации о скорости нисходящей линии:
Это эффективная оценка пропускной способности в Мбит / с. Браузер делает эту оценку исходя из недавно наблюдаемой пропускной способности уровня приложения по недавно активным соединениям. Само собой разумеется, что наибольшим преимуществом этого подхода является то, что вам не нужно загружать контент только для расчета пропускной способности / скорости.
Вы можете посмотреть на это и несколько других связанных атрибутов здесь
Из-за ограниченной поддержки и различных реализаций в браузерах (по состоянию на ноябрь 2017 г.), настоятельно рекомендую прочитать это подробно
источник
Как я обрисовал в общих чертах в этом другом ответе здесь, на StackOverflow , вы можете сделать это, синхронизируя загрузку файлов разных размеров (начните с малого, увеличивайте скорость, если кажется, что соединение разрешает это), гарантируя через заголовки кэша и такие, что файл действительно читается с удаленного сервера и не извлекается из кеша. Это не обязательно требует наличия собственного сервера (файлы могут быть с S3 или аналогичного), но вам нужно где-то получить файлы, чтобы проверить скорость соединения.
Тем не менее, тесты пропускной способности на определенный момент времени, как известно, ненадежны, поскольку на них влияют другие элементы, загружаемые в другие окна, скорость вашего сервера, ссылки в пути и т. Д., И т. Д. Но вы можете получить приблизительное представление используя этот вид техники.
источник
iframe
Например, если вы отправляете скрытую форму , вы опрашиваетеiframe
или файл cookie для завершения. Если вы используетеXMLHttpRequest
объект, чтобы сделать сообщение, есть обратный вызов для завершения.Мне нужен был быстрый способ определить, была ли скорость соединения с пользователем достаточно высокой, чтобы включить / отключить некоторые функции на сайте, над которым я работаю, я сделал этот небольшой скрипт, который усредняет время, необходимое для загрузки одного (маленького) изображения в В моих тестах он работал довольно точно, например, он мог четко различать 3G или Wi-Fi, возможно, кто-то может сделать более элегантную версию или даже плагин jQuery.
источник
Трюк с изображением классный, но в моих тестах он загружался до того, как некоторые вызовы ajax я хотел завершить.
Правильное решение в 2017 году - использовать работника ( http://caniuse.com/#feat=webworkers ).
Рабочий будет выглядеть так:
Файл js, который вызовет Worker:
Код взят из пакета Plone, который я написал:
источник
Для проверки скорости лучше использовать изображения. Но если вам приходится иметь дело с zip-файлами, приведенный ниже код работает.
Это не очень хорошо будет работать с файлами <10 МБ. Вам придется запускать агрегированные результаты при нескольких попытках загрузки.
источник
Мне нужно что-то подобное, поэтому я написал https://github.com/beradrian/jsbandwidth . Это переписать https://code.google.com/p/jsbandwidth/ .
Идея состоит в том, чтобы сделать два вызова через Ajax, один для загрузки, а другой для загрузки через POST.
Это должно работать с обоими
jQuery.ajax
или угловыми$http
.источник
Благодаря ответу Punit S, для определения динамического изменения скорости соединения вы можете использовать следующий код:
источник