Коментарии излишни...
(больше - лучше)
http://jsperf.com/glmatrix-vec2-vs-vec2
Даже без кеша, выийгрывает почти вдвое, с кешем, выйгрывает в 11+ раз.
Я уже не говорю о разнице того как код выглядит...
glMatrix:
Camera_g.prototype.pick = function(point) {
point = vec2.clone(point);
vec2.sub(point, point, this.middle);
// there is no rotate vector methods in glMatrix vec2,
// alternative would be to use matrix for such operation,
// but that would be overkill, and would reduce performance even more
var rotVec = vec2.clone(this.rotation);
vec2.normalize(rotVec, rotVec);
var t = point[0] * rotVec[0] - point[1] * rotVec[1];
point[1] = point[1] * rotVec[0] + point[0] * rotVec[1];
point[0] = t;
vec2.div(point, point, vec2.fromValues(this.zoom, this.zoom));
point[1] *= -1;
vec2.add(point, point, this.position);
return point;
};
Моё решение:
Camera.prototype.pick = function(point) {
return point.clone()
.sub(this.middle)
.rot(this.rotation)
.divS(this.zoom)
.mulXY(1, -1)
.add(this.position)
};
Далее, я использую уже библиотеку не в первом проекте, следственно она доказала свою стабильность и удобство на самом деле реально выше в разы.
Честно сказать это было и до тестов очевидно, если ты заглядывал в то как glMatrix работает и в моё решение, а не задавал бы подобных вопросов.
И ещё факт того что я написал данную либу - позволило мне изучить как на самом деле работает математика каждой функции при работе с 2D векторами, и я считаю это огромный бенефит.