Тестовое задание — реализовать The Game of Life на произвольном поле. Условие: Vanilla JS + CSS3 + HTML5, без использования сборщиков и библиотек.
Деплой: game-of-life-faciledictu.surge.sh
-
Архитектура построена по приципу MVC, состояние приложения реализовано с использованием обертки Proxy. Такой подход предполагает, что View может быть подписан на обновления состояния, чтобы минимизировать ручной вызов рендера из Controller и еще больше отделить слои друг от друга.
-
Реализована возможность запускать несколько независимых экземпляров приложения на одной странице (в том числе благодая использованию селекторов на основе классов, а не id).
-
Алгоритм вычисления соседних ячеек эмулирует поверхность тора.
-
Поле имеет настраиваемые размеры. Масштаб поля может быть также отрегулирован.
-
Первое поколение может быть сгенерировано случайно или с помощью мыши.
-
В интерфейсе отображается время генерации каждого поколения (время отрисовки не включается).
-
Проведена только минимально необходимая оптимизация:
- при генерации нового поколения область просчета сужается до прямоугольника, содержащего живые ячейки;
- использован цикл for вместо функций высшего порядка;
- функция генерации нового поколения вынесена из основного потока приложения в фоновый с помощью Web Workers;
- при рендере происходит отрисовка только живых ячеек.