Найти в Дзене
Сделай игру

Эмуляция роста плесени

Сама идея эмуляции роста плесени была обоснована в одном из предыдущих постов: прокачать навык работы с Rust и проверить производительность.

Если коротко, то это работает так: в пространстве хаотически (каждый раз направление меняется) движется огромное количество точек (на примере - 500 на 500 точек), а в центре одна - опорная. Каждая точка, которая оказывается рядом с опорной - перестаёт двигаться и становится также опорной. Цикл повторяется до тех пор, пока все точки не станут опорными.

Если понаблюдать картину - то можно заметить древовидную структуру в формируемой "плесени".

Эмуляция роста при помощи Rust
Эмуляция роста при помощи Rust
Эмуляция при помощи JS
Эмуляция при помощи JS

Забегая вперёд, скажу - прироста производительности я не заметил. Вообще. FPS был примерно одинаковый и для rust-версии и для JS-версии. Однако, больше всего меня поразил Firefox - он обогнал по производительности Chrome. Примерно в 2 раза. При этом, Chrome обещал до 4.8 FPS, но на практике вызывал функцию перерисовки картинки лишь 3 раза в секунду, в то время как Firefox - больше 5.

Также, по-разному (что удивительно, ведь используется один и тот же генератор случайных значений) идёт заполнение поля. По какой-то причине JS-версия чаще начинает заполнять правый нижний угол, в то время как rust-версия действует примерно равномерно во все стороны.

Выводы:

  1. JS-компиляторы действительно хороши;
  2. Отказываться от Rust в связи с пунктом 1 торопиться не буду (интерес остаётся);
  3. Думаю, если использовать webgl вместо 2d - количество кадров может вырасти;
  4. Если интересно посмотреть, что получилось - милости прошу сюда (иногда rust-версия не выдаёт ошибку и рост не происходит; в этом случае достаточно просто перезагрузить страницу).

Исходники тут.