Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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, ни один из объектов не имеет параметров, только у методов есть, так что уверенно могу объявить единожды, но как всё-таки лучше? заранее спасибо!
Ответить с цитированием
  #2 (permalink)  
Старый 31.03.2016, 20:15
Профессор
Отправить личное сообщение для Tecvid Посмотреть профиль Найти все сообщения от Tecvid
 
Регистрация: 13.12.2013
Сообщений: 175

Rise,
ну пример у меня штучный продукт) а другие продукты нет, для них не помешала бы фабрика)
Ответить с цитированием
  #3 (permalink)  
Старый 31.03.2016, 20:32
Профессор
Отправить личное сообщение для Tecvid Посмотреть профиль Найти все сообщения от Tecvid
 
Регистрация: 13.12.2013
Сообщений: 175

Rise,
вы кажется меня не так поняли (ну или я вас не понял), вызвать приходится не один раз, но я не про методы, а про сам класс, то есть new в принципе могу один раз использовать, но так лучше, или каждый раз вызывать через new
Ответить с цитированием
  #4 (permalink)  
Старый 31.03.2016, 22:48
Профессор
Отправить личное сообщение для Tecvid Посмотреть профиль Найти все сообщения от Tecvid
 
Регистрация: 13.12.2013
Сообщений: 175

Сообщение от Rise
в 5-й строке всегда будет ложь, к тому же если xhr = new XDomainRequest() то это IE8-9, но IE8-9 не поддерживают объекты xhr.upload и FormData, плюс при каждом new проверять излишне.
ясно, спасибо, уберу эту строку, ие8 не нужен, для ие9 думал, но ничего, для него сделаю через айфрейм


Сообщение от Rise Посмотреть сообщение
Tecvid, если "один раз" то новый запрос будет сбрасывать текущий незавершенный запрос.
тут можно конкретнее если не трудно, я не совсем понял, в js эта тема как-то не так как в других языках
Ответить с цитированием
  #5 (permalink)  
Старый 31.03.2016, 23:12
Профессор
Отправить личное сообщение для Tecvid Посмотреть профиль Найти все сообщения от Tecvid
 
Регистрация: 13.12.2013
Сообщений: 175

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

ясно, значит могу и дальше так писать и единожды объявить каждый объект через new и дальше использовать его методы?

насчёт кодировки, сначала был urlencoded, но в этой же статье было написано что для post можно и этот, значения не имеет, и я так поставил чтобы меньше трафика шло
Ответить с цитированием
  #7 (permalink)  
Старый 01.04.2016, 00:06
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 456

Tecvid,
// можно
function Constructor() {
   this.property = 'property';
}
Constructor.prototype.method1 = function(){};
Constructor.prototype.method2 = function(){};

var object = new Constructor();

// а можно сразу объект присвоить
var object = {
    property: 'property',
    method1: function(){},
    method2: function(){}
};

Последний раз редактировалось Rise, 01.04.2016 в 00:09.
Ответить с цитированием
  #8 (permalink)  
Старый 01.04.2016, 00:10
Профессор
Отправить личное сообщение для Tecvid Посмотреть профиль Найти все сообщения от Tecvid
 
Регистрация: 13.12.2013
Сообщений: 175

а какой вариант лучше? как с точки зрения архитектуры, так и с точки зрения производительности
Ответить с цитированием
  #9 (permalink)  
Старый 01.04.2016, 00:22
Профессор
Отправить личное сообщение для Tecvid Посмотреть профиль Найти все сообщения от Tecvid
 
Регистрация: 13.12.2013
Сообщений: 175

ясно, спасибо, просто мне показалось что так будет не очень-то правильно для объектов с кучей методов, но похожже это не так
Ответить с цитированием
  #10 (permalink)  
Старый 01.04.2016, 00:37
Профессор
Отправить личное сообщение для Tecvid Посмотреть профиль Найти все сообщения от Tecvid
 
Регистрация: 13.12.2013
Сообщений: 175

Rise,
аа ясно, и такие имеются, например есть Audio и Video, у них есть как свои методы, так и общие, но хоть и общие, всё же какие-то различия есть, потому у них есть общий родитель Media с общими методами, надеюсь на верном пути
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ООП в прототипном стиле Moloch Элементы интерфейса 4 23.07.2015 18:46
Книжко по ООП krasovsky Учебные материалы 2 03.04.2013 12:50
Помогите с ооп Zim_one Общие вопросы Javascript 8 18.11.2012 00:11
ООП в javascript iostream21 Общие вопросы Javascript 11 12.07.2012 00:16
Есть ли смысл использовать ООП. Duda.Ml1986@gmail.com Оффтопик 18 18.02.2012 21:47