
Сегодня хочу получить полноценный dbmonster - с бегущими циферками по экрану. До текущего момента я генерировал экраны в цикле, не передавая управление браузеру, и это надо исправить. Для этого мне надо по-честному воткнуться в message loop. Замечательный emscripten все сделал, пользую emscripten_set_main_loop
.
Итак, все оказалось очень просто:
proc loop() {.cdecl.} =
patch.clear()
let data = getData()
if i mod 2 == 1:
b.clear()
data.render(b)
patch.diff(b.current, a.current)
else:
a.clear()
data.render(a)
patch.diff(a.current, b.current)
patch.done()
JSrender(patch.data.head)
inc i
emscripten_set_main_loop(loop, 0, 0)
Safari: 18-19 FPS. В разы медленнее inferno. Через некоторое время падает с out of memory - не мудрено, я же отключил GC. Для начала попробую как то врубить GC: безопасно это только в main loop, и добиться стабильности:
GC_enable()
let x = newString(0)
GC_disable()
17-18 FPS. Медленнее, чем большинство фреймворков. В Chrome вообще пиздец: 9-10 FPS. Утешаю себя тем, что я только начал и дело не в скорости, а в первую очередь в продуктивности и нежелании писать на JavaScript. Пока по всем параметрам я проигрываю.
Посмотреть на Монстра
Посмотреть на монстра в деле можно здесь: https://platoff.github.io/dbmonster.
Код под тегом day-10
https://github.com/platoff/faxma/tree/day-10.