Обнаружение, когда Javascript работает плохо
Я работаю над webapp в jquery, который на старых машинах или машинах без особых ресурсов может плохо работать. Чтобы обойти это, я хотел бы сделать ухудшенную версию, которая отключает некоторые функции, особенно те, которые полагаются на большие изображения.
Как узнать, плохо ли работает приложение на компьютере пользователя в jquery или javascript вообще? Мне просто нужен способ вызвать функцию, которая приведет к ухудшению качества приложения. (особенно, когда пользователь может работать в системной памяти на низком уровне)
Единственный способ, который я могу придумать, - это ручное вмешательство пользователя, но опция добавит беспорядок для пользователей, которые не нуждаются в нем, и пользователи, которые действительно нуждаются в этом, могут не заметить его.
Спасибо!
Ответы
Ответ 1
Невозможно сказать, прежде чем ваш javascript запустится. Вы могли бы разбросать некоторые объекты Date Date, например:
var timeTaken;
var start = +new Date(); // cast right now to a number
for (i = 0; i < 1000000000; i++) // Some seriously intensive loop
{
// ...
}
timeTaken = (+new Date()) - start; // calculate the total time taken
if (timeTaken > 500) // if time taken is longer than 500ms
switchToBasic();
Вы должны иметь в виду, что есть другие вещи, которые могут повлиять на производительность браузера. Если пользователь уже выполнял некоторые интенсивные операции с ЦП, это может привести к тому, что их машина переключится на базовый режим, даже если у них достаточно работоспособный компьютер.
Ответ 2
Если вам действительно нужно быть уверенным, что он работает на компьютерах с низким уровнем доступа (и у них нет старых компьютеров), почему бы не попробовать использовать виртуальную машину, такую как VirtualBox или подобное. Запустив os внутри виртуального бокса, он может активировать его сам, замедляя его, тем самым моделируя более медленное оборудование. Я уверен, что большинство виртуальных машин позволяют вам настроить, насколько быстро виртуальный процессор...
Что касается автоматического обнаружения, когда клиент является медленным компьютером, я не уверен, что вы можете надежно обнаружить это, не добавляя тестов, которые еще больше замедляют работу машины.
Я предлагаю вам начать с создания ссылки где-нибудь, которая позволяет пользователю переключать "медленный компьютерный режим". Таким образом, пациенты с медленными компьютерами могут сидеть и ждать много, чтобы получить причудливые функции, если они захотят, или они могут отключить их, если они нетерпеливы. Это намного проще реализовать, и вы можете обнаружить, что тестеры/пользователи на самом деле удовлетворены этим решением...:)
Если вы решите сделать некоторое автоопределение, пожалуйста, также ручное переопределение, это действительно раздражает, когда подаются данные с заглушенными данными, потому что автоопределение не удалось, без возможности изменить его.
Ответ 3
Не могли бы вы просто закодировать функцию javascript, которая запускает контролируемый тест, определяя результат, а затем использовать это как основу для унижения сайта?
Возможно, меньшая версия одного из тестов из SunSpider, например
Ответ 4
Как и другие, скажите, управляйте контролируемыми вычислениями и измерьте, сколько времени они берут. Но вместо того, чтобы делать это только один раз, выполните ряд коротких тестов. Если это случается даже один раз из десяти, что вы получаете быстрый результат, вы знаете, что у вас есть быстрая машина.
Быстрая машина, возможно, была затоплена другими задачами, но медленная машина не может внезапно быстро наступить.
В зависимости от вашего приложения вы также можете добавлять подсказки пользователю, где он может найти более быстрый браузер. Браузеры с JIT-компиляцией Javascript значительно быстрее.
Ответ 5
Вы уже сделали все, чтобы сделать приложение быстрее?
Например, вы можете запустить приложение через Firebug профилировщик и изучить производительность всей системы, используя YSlow.
Ответ 6
Gmail показывает панель загрузки с ссылкой "переключиться на HTML-только". Вы могли бы попробовать что-то в этом направлении. (Кроме того, если загрузка занимает много времени, ссылка "переключиться на HTML-код" становится более заметной. Она появляется до середины экрана.)
Ответ 7
Вы можете установить таймер, чтобы отобразить диалоговое окно, которое позволяет пользователю перейти в базовый режим. showSlowDialog не останавливает процесс медленной операции, поскольку он работает в другом потоке (работает одновременно).
function showSlowDialog() {
if(confirm("switch to slow?")) {
switchToSlow();
}
}
var timer = setTimeout("showSlowDialog()", 5000); // show dialog in 5 seconds
SomeSlowishOperationThatMayOrMayNotTakeSomeTime(); // do long operation
clearTimeout(timer); // clear timer.