2015-06-16 2 views
0

Я создал простой сервер WebSockets, который отправляет крошечный пакет каждые 20 мс только для целей тестирования. Затем я написал простой браузер в чистом WebSocket api, который подключается к серверу и печатает Date.now() каждый раз, когда он получает пакет.Задержки веб-закладок под Firefox

var ws = new WebSocket('ws://localhost:8080'); 
ws.onmessage = function(){ console.log(Date.now()); }; 

Когда я запустил клиент в Google Chrome, задержка между пакетами была согласованной и всегда между 19 и 21 мс. Когда я запустил его под Firefox ... uhh, задержка была между 3 и 114 мс. Что не так с Firefox и как обходной путь? Есть ли какая-то буферизация включена по умолчанию?

Тесты были выполнены на локальном хосте под Linux, версия Firefox - 38,0,5, размер пакета - 4 байта, никакого дополнительного кода не было, поэтому сборщик мусора не был проблемой. Я также запускал оба браузера одновременно, результаты были одинаковыми.

ответ

2

После многих испытаний результат довольно смешной - console.log реализация под Firefox является корнем всего зла. Вызов часто приводит к коротким зависаниям браузера, что заставляет синхронизировать все таймеры и события. При отладке синхронизированных событий в Firefox в настоящее время гораздо лучше хранить журналы в массиве и печатать позже.

Смежные вопросы