2010-12-28 2 views
7

есть ли утилита для измерения пропускной способности от моего сервера к клиенту или любой стандартный APIS.Need этого для веб-приложенияBandwidth утилита с помощью JavaScript

+0

Он действительно существует. Проверьте это: http://speedof.me/api.html – advncd

ответ

16

Не знаю, какой-либо утилиты или стандартного API, нет, но вы можете сделайте это, создав несколько изображений различных размеров на своем веб-сайте, а затем извлеките их в обход кеша и посмотрите, сколько времени потребуется для их загрузки. Эта информация, наряду с размером изображения, дает вам указание скорости между двумя конечными точками.

Причина использования нескольких изображений заключается в том, что вы захотите начать с малого (скажем, 20k), но если соединение будет быстрым, что даст вам очень неточное число; поэтому, основываясь на том, как быстро загрузится этот образ, вы захотите выбрать другое изображение соответствующего размера, чтобы лучше понять фактическую пропускную способность (в отличие от задержки, создающей соединение и т. д.).

Вы можете сделать это прямо с помощью JavaScript, добавив img теги за пределами страницы с уникальной строкой запроса для обхода кеширования; но поскольку вы отметили свой вопрос «jQuery», вам может быть удобнее использовать the .ajax function (с его настройкой cache: false).

Номер скорости, с которым вы столкнулись, является лишь показателем, поскольку могут произойти другие вещи, которые могут испортить ваше время (потоковое видео на другой вкладке   — или на другом компьютере, подключенном к тому же интернет-соединению, даже другие вещи замедляя выполнение вашего JavaScript, например JS-тяжелую анимацию на странице), но он должен быть достаточно хорош, чтобы дать вам представление о том, с чем вы работаете.

+0

Постепенно измеряя изображения разного размера? Хм, интересно ... это должно устранить некоторую неопределенность. – Piskvor

+0

@Piskvor: Да. Я имею в виду, что это всегда будет просто указание *, а не точная цифра, но ... :-) –

+0

вы бы предложили такой же подход сейчас, в 2016 году. 6 лет спустя: D я хочу иметь скорость в субдомене моего сайта, что бы вы предложили сейчас. –

0

Мне было нужно что-то подобное, поэтому я написал https://github.com/beradrian/jsbandwidth, переписку https://code.google.com/p/jsbandwidth/.

Идея состоит в том, чтобы сделать два вызова через Ajax, один для загрузки, а другой - через POST.

Он должен работать как с jQuery.ajax, так и с угловым $http.

1
// 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; 
};