Я эксперементировал с typeScript и в порядке эксперемента переписал на нем код из примера выше. Публикую просто для сравнения, дабы мой скорбный труд не пропал совсем даром
Производительность ебстебственно одинаковая.
var getRandomInt=(min:number, max:number)=> Math.floor(Math.random() * (max - min)) + min;
//Класс управляющий поведением колонок
class Column {
frameCount:number;//счетчик пропущенных кадров (тип число)
length:number; //Длина анимации (тип число)
speed:number; //это значение устанавливается frameCount, если он ниже нуля (тип число)
//конструктор. Прикольно что minSize сразу в this попадает :)
constructor(private minSize:number) {
this.reset();
}
//сбрасывает столбик
public reset() {
this.frameCount = 1;
this.speed = getRandomInt(1, 5);
this.length = getRandomInt(this.minSize, this.minSize + 15);
}
//уменьшает счетчик на единицу
public ReduceThecounter() {
if ( ( this.frameCount-- ) < 0) {
this.frameCount = this.speed;
if ( (this.length--) < 0) this.reset();
}
}
}
//Матрица
class Matrix {
private columns=[];
private matrix=[];
constructor(private elem, private sizeX:number, private sizeY:number){
this.elem=typeof elem == "string" ? document.getElementById(elem) : elem;//не стал мудрить, оставил в стиле JS
for (var x = 0; x < sizeX; x++) {
this.columns.push(new Column(sizeY + 1));
this.matrix.push([]);
for (var y = 0; y < sizeY; y++) {
this.matrix[x][y] = { sym: " " };
}
}
}
//метод обновления
public update () {
var y = this.sizeY,
x = 0,
result = "";
while (y--) {
x = this.sizeX;
while (x--) {
if (y == 0) this.columns[x].ReduceThecounter();
if (this.columns[x].frameCount == 0) {
if (y == 0) {
this.matrix[x][0].sym = (this.columns[x].length > this.sizeY) ? String.fromCharCode(getRandomInt(97, 122)) : " ";
} else {
this.matrix[x][y].sym = this.matrix[x][y - 1].sym;
}
}
result = this.matrix[x][y].sym + result;
}
result = "<br/>" + result;
}
this.elem.innerHTML = result;
}
}
var m = new Matrix('matrix', 82, 17);
+(function f() {
m.update();
setTimeout(f, 1);
})();
//# sourceMappingURL=app.js.map