Pull to refresh
50
0
Глеб Арестов @arestov

User

Send message
О каких конкретно, оставшихся за бортом, идеях идет речь?
не быстрые, а эффективные.

задача чтобы и конструктор быстро исполнялся и сразу создавался правильный hidden class для объекта. задачи наследования, задачи получения доступа к неким общим свойствам не стоит
«Prototype Chain всегда будет самым быстрым в JS»
конечно же нет! youtu.be/tCG0aPNvkTs?t=10m39s
всегда быстрей взять свойство непосредственно с объекта, чем с его прототипа

особенно бессмысленно его использовать когда нужно создать сразу правильный hidden class для объектов у которых общий набор полей но значения полей у всех разные

www.youtube.com/watch?v=tCG0aPNvkTs

опять таки: задача сделать констуктор сравнительно эффективный такой же как
 function Point(x, y) {
   this.x = x;
   this.y = y;
}


при условии, что на этапе написания кода нет набора полей (this.x = x;), но он будет и будет ограничен после выполнения некоторого кода
всё таки
var MainArtist = function() {};

_.forEach(artistProps, function(value, key){
    MainArtist[key] = value;
})

это не
var MainArtist = function() {};

_.forEach(artistProps, function(value, key){
    MainArtist.prototype[key] = value;
})


а наследование для задачи не нужно — нужны быстрые конструкторы
var MainArtist = function() {};

_.forEach(artistProps, function(value, key){
    MainArtist[key] = value;
})


а какой смысл в этом коде, если MainArtist[key] и (new MainArtist())[key] не имеют никакой связи?
Оказалось, что Object.create для этой задачи бесполезен

var mes = function(callback) {
  var start = new Date();
  callback();
  console.log('measure', new Date() - start);
};

var OldClass = function() {
  this.track = null;
  this.artist = null;
  this.full_title = null;
  this.url = null;
};

var artistProps = {
  track: { writable: true },
  artist: { writable: true },
  full_title: { writable: true },
  url: { writable: true}
};

mes(function() {
	var items = [];
	for (var i = 0; i < 1000000;i++) {
		items.push(new OldClass());
	}
});

mes(function() {
	var items = [];
	for (var i = 0; i < 1000000;i++) {
		items.push(Object.create(null, artistProps));
	}
});


measure 441
measure 5436
Спасибо за совет, не знал про второй аргумент Object.create. Думаю, это то что нужно для моей задачи, осталось проверить производительность. (а наследование для этой задачи не нужно)
работает офлайн?
Для того чтобы автоматически создавать эффективные констукторы на базе которых будет создана тысяча другая объектов, набор полей которых ограничен (задаётся разработчиком не напрямую, но может быть определён с помощью алгоритма), но для которых крайне неудобно или невозможно написать тело на момент написания кода.

Либо eval. Что не всегда возможно и просто небезопасно

var evaledConstr = function(props) {

    var body = '"use strict";\n';
    for (var i = 0; i < props.length; i++) {
            body += 'this["' + props[i] + '"] = null;\n';
    }
    return new Function(body);
};

var EvaledConstr = evaledConstr(['track', 'artist', 'full_title', 'url']);

new EvaledConstr();


(как вы знаете браузерные движки очень хорошо оптимизируют такой код)
var Contr = function(){
   this.myName = null;
};


Либо извращения с предварительной компиляцией.

Либо оптимизации движком.
Планируются ли оптимизации что бы можно было создавать генерируемые конструкторы, которые не сильно бы уступали в скорости инициализации обычным?

Так что бы инициализация 1000 штук generatedClass1 или generatedClass2 не уступала OldClass

var OldClass = function() {
  this.track = null;
  this.artist = null;
  this.full_title = null;
  this.url = null;
}
new OldClass();


var getSetter = function(prop, callback) {
  return function(obj){
    obj[prop] = null;
    callback(obj);
  };
};

var realDyn = function(array) {
  // на основе списка свойств функция генерирует
  // функцию, которая не использует итерация
  var curSetter = function(){};
  for (var i = array.length - 1; i >= 0; i--) {
    curSetter = getSetter(array[i], curSetter);
  }
  return curSetter;
};


var gen = realDyn(['track', 'artist', 'full_title', 'url']);

var GeneratedClass1 = function(){
  gen(this);
};

new GeneratedClass1();






var make = function(array) {
  return function () {
    for (var i = 0; i < array.length; i++) {
      this[array[i]] = null;
    }
  };
};

var GeneratedClass2 = make(['track', 'artist', 'full_title', 'url']);
new GeneratedClass2();

Заголовок/вывод абсолютно не соответствует исследованию.
Думаю, важно сообщить что у вас идет, кампания по сбору средств на кикстартере
www.kickstarter.com/projects/octodon/octodon
Могут ли в этом конкурсе участвовать приложения, участвовавшие в другом конкурсе tizen? ( получил статус Honorable Mention в developer.tizen.org/ru/contests/tizen-app-challenge/music-video-entertainment-photo-and-font )
Пост от лица компании, в корпоративном блоге. Тем не менее и у художника интересно было бы спросить что он думает о методах работы компании в которой он работает.
Зачем вы свое поделие распространяете крайне навязчивыми средствами?
Зачем вы устанавливаете «службу» которая висит и периодически запускает промо страницу на «Total Domination»?
Почему ваше поделие нельзя удалить стандартными средствами?

В интернете достаточно жалоб на внезапное и навязчивое появление на компьютерах «Total Domination» вы на это будете как-то реагировать?
Купил бы если бы можно было бы печать с ним и на компьютере. Хотел бы программировать.

Почему удобство и скорость это разные вещи? Разве удобство не порождает привычку, что выводит навык на уровень автоматического навыка, что подразумевает скорость? Вместо удобства вы имеете ввиду легкость (но не простоту)?
Если вы говорите о случае, когда вы загружаете структуру (шаблон) страницы отдельно, каждый раз заново, и всё это в приложении где вся логика интерфейса находится на клиентской стороне, то их можно загружать параллельно с данными. Но этом вообще речи не идёт.

Речь идёт о приложениях в которых шаблоны, (структуры страниц) уже загружены к моменту когда пользователь начинает взаимодействовать с приложением. Эти принципы касаются и полноценных веб приложений и нативных приложений.

Посмотрите сами seesu.me/o, можете попробовать засечь время за которое отображается структура страницы без данных :)

Information

Rating
Does not participate
Date of birth
Registered
Activity