Я работаю над проектом GWT, где мы используем FlexTable для отображения некоторых данных.Я знаю, что мы, вероятно, должны использовать CellTable , поскольку он имеет лучшую производительность, но FlexTable легче стилизовать (стилизовать определенные ячейки) и облегчает обновление определенной ячейки.
Для получения обновленийдля таблицы мы используем WebSockets.Проблема, с которой мы сталкиваемся сейчас, заключается в высокой загрузке процессора, когда через WebSockets происходит более 100 обновлений в секунду.Каждое сообщение от соединения WebSocket содержит обновления для нескольких ячеек в таблице.Таким образом, на практике в FlexTable должно отображаться более 100 обновлений в секунду.Загрузка процессора на моем 3GHz i5 с 4 ГБ оперативной памяти составляет около 50%.Если я отключу фактическую визуализацию данных (закомментируйте вызовы метода setText ()), тогда загрузка процессора снизится до 5-10%.Так что я знаю, что узкие места - это обновления DOM, а не другие части кода.
Было бы лучше
- использовать Grid вместо
- переключиться на CellTable(но как тогда выполнять обновления отдельных ячеек)?
- использовать JS / JSNI для работы с DOM вместо FlexTable setText ()
Существуют ли более эффективные способы реализации таблиц и повышения производительности?
Я пытался гуглить, если у кого-то были похожие проблемы с FlexTable, но нашел только общее мнение, что он просто медленный, ничего конкретного.У нас есть прототип приложения, выполненный исключительно на JavaScript, и при тех же 100 обновлениях в секунду загрузка процессора составляет около 15%
Обновление
Эффект отбрасывания css, который мы использовали для обозначения изменения в ячейкезначение уменьшило загрузку процессора на ~ 10%.Так что, похоже, DOM - не единственная проблема.