по поводу тяжелых вычислений при рисовании канвасом
прочел вот очередную новость про WebAssembly Chrome, Firefox и Edge перешли на новый этап тестирования технологии WebAssembly
начну с выводов:
я не удивлюсь если выход в массы этой технологии в связке с “Unity”подобными движками – оставит далеко позади фронтенды построенные на канвасе в плане быстродействия = комфортности работы пользователя.
технологии на самом деле редко становятся киллер фичей ПО. но, бывает. и WebAssembly для задач где только канвасом рисовать – может оказаться именно такой.
уже сейчас для таких задач надо использовать asm.js, и, минимум, морально готовится к выходу WebAssembly
…просто вспомнил некоторые технические подробности геймдева до эпохи 3D акселераторов. и на ум пришла аналогия:
тогда, чтобы нарисовать точку, или линию можно было использовать функции BIOS. и все красиво было в коде. чистая математика.
но видеопамять то организована соооовсем по другому. там нет никаких пикселей по кооридитам. там битовые слоеные пироги, ака наполеон, собираемые в банки памяти. чтобы изменить 1 бит у пикселя, надо вырезать слой по порядковому номеру бита, в нем заменить конкретный бит, и записать весь этот слой обратно в память.
в итоге все толковые игры той поры так и делали – работали с портами видеокарты, и с битовыми плоскостями.
сейчас, насколько знаю по верхам, веб браузеры не предоставляют доступ к их “видеопамяти” в виде рендера. и приходится рисовать только предоставляемым ими “BIOS”. (над которым еще и DOM дерево).
а для WebAssembly будет открыт низкоуровневый доступ к рендеру. и он, рендер браузера, наверняка работает совсем не так, не по координатам пикселя.
это конечно совсем по верхам, не копал технические детали.
но встречал, что народ умудряется вычислять момент запуска рендера, и писать на джс обновления только в моменты когда рендер простаивает! то есть хакерят – и не имея доступ напрямую. а когда им его дадут? куча привычных подходов просто уйдут в архивы айти разработки
как ушла в архивы и работа с битовыми плоскостями VGA (VESA), после появления 3D акселераторов, с шейдерами-шмейдерами, потоковыми процессорами и т.п.
мы сейчас делаем 3Д вид на WebGL на библиотеке Threejs
и параллельно экспериментируем с Unreal Engine 4
и это правильно. быстро глянул в гугл:
циатата из 3D-графика через WebGL и ThreeJS … ThreeJS поддерживает некоторые другие движки, такие как 2D Canvas. В этом примере мы хотим WebGL. Если он не может создать WebGLRenderer, то вернётся обратно к 2D Canvas. Хотя Canvas работает гораздо медленнее(!), это может быть лучше, чем ничего.
то есть я угадал – 2D Canvas это как BIOS в те древние времена когда я побыл немножко в геймдеве
но не угадал с предоставлением “портов”, уже есть возможность – WebGL