Показать сообщение отдельно
  #1 (permalink)  
Старый 31.03.2016, 19:38
Профессор
Отправить личное сообщение для Tecvid Посмотреть профиль Найти все сообщения от Tecvid
 
Регистрация: 13.12.2013
Сообщений: 175

ООП в прототипном стиле
доброго времени суток, решил перейти на прототипный стиль, в принципе с написанием проблем нет (пока), но есть вопросы насчёт производительности, начал с объекта 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, ни один из объектов не имеет параметров, только у методов есть, так что уверенно могу объявить единожды, но как всё-таки лучше? заранее спасибо!
Ответить с цитированием