Pull to refresh

Comments 16

Можно было не делать никакого класса, а определить указанные поля просто для всех объектов. Сам класс как таковой тут не играет никакой роли. А том может сложиться впечатление что это именно сама конструкция Class ускоряет процесс.
Класс позволяет нигде не запутаться: нигде никакое свойство не пропустить и не перепутать порядок, в котором они должны быть.
Если делать это вручную, вероятность ошибки куда выше.
  const han = {firstname: "Han", lastname: "Solo", spacecraft: "Falcon"};
  const luke = {firstname: "Luke", lastname: "Skywalker", job: "Jedi"};
  const leia = {firstname: "Leia", lastname: "Organa", gender: "female"};
  const obi = {firstname: "Obi", lastname: "Wan", spacecraft: ''};
  const yoda = {lastname: "Yoda", firstname: '', spacecraft: ''};


добавлю, что вот такое даст 2 секунды вместо 5
Отдельно рекомендую автору прогнать это через babel и понизить стандарт до es5 и посмотреть что будет.

В чём сакральный смысл однострочников в обучающем материале?


Первый же пример при переформатировании выдает такое:


(() => {
    const han = {firstname: "Han", lastname: "Solo"};
    const luke = {firstname: "Luke", lastname: "Skywalker"};
    const leia = {firstname: "Leia", lastname: "Organa"};
    const obi = {firstname: "Obi", lastname: "Wan"};
    const yoda = {firstname: "", lastname: "Yoda"};
    const people = [han, luke, leia, obi, yoda, luke, leia, obi];
    const getName = (person) => person.lastname;

Сразу видно, что пример "битый".

падение производительности более чем на 700%

Не понял здесь, или определение процента недавно поменялось?

наверное, имелось ввиду, что «время выполнения выросло более чем на...»?..

"доступа к нему с помощью метода Геттера"
Кто это неуловимый и загадочный Геттер.

Понимать как работает движок полезно и интересно. Главное что бы человек понимал что конкретно этот пример является классическим premature optimization. Потому как я уверен что в продакшене вместо 1000^3 итераций:

for(var i = 0; i < 1000 * 1000 * 1000; i++)


даже если их будет 100, время потраченное на оптимизацию не окупится в ближайшие лет 10 =)
Я не нашёл сходу ссылку, но был доклад на конференции, что сервак на ноде от игрушки вдруг стал тормозить. Пытались понять что изменилось, оказалось что на юзеров навесили свойство premium. Которое было true, если игрок купил премиум, и не инциализировалось если не премиумный. В итоге 0.5% игроков с премиумом постоянно деоптимайзили все функции куда прилетали, в итоге весь сервер свалился из JIT в интерпретацию. Стоило проинициализировать поле явно и всё взлетело. Это как раз из тех практик, соблюдение которых ничего не стоит, улучшает код и дебаг, и не закладывает мину. Потом, если весь код так написано, ни вжизнь не найдёте что там тормозит.
Соглашусь, что важно само понимание того, где стоит задуматься об оптимизации.
Этот пример как раз не является плохим — он учебный. Операций 1000^3, тайминг показателен, это хороший пример.
Но в проме действительно такие примеры не часты.
С другой стороны, важно понимать, какие величины все таки достигнут таких 1000^3 — а в крупных проектах такое может быть.
Кроме того, наши программы регулярно тормозят потому, что люди думают про ненужность предварительных оптимизаций даже там, где можно и подумать — например обычные вложенные циклы легко дают квадратичный рост слоности, которые могут вызвать тормоза на ровном месте.

Очередная, стопятисотая по счету статья о том что мономорфизм рулит. Об этом уже знают, наверно, все, если не более.

Нет, не все.

Например, для меня эта статья — что-то новое (я не так давно учусь писать на JS).

Вероятно, на Хабре уже было 5 (или 50, или 500) статей на эту тему — но в нашем мире со слишком большим количеством информации найти что-то нужное и полезное среди написанного на хабре три года назад — не так просто (особенно если не знать, что конкретно нужно искать — а это типичная история для новичков).

Все статьи про оптимизацию js на уровне движка, которые я когда-либо читал, были двух видов: "мономорфизм", и "мономорфизм и что-то ещё" :)

Просто добавив одно свойство к каждому объекту, мы получим падение производительности более чем на 700%!

Бггг, то есть получим -600% производительности. Действительно круто!

Sign up to leave a comment.