Утилита пропускной способности с использованием JavaScript
Есть ли какая-либо утилита для измерения пропускной способности от моего сервера до клиента или любого стандартного APIS. Нужно это для веб-приложения
3 ответа
Не знаю ни одной утилиты или стандартного API, нет, но вы можете сделать это, разместив на своем веб-сайте несколько изображений разных размеров, а затем извлекая их, обходя кеш и наблюдая, как долго они загружаются. Эта информация, наряду с размером изображения, дает представление о скорости между двумя конечными точками.
Причиной использования нескольких изображений является то, что вы хотите начать с малого (скажем, 20 Кб), но если соединение быстрое, это даст вам очень неточное число; поэтому, основываясь на том, как быстро загружается это изображение, вам нужно выбрать другое изображение соответствующего размера, чтобы попытаться получить лучшее представление о фактической пропускной способности (в отличие от задержки, устанавливающей соединение и т. д.).
Вы можете сделать это только с прямым JavaScript, добавив img
теги вне страницы с уникальной строкой запроса для обхода кэширования; но поскольку вы пометили свой вопрос "jQuery", вам может оказаться более удобным использовать функцию.ajax (с ее cache: false
настройка) вместо.
Число скорости, с которым вы работаете, является лишь показателем, поскольку могут происходить другие вещи, которые могут испортить ваше время (потоковое видео на другой вкладке - или на другом компьютере, подключенном к тому же интернет-соединению, даже другие вещи, замедляющие выполнение ваш JavaScript, как JS-тяжелая анимация на странице), но он должен быть достаточно хорош, чтобы дать вам представление о том, с чем вы работаете.
// Network connection - https://github.com/daniellmb/downlinkmax
var connectionSpeed = function()
{
// Deal with vendor prefixes
var defaultSpeed = false,
navigator = window.navigator,
connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection || null;
if( ! connection )
return defaultSpeed;
// assume W3C Editor's Draft 09 October 2014
if( 'downlinkMax' in connection )
{
var downlinkMax = connection.downlinkMax;
if( ! downlinkMax )
return defaultSpeed;
if( ! isFinite(downlinkMax) )
return defaultSpeed;
return downlinkMax;
}
// assume W3C Working Draft 29 November 2012
if( 'bandwidth' in connection )
{
var bandwidth = connection.bandwidth;
if( ! bandwidth )
return defaultSpeed;
if( isNaN(speed) )
return defaultSpeed;
// standardize connection.bandwidth value by converting megabytes per second (MB/s) to megabits per second (Mbit/s)
return bandwidth * 8;
}
// assume W3C Working Draft 07 June 2011
switch( connection.type )
{
// convert connection.type value to approximate downlink values
// speed estimate is based on the median downlink value for common devices in megabits per second (Mbit/s)
case 'none':
return 0;
case '2g':
return 0.134;
case 'bluetooth':
case 'cellular':
return 2;
case '3g':
return 8.95;
case '4g':
return 100;
case 'ethernet':
return 550;
case 'wifi':
return 600;
}
return defaultSpeed;
};
Мне нужно что-то подобное, поэтому я написал https://github.com/beradrian/jsbandwidth, переписать https://code.google.com/p/jsbandwidth/.
Идея состоит в том, чтобы сделать два вызова через Ajax, один для загрузки, а другой для загрузки через POST.
Это должно работать с обоими jQuery.ajax
или угловой $http
,