jsge
Version:
Javascript Game Engine
44 lines (38 loc) • 2.56 kB
Plain Text
Date: July 18 2024
Optimize and make render faster / Сделать оптимизацию и увеличить быстродействие отрисовки
Status: Done
Context:
It seems that the performance in terms of memory consumption is a little slow in Firefox@129.0b6,
wasm version is a little faster, but js is slower,
the problem is using arrays for intermediate results
and storing objects for collision calculations.
Похоже, что производительность в части потребления памяти немного хромает в Firefox@129.0b6,
wasm версия работает чуть быстрее,но js - медленнее,
проблема заключается в использовании массивов для промежуточных результатов
и хранения объектов для расчета столкновений.
Decision:
Optimize the engine to use ArrayBuffer instead of an Array.
1. Rewrite methods in WebGlEngine
2. Rewrite methods and data structures in GameStageData
* array boundaries Array<Array>> -> Float32Array
* ellipse boundaries Array<Array>> -> Float32Array
* point boundaries Array<Array>> -> Float32Array
* add boundaries bPointer, which will points to the last empty cell
* add ePointer
* add pPointer
3. Max bufferArray sizes should be precalculated as (layer non empty cells * 12)
4. Rewrite the collision detector to work with Float32Array
Оптимизировать движок и писать данные в буфер, вместо массива.
1. Переписать методы в WebGlEngine
2. Переписать методы и структуры данных в GameStageData
* массив boundaries -> Float32Array
* добавить указатель boundaries bPointer,
он должен указывать на последний пустой слот в буфере
* ellipse boundaries Array<Array>> -> Float32Array
* point boundaries Array<Array>> -> Float32Array
* добавить ePointer
* добавить bPointer
3. Максимальный размер буферов должны высчитываться по формуле (количество непустых ячеек * 12)
4. Переделать работу детектора коллизий для работы с Float32Array
Impact:
No impact.