Вы не знаете JS: Асинхронность и Производительность

Вы не знаете JS: Асинхронность и Производительность

Автора и серию уважаю, но книга оставила смешанные чувства. В этой части рассказывают про промисы, генераторы, немного про оптимизацию и её принципы, также зачем-то есть большой раздел про библиотеку для работы с асинхронным кодом, которую написал сам Симпсон.

В двух словах: книга вышла в 2015-м году, и какие-то её части уже успели устареть. Что-то останется актуальным навсегда (асинхронные паттерны, принципы оптимизации), а какие-то части, по моему мнению, лишние. Вещи, о которых автор писал с робкой надеждой и в будущем времени, в JavaScript уже стали реальностью.

Вначале идут рассуждения о синхронности и однопоточной природе JS, а также реализации в нём асинхронного кода. Ничего нового за первую сотню страниц я не узнал, их можно было пропустить. Далее автор углубляется в промисы, и посвящает обещаниям много места: но зачем, когда уже давно повсеместно поддерживается async/await? Отделаться от мысли «а зачем?» сложно, поскольку большая часть книги построена на выводах этой главы.

Интересно и по делу про генераторы, веб-работников и asm.js (deprecated). Сверхполезный раздел про производительность, хронометраж (бенчмарки) и оптимизацию. Про то, что не стоит тратить время на микрооптимизации вроде i++ vs ++i нужно прочитать каждому: компилятор всё равно перемолет любые циклы и объявления переменных по-своему, и скорее всего, ещё лучше, чем вручную.

Зачем читать

Разобраться с промисами и генераторами. Проветрить голову насчёт быстродействия и оптимизации кода.

Подробнее →

JavaScript рефакторинг: балласт в проекте и как от него избавиться

JavaScript рефакторинг: избавляемся от балласта

Начав удалять ненужный код, сложно остановиться. В прошлой части были удалены неиспользуемые импорты, в этот раз я найду лишние файлы: пустые readme и дефолтные таблицы стилей. Такие файлы выглядят полезными, но это оптическая иллюзия, которая проходит, если присмотреться.

Рефакторинг подходит для больших проектов: в текущем около 300 файлов историй, и примерно столько же компонентов. PR с лишним кодом унёс с собой 1.4к строк и улучшил время сборки почти на минуту (!).
Для малых проектов лучше сберечь усилия для каких-то более существенных улучшений.

Подробнее →

Рефакторинг. Улучшение существующего кода

Рефакторинг. Улучшение существующего кода

Читал вторую редакцию, примеры в этой версии на JavaScript.

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

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

Зачем читать

Чтобы писать код лучше, а ревью на него — по делу.

Подробнее →

JavaScript рефакторинг: удаление мёртвого кода

JavaScript рефакторинг: удаление мёртвого кода

Как неиспользуемый код стухает и лежит в проекте заповедными нетронутными пластами: новый функционал обложили тестами и снапшотами и выкатили на прод. Через какое-то время, клиентский код или компонент, который пользовался этим функционалом, удалили — а общие утилиты, константы, моки и конфигурации остались по чьему-то недосмотру. Такой код больше не нужен и не используется, но невидим для линтеров и подсветки IDE: он импортируется в тестах и StoryBook (например), и выглядит полезным и вообще, при деле.

В текущем большом проекте я нашёл и удалил около 5к строк неиспользуемых функций и компонентов, а также ненужных стилей, тестов, историй StoryBook, снапшотов и одну картинку. Что интересно, снапшоты были далеко не большей частью пулл реквеста, зато нашлось множество устаревших компонентов, которые импортировались только в историях SB.
Кроме прочего, это ускорило время сборки проекта примерно на полминуты или 5%: мелочь, а приятно. Подробнее →

JavaScript антипаттерны

JavaScript антипаттерны

Парочка мелких антипаттернов, которые просачиваются на прод и об которые можно споткнуться. Оба шаблона связаны с оптимизацией условий и переписыванием их в более удобочитаемом виде: Замена продолжительных условий и Перегрузка switch (true).

Подробнее →

Вы не знаете JS. Типы и грамматические конструкции

Вы не знаете JS. Типы и грамматические конструкции

Сборник граблей и очень детальное погружение в типы и немного в грамматику JavaScript (чем отличается от синтаксиса, там написано). Как всегда, у JS есть чем удивить: какие-то старые и непонятные для меня вещи получили объяснение.

Читать интересно, воды нет, текст сжат и детален. Автор играет в адвоката дьявола и постоянно трясёт кулаком в сторону ленивых программистов, что не удосужились прочитать спеку, а обложились эзотерическими бест практиками, и просто не пишут «как не надо» и не пользуются неочевидными возможностями JavaScript. Интересная позиция.

Зачем читать

Прояснить тёмные моменты языка и понять, почему линтеры срабатывают на вроде бы безобидных участках кода. Понять JavaScript на более низком уровне.

Подробнее →

JavaScript: про ленивую обработку и сокращённые вычисления

Вы не знаете JS: про ленивую обработку и сокращённые вычисления

В моём экземпляре «Вы не знаете JS: Типы и грамматические конструкции» есть раздел про порядок выполнения логических операторов. Здесь есть неточность: результаты примеров выше обусловлены тем, что интерпретатор отбрасывает части выражения, которые не требуются вычислять.
Действуют принципы Ленивых вычислений (Lazy evaluation) и Вычислений по короткой схеме (Short-circuit evaluation):

Подробнее →

JavaScript: сильные стороны

JavaScript: сильные стороны

Книжка из мема про JS (Definitive guide я тоже когда-то прочитал весь, что было довольно утомительно).

Немного устарела, но всё же нашлось пару мелочей, о которых я не знал — впрочем, для JavaScript обычное дело.

Зачем читать

Книга интерес имеет скорее исторический, с современным языком вполне можно жить и так. Читать, если хочется понимать JS на более глубоком уровне.

Подробнее →

Генератор паролей на JavaScript

Чтобы закрепить пройденный на курсере курс по AngularJS, я переписал свой старый генератор паролей OktoPass заново: переверстал страницу с Bootstrap, избавился от jQuery и переделал сам механизм генерации паролей. Ссылка на сервис: password.axisful.info

Это было занятно, у меня получилось веб-приложение со стильной шёрсткой и адаптивной вёрсткой, а в процессе я написал пару велосипедов для серверного микро-движка и фронтенда, вроде поддержки переводов и работы с URL.

Далее я опишу некоторые ключевые моменты, на которых работает OktoPass.

Подробнее →