доброго времени суток, решил перейти на прототипный стиль, в принципе с написанием проблем нет (пока), но есть вопросы насчёт производительности, начал с объекта Ajax (суть не в этом, вопрос никакого отношения не имеет к ajax), вот написал такое в прототипном стиле:
/* === AJAX === */
function Ajax() {
var xhr = new XMLHttpRequest();
if (!'onload' in xhr)
xhr = new XDomainRequest();
this._xhr = xhr;
}
/** @param {object} options */
Ajax.prototype.request = function(options) {
var xhr = this._xhr;
xhr.open('POST', options.url, true);
xhr.setRequestHeader('X-REQUESTED-WITH', 'XMLHttpRequest');
xhr.setRequestHeader('Content-Type', 'multipart/form-data');
xhr.setRequestHeader('Cache-Control', 'no-cache');
xhr.onreadystatechange = function () {
if (xhr.readyState != 4)
return;
if (xhr.status == 200 && options.success)
options.success(xhr.responseText);
};
xhr.send(options.data || null);
};
/**
* @param {Node} form
* @param {function} success
*/
Ajax.prototype.upload = function(form, success) {
var xhr = this._xhr,
formData = new FormData(form),
indicator = getById('indicator');
xhr.upload.onprogress = function (e) {
indicator.style.width = Math.round(e.loaded / e.total * 100) + '%';
};
xhr.onload = xhr.onerror = function () {
if (xhr.readyState != 4)
return;
if (xhr.status == 200)
success(xhr.responseText);
};
xhr.open('POST', '/upload/', true);
xhr.setRequestHeader('X-FILE-NAME', 'attach');
xhr.setRequestHeader('Content-Type', 'multipart/form-data');
xhr.setRequestHeader('Cache-Control', 'no-cache');
xhr.send(formData);
};
ajax = new Ajax();
/* === AJAX END === */
и каждый раз когда надо буду обращаться через ajax.request или ajax.upload, это всё работает, НО, как насчёт производительности? мне кажется что объект постоянно будет висеть в памяти и может даже утечка образоваться, планирую далее все объекты таким образом сделать, но сначала хотел бы уточнит стоит ли?
меня больше смущает то, что лучше: один раз вызвать ajax = new Ajax() или каждый раз объявлять через new, ни один из объектов не имеет параметров, только у методов есть, так что уверенно могу объявить единожды, но как всё-таки лучше? заранее спасибо!