Javasript подвисает в Firefox

Набор тестов выполняется на chrome и firefox.
Выполнение тестов занимало примерно одинаковое время в обоих браузерах. Примерно по 3 часа.

Тесты выполняются последовательно. (Можно запустить и параллельно но проблема в конткретных тестах)
Есть тесты где выполняется много js кода из webdriver (JavascriptExecutor) в таки тестах firefox начинает медленно работать. К примеру сейчас тесты в chrome выполнятся 4 часа в firefox 16 часов.
На веб сайте используется сторонняя библиотека (dhtmlx) у нее есть Js API поэтому использую javascript. webDriver.findElement(By… не подойдет.

Поведение firefox: выполняется 50 - 100 javscript запросов быстро.
следующий запрос может выполняться 10 - 50 секунд. потом опять 50 -100 запросов быстро и т.д.
в chrome такой проблемы нету.

Думаю проблема в конфигурации firefox. about:config
проблема наверное в памяти и сборщике мусора. зависания происходят с периодичностью.
могут через 30 секунд могут через минуту.

ты просто выговориться хотел или у тебя вопрос есть? Сформулируй почетче, может кто и поможет. Пока какой-то поток сознания…

собственно вопрос. кто нибудь с таким сталкивался? как заставить firefox выполнять javascript без подвисаний?

Профилировать Javascript пробовал? Нашёл узкое место? Можешь его показать нам? Пробовал его отдельно погонять в чистом Firefox и сравнивать с чистым Chrome?

1 лайк

Без диагностики тут никак. Возможно, эта проблема спровоцирована утечками памяти (т.е. новый код инжектится настолько часто, что последствия старого не успевают очистится).

Для выяснения обстоятельств, нужно собрать дополнительные данные:

1.Вынесите весь механизм инжекта JavaScript в единый метод, например
ExecuteJs(string scriptName, string script)

В этом методе, считайте время выполнения скрипта и сохраните данные в лог.
Добавьте в лог имя скипта (scriptName), порядковый номер запуска и время выполнения.

2.Замеряйте используемую браузером память до и после запуска скрипта.

Проблемы могут быть спровоцированы как багами движка Firefox, так и неоптимальным кодом (который может входить в длинный цикл или случайно захватывать сумарно большой участок памяти)

Временное решение – перезапуск браузера после n-го количества тестов.

1 лайк

Браузер перезапускается после каждого теста.
dzhariy
“Возможно, эта проблема спровоцирована утечками памяти (т.е. новый код инжектится настолько часто, что последствия старого не успевают очистится).”

Firefox не занимает более 300MB. Смотрю в направлении увеличения памяти для firefox.
Если проблему можно решить увеличением памяти до 600 - 900MB то это будет самый оптимальный вариант в
соотношение цена/время решение задачи

Решил данную проблему путем уменьшения количества javascript запросов из selenium. собираю необходимые данные в массив и возвращаю все сразу вместо отдельных запросов. кол-во javascript запросов из selenum сократилось в 50 -100 раз. (задача была в получении данных из таблицы. раньше я возвращал значение каждой ячейки отдельно, теперь возвращаю массив значений сразу для всей колонки)
Проблема значит была не в firefox а именно в драйвере.

3 лайка