Страницы

четверг, 16 марта 2017 г.

JavaScript Execution Optimization

Небольшой этюд на тему оптимизации в V8, или сказ о том как мономорфизм влечет за собой оптимизацию, а полиморфизм (не путаем с subtype или parametric polymorphism), в свою очередь, деоптимизацию JavaScript функций, с картинками. По мотивам публикаций Benedikt Meurer и Вячеслава Егорова. Для того, чтобы по-взрослому разобраться в том, как оптимизировать JavaScript код, рекомендую почитать публикации уважаемых разработчиков, упомянутых выше, а также документацию V8. Дисклеймер: "Premature optimization is the root of all evil", - Donald Knuth.

пятница, 24 февраля 2017 г.

Node.js at scale. Configuration

Вчера мне попался на глаза один пост с интригующим заголовком: "О структуре и масштабировании сложных приложений Node.js". После прочтения сжечь хочу рассказать о своем варианте управления конфигурацией "сложных приложений" Node.js. Не смотря на то, что в npm есть целый ряд модулей (npm search configuration), самый известный из которых, nconf, умеет не только миксовать process.argv, process.env и содержимое файлов (по моему основной функционал подобных решений), но и еще много чего (ненужного на мой взгляд), я написал свой велосипед. Знакомьтесь, hackee.

воскресенье, 15 января 2017 г.

Node.js Event Loop

А знаете ли вы, что process.nextTick и Promise используют отдельный Event Loop внутри Event Loop, а fs, crypto.randomBytes и crypto.pbkdf2, dns.lookuphttp.get и http.request (вызванные с именем хоста, а не ip-адресом, и поэтому вызывающие dns.lookup), а также C/C++ аддоны, которые используют libuv thread pool, создают свои собственные потоки (по умолчанию до 4, максимум до 128), и таким образом Node.js Event Loop не совсем Single Threaded, а скорее Mostly Single Threaded?

среда, 14 декабря 2016 г.

MongoDB Views

В конце ноября вышел релиз MongoDB 3.4, стало быть наконец настал тот час когда можно смело использовать новые фичи, конечно если ваши админы планируют обновлять MongoDB до этой версии. Сегодня хочу затестить еще одну вкусняшку по имени Views. Для примера возьмем запрос, о котором я подробно рассказывал в одном из предыдущих постов, и создадим на его основе вьюху. Выглядит Read-only View как коллекция, документы которой билдятся по aggregation запросу.

воскресенье, 6 ноября 2016 г.

MongoDB Linked List

На этой неделе появилась версия MongoDB 3.4.0 Release Candidate 2 с кучей вкусняшек на борту, которые хочется попробовать уже сейчас. Предлагаю провести дегустацию одного из самых вкусных блюд предстоящего релиза - пайпа по имени $graphLookup - с помощью которого можно выполнять поиск по коллекции рекурсивно. Напишем запрос к коллекции, документы которой имплементируют связный список. Реализация подобной структуры в текущем стабильном релизе на мой взгляд вообще не вариант, и я рад что уже совсем скоро смогу рассчитывать на нее в процессе проектирования.

вторник, 1 ноября 2016 г.

JavaScript Persons

В мире JavaScript немало "весовых" персон которые так или иначе оказывают влияние на "рядовых" JavaScript разработчиков. На меня больше всего повлияли трое: Douglas Crockford, Reginald Braithwaite и Eric Elliott. Знакомьтесь: 1) Douglas Crockford: сайтпрофиль в Google+, плейлисты на Youtube, 2) Reginald Braithwaite: сайт, профиль в Twitter, книги, 3) Eric Elliott: профиль в Medium, профиль в Twitter, коллекция ссылок по теме JavaScript.

суббота, 1 октября 2016 г.

Что еще почитать по JavaScript

С момента предыдущей публикации по теме мне удалось прочитать следующую литературу по JavaScript: Functional Programming in JavaScript by Luis AtencioFunctional Programming in JavaScript by Dan Mantyla и Professor Frisby's Mostly Adequate Guide to Functional Programming. Кроме того: High Performance Browser Networking - "must read" мануал для веб-разработчика, Out of the Tar Pit - вкуснейшая статья на холиварную тему "imperative vs. declarative" и Designing Data-Intensive Applications - я прочитал так называемый "Early Release" т.к. книга пока еще не издана, когда выйдет в тираж обязательно познакомлюсь с материалом не вошедшим в "раннее издание".

суббота, 3 сентября 2016 г.

VS Code Node.js Debugging

В VS Code есть встроенный дебаггер, но не смотря на то, что я использую этот инструмент уже давно, Node.js код я дебажу с помощью node-inspector. Сначала запускаю дебаггер: node-inspector --web-port 8088 --save-live-edit true --preload false, затем приложение: node --debug app или node --debug-brk app (по ситуации), после чего открываю в браузере интерфейс дебаггера по адресу http://127.0.0.1:8088/?ws=127.0.0.1:8088&port=5858. Расскажу как я пытался перейти на встроенный дебаггер VS Code.

пятница, 19 августа 2016 г.

Node.js HTTP/2

На прошлой неделе среди разработчиков Node.js началось обсуждение реализации протокола HTTP/2. Ждать появления HTTP/2 в Node.js core еще очень долго, но уже сейчас можно затестить фичи этого протокола с помощью модуля node-spdy, который работает как с протоколом SPDY - предшественником HTTP/2, который кстати Google Chrome больше не поддерживает, так и с HTTP/2, обязательно поверх TLS. Расскажу как я тестил фичу по имени HTTP/2 Server Push.