Sander
многие пишут все на vim )
Ivan
и хотя я vim вообще не понимаю не стоит же назвать его фигней 😉
Ivan
это труд кучи людей
Sander
atom удобней тем что более настроеный и понятней с подсказками
Sander
ну те кто умеет то наверное для них это не заменимо
Ivan
у меня тупо сломался трекпад - и на обычной дискретной мышке я не вижу разницы по скорости между атомом и сублимом
Sander
правда без мышки не представляю, сложно если кода много
Ivan
раньше скрол напрягал
Sander
самый лучший редактор это на windows notepad стандартный
Ivan
far + colorer мне его последние много лет не хватает
Sander
🙏
Anonymous
.bind() полностью пересоздаёт метод? Насколько более ресурсоёмко сделать .bind(), чем просто передать функцию в переменную?
Paul
"Насколько более ресурсоёмко сделать .bind(), чем просто передать функцию в переменную?" Вопрос не понятен
Anonymous
Уже решил.
Anonymous
bind() создаёт обёртку.
Anonymous
По сути, созданная обёртка — есть декоратор, который делает originalMethod.call(cоntext, arg1, arg2, ...)
Anonymous
Я беспокоился о том, насколько повлияет на производительность использование bind() в конструкторе класса для копирования определённых методов в другие объекты с привязкой контекста.
Anonymous
Ведь при создании экземпляра класса, его методы не копируются в экземпляр, а экземпляр получает к ним доступ через другой объект. Серьёзно ли изменится положение в плане производительности, если я начну создавать новые методы при создании экземпляра класса.
Anonymous
Клёвая шутка. Я не изучал C++.
Anonymous
Как это у тебя выглядит?
https://github.com/bigslycat/pbem/blob/master/lib/Block.js#L18
Александр
А зачем ты так себе жизнь усложняешь?
Александр
Ты решил сделать эти функциями не методами чтобы контекст уж точно не переопределялся или как?
Anonymous
Это хелперы, функции внутри шаблона.
Anonymous
Но они работают с контекстом экземляра класса.
Александр
Но они работают с контекстом экземляра класса.
Ну так и сделать их методами. Либо явно передавать в них ctx.
Anonymous
То бишь, передавать в шаблон сам экземпляр?
Александр
А то выглядит будто ты monkey-patching делаешь какой-то.
Anonymous
=))
Александр
То бишь, передавать в шаблон сам экземпляр?
Ну да. Но лучше, наверное, просто сделать их методами. Они же таковые и есть.
Anonymous
Так ведь тогда они потеряют контекст.
Anonymous
Ну, если второе.
Александр
Почему вдруг?
Anonymous
Если я передам экземпляр, то всё ок. Только в использовании будет уже не так удобно.
Anonymous
Ну, допустим, в шаблоне будет вызов block('header'). Ему потребуется контекст экземляра класса, т.к. он содержит персональные конфиг и данные.
Александр
Не понял с чего вдруг методы потеряют контекст.
Александр
Class.prototype.func когда вызывается от inst.func всегда имеет this же
Александр
Или там у тебя кто-то снаружи контекст портит?
Anonymous
Хм. Так. А можно ссылку, чтобы по-подробнее ознакомиться?
Anonymous
this.local({ mod: this.getMod, isMod: this.isMod, element: this.createElement, attributes: this.getAttributes });
Александр
Хм. Так. А можно ссылку, чтобы по-подробнее ознакомиться?
Ссылку на что? Есть методы экземпляра, которые ищутся в прототипе и this'ом которых будет сам экземпляр.
Anonymous
Контекст в примере выше потерян.
Александр
Есть методы "класса"
Александр
А что у тебя функция local делает?
Александр
Я чёт не нашёл её быстрым взглядом с телефона.
Anonymous
Это методы экземпляра класса.
Anonymous
local() устанавливает локальные переменные для шаблона. Таким образом туда попадают и хелперы.
Anonymous
Это единственный вариант.
Александр
А, я понял. Это какой-то проброс обработчиков в шаблонизатор.
Anonymous
Дада.
Александр
Ну тогда нормальная практика юзать bind
Anonymous
Печаль в том, что это БЭМ, и шаблон состоит из кучи блоков. В норме — каждый ДОМ-элемент — это, в переводе на мою либу, класс.
Anonymous
Пардон, экземпляр класса.
Александр
Честно говоря мне сложно было понимать твой код. Много всяких примесей и всего такого. Но может дело в специфике шаблонизатора.
Anonymous
Ну, код кое-где снабжён абстракциями. Наверное, не всегда к месту. Ещё есть вопросы к его разбиению по файлам. Шаблонизатор здесь не при чём. =)
Anonymous
Зато здесь есть вариант реализовать кеширование уже отрендеренного вывода отдельно для каждого блока.
Anonymous
Там байндинг находится за пределами теста.
Anonymous
А у меня это часть нагрузки.
Anonymous
Сам байндинг в смысле.
Anonymous
Нет. Я говорил о другом кешировании. =)
Anonymous
Это уже другая тема.
Anonymous
Байндинг выполняется при каждом создании экземпляра.
Anonymous
Таких созданий много.
Anonymous
Я думаю, проще затестить. У меня экземпляр в шаблон итак пробрасывается. Введу в общий конфиг что-нибудь типа fastMode, при котором проброс в шаблон "красивых" функций отключён, создам два инстанса и погоняю их.
Anonymous
Разница в синтаксисе будет примерно такой: current.createBlock('header') vs block('header')
Anonymous
Падение производительности 12%.
Anonymous
В случае использования байнд.
Anonymous
let bigCount = 200; let smallCount = 300; let iterations = smallCount * bigCount; let fastTime = 0; let slowTime = 0; let startFastTime; let startSlowTime; for (let bigIndex = 0; bigIndex < bigCount; bigIndex++) { startFastTime = Date.now(); for (let index = 0; index < smallCount; index++) { fast.createTemplate('index').toString(); } fastTime += Date.now() - startFastTime; startSlowTime = Date.now(); for (let index = 0; index < smallCount; index++) { slow.createTemplate('index').toString(); } slowTime += Date.now() - startSlowTime; } console.log('fast:', fastTime); console.log('slow:', slowTime); console.log('iterations:', iterations); console.log('coefficient:', String(Math.round((1 - fastTime / slowTime) * 100)) + '%');
Anonymous
Лол.
Anonymous
Ты под чем?
Denis
https://www.npmjs.com/package/moscow
Denis
Кто уже в мейле?)
Dmitry
Я
Dmitry
Уже полчаса как
Kanstantsin
Никто так и не нашёл решение, как организовать схему, чтобы npm install кэшировался и выполнялся только для обновленных модулей?
У меня при деплое, если в коммит попал package.json запускается npm install, если нет - копия node modules из предыдущего релиза, или я не о том?
Denis
Прекрасное решение
Denis
На самом деле и логичное
Denis
Уже полчаса как
Скинь фото как там
Denis
Я только выезжаю😬
Dmitry