Это отличный вопрос. Я не сталкивался с какими-либо методами оценки скорости клиента с помощью браузера. У меня есть идея, хотя; Я не думал об этом больше пары минут, но, надеюсь, это даст вам некоторые идеи. Также, пожалуйста, прости мое многословие:
Во-первых, есть две вещи, которые необходимо учитывать при работе с клиент-сервером: пропускная способность и задержка. Как правило, мобильный клиент будет иметь низкую пропускную способность (и, следовательно, низкую пропускную способность) по сравнению с настольным клиентом. Кроме того, соединение мобильного клиента может быть более подвержено ошибкам и, следовательно, иметь большую задержку. Однако, по моему ограниченному опыту, высокая задержка не означает низкую пропускную способность. И наоборот, низкая задержка не означает высокую пропускную способность.
Таким образом, вам может необходимо провести различие между задержкой и пропускной способностью. Предположим, что клиент отправляет временную метку (назовем ее «A») с каждым HTTP-запросом, а сервер просто возвращает его обратно. Затем клиент может вычесть эту возвращенную метку времени из ее текущего времени, чтобы оценить, сколько времени потребовалось для выполнения запроса. Это время включает в себя почти все, включая задержку в сети и время, необходимое серверу для полного получения вашего запроса.
Теперь предположим, что сервер отправляет обратно метку времени «A» сначала в заголовках ответа перед отправкой всего тела ответа. Также предположим, что вы можете постепенно читать ответ сервера (например, неблокирующий ввод-вывод. Для этого есть множество способов.) Это означает, что вы можете получить отраженную временную метку перед чтением ответа сервера. На этом этапе клиентское время «B» минус отметка времени запроса «A» является приблизительным значением вашей задержки. Сохраните это вместе с временем клиента "B".
Как только вы закончили читать ответ, количество данных в теле ответа, разделенное на время нового клиента "C" минус предыдущее время клиента "B", является приблизительным значением вашей пропускной способности. Например, предположим, что C - B = 100 мс, и вы прочитали 100 КБ данных, тогда ваша пропускная способность равна 10 КБ / с.
Еще раз, мобильные клиентские соединения подвержены ошибкам и имеют тенденцию к изменению силы с течением времени. Таким образом, вы, вероятно, не хотите проверять пропускную способность один раз. Фактически, вы также можете измерить пропускную способность каждого ответа и сохранить скользящее среднее пропускной способности клиента. Это снизит вероятность того, что необычно плохая пропускная способность по одному запросу приведет к снижению качества клиента или наоборот.
Если этот метод работает, то все, что вам нужно сделать, это решить, какова политика для определения того, какой контент получает клиент. Например, вы могли бы начать в режиме «низкого качества», а затем, если клиент имеет достаточно хорошую пропускную способность в течение некоторого периода времени, затем обновить их до контента высокого качества. Затем, если их пропускная способность снизится, понизьте их до низкого качества.
РЕДАКТИРОВАТЬ: уточнил некоторые вещи и добавил пример пропускной способности.