На Хабре есть несколько статей про изоморфность, которые на вопрос, что такое изоморфность, отвечают: “Изоморфность — это когда один и тот же код используют и на клиенте, и на сервере”. Да, это так, но не совсем понятно, для чего она вообще нужна. Собственно на этой почве и была рождена эта статья.
Читать полностью »
Рубрика «node.js» - 59
Для чего вообще нужна изоморфность?
2016-05-18 в 15:42, admin, рубрики: isomorphic, javascript, node.js, nodejs, ReactJSKoajs 2.0: новое поколение фреймворка нового поколения
2016-05-18 в 15:21, admin, рубрики: async, await, generators, javascript framework, koa, koa2, koajs, node.js, Разработка веб-сайтов, метки: koa, koa2, koajs«Next generation web framework for node.js» — так написано в документации к версии 1.0. Звучит неплохо, я к этому добавлю что 2 года назад после внедрения koa на одном из проектов у наших программистов появился термин “псевдо-синхронный код” (Это когда код выглядит как синхронный но на самом деле исполняется асинхронно). Что за бред Как это работает я расскажу под катом.Читать полностью »
Анализ типов с помощью Proxy
2016-05-18 в 13:08, admin, рубрики: decorators, ES6, javascript, node.js, proxyВ процессе описания очередного набора тестов для модуля Node.js поймал себя на мысли "опять проверка типов". Каждый параметр метода класса, каждое свойство устанавливаемое с помощью сеттера надо проверять. Можно конечно просто забить или дополнять все кодом реализующим проверки или попробовать описать все декораторами. Но в этот раз поступим немного иначе.Читать полностью »
String.raw: некоторые возможности и ограничения
2016-05-16 в 8:50, admin, рубрики: escape, javascript, node.js, regular expressions, V8, windows, windows registry, браузеры, Регулярные выражения, экранированиеI. Возможности
Когда я прочитал на MDN про String.raw()
: «The static String.raw()
method is a tag function of template literals, similar to the r
prefix in Python or the @
prefix in C# for string literals» — я здорово обрадовался, потому что мне часто не хватало в JavaScript чего-то вроде одиночных кавычек в Perl.
Я сразу придумал несколько видов использования и стал активно применять их в скриптах.
1. Определение путей к файлам Windows без двойного экранирования.
const r = String.raw;
const test_module = require(r`e:DOCprgjsnode-libtest.js`);
2. Определение путей к ключам реестра Windows.
const r = String.raw;
const Winreg = require('winreg');
const regKey = new Winreg({
hive: Winreg.HKCU,
key: r`SoftwareMPC-HCMPC-HCSettings`
});
3. Создание сложных регулярных выражений из составных литералов.
См. пример кода в одной из недавних статей.
II. Ограничения
Однако со временем я стал натыкаться на неожиданные ограничения. Написав об одном из них в багтрекер V8, я получил отрезвляющее объяснение. Оказывается, хоть String.raw
и выдаёт строку без интерпретации экранированных литералов, на стадии парсинга кода анализатор всё равно требует, чтобы литералы соответствовали правилам. Из этого следуют неочевидные ограничения для упомянутых случаев применения. Читать полностью »
Уменьшаем размер публикуемых npm модулей
2016-05-16 в 8:31, admin, рубрики: Git, javascript, node.js, npm, Блог компании Voximplant, Программирование, Разработка веб-сайтовПо умолчанию npm публикует в registry весь модуль целиком. За исключением явно указанных в .gitignore файлов. Это отбрасывает зависимости, но все равно позволяет куче не очень нужных файлов просочиться в опубликованное. После чего благодарные пользователи ждут, пока все это скачается. Для grunt, кстати, ждать придется порядка 6 мегабайт. А он такой обычно не один.
Я решил разобраться, как измерить размер своих модулей после публикации и, по возможности, этот размер уменьшить. В качестве примера буду использовать модуль check-more-types, который содержит всего несколько файлов. Плюс юнит тесты и документацию, которая собирается в README markdown файл.
Читать полностью »
Эволюция сервера приложений на NodeJS
2016-05-12 в 7:50, admin, рубрики: api, location system, node.js, nodejs, realtrac, RTLS, vert, Блог компании RTL-Service, Программирование, сервер приложений В нашей системе мирно сосуществуют 2 сервера. Основной сервер(ядро), написанный на JAVA и сервер приложений — NodeJS, именно ему и посвящена данная статья.
Изначально у сервера приложений существовало 2 фундаментальные задачи:
1) проксирование запросов к основному серверу для того, чтобы уменьшить неспецифичную нагрузку и сэкономить ресурсы для решения более важных задач;
2) реализация client-specific функционала для того, чтобы не пришлось вносить изменения в код ядра при появлении клиентских “хотелок”.
Строго говоря, наличие сервера приложений вовсе не обязательно для функционирования системы, т.к. ядро имеет полноценное REST API, реализующее весь основной функционал системы. Несколько слов о протоколе. RTLSCP (real track location system communication protocol) – протокол, работающий поверх HTTP и позволяющий получать данные и выполнять базовые операции с системой RealTrac с использованием запросов и ответов в формате JSON/KML/PNG.Читать полностью »
Вы не знаете Node: краткий обзор основных возможностей
2016-05-11 в 8:04, admin, рубрики: c++, mail.ru, node.js, Блог компании Mail.Ru Group
Идея этой публикации была навеяна серией книг Кайла Симпсона «Вы не знаете JavaScript». Они являются хорошим началом для изучения основ этого языка. А Node — это практически тот же JavaScript, за исключением небольших отличий, о которых я расскажу в этой статье. Весь код, приведённый ниже, вы можете скачать из репозитория, из папки code
.
Зачем вообще переживать насчёт Node? Node — это JavaScript, а JavaScript используется почти везде! Мир был бы лучше, если бы большинство разработчиков в совершенстве владели Node. Чем лучше приложения, тем лучше жизнь!
Эта статья представляет собой реалистичный взгляд на наиболее интересные основные возможности Node. Ключевые моменты статьи:
- Цикл событий: освежаем ключевую концепцию, позволяющую реализовать неблокирующие операции ввода/вывода.
- Глобальный объект и процесс: как получить больше информации.
- Эмиттеры событий: интенсивное введение в событийную модель (event-based pattern)
- Stream’ы и буферы: эффективный способ работы с данными
- Кластеры: форкай процессы как профессионал
- Обработка асинхронный ошибок: AsyncWrap, Domain и uncaughtException
- Аддоны на C++: внесение своих наработок в ядро и написание собственных аддонов на С++
Yandex Translate для Visual Studio Code
2016-05-10 в 10:07, admin, рубрики: javascript, node.js, Visual Studio, vscode typescript extension, метки: vscode typescript extensionНачну с того, что использую vim в качестве редактора файлов. Все удобно и быстро, но есть некоторые проблемы которые выделил при длительном пользовании:
- Нет асинхронности. Знаю что есть nvim — но он работает не так быстро и не так гладко
- Сложность написания плагинов. Спорный конечно вопрос для разных гуру — но честно говоря так много «каши», не хватает модульности и какой то структурности из уже реализованных «велосипедов»
- Когда слишком много плагинов vim стартует — нужно быть честным, довольно долго и это напрягает
Пользуюсь так же по основному своему хобби — Android Studio. Очень прожорлив этот IDE к ресурсам системы, процессор иногда сходит с ума обрабатывая очередной цикл gradle assembleDebug.
Visual Studio Code испытывал скептически. Первое что удивило скорость запуска вместе с большой структурой проекта. Моментальный поиск по файлам и множество плагинов, отличный менеджер плагинов похожий на Sublime. Минимальная загрузка процессора.
Давно в Android Studio не хватало одной полезной штуки — перевод ресурсов strings.xml под другие языки. Делать раньше это было весьма неудобно:
- Выделить текст
- Скопировать
- Перейти в любой онлайн переводчик
- Вставить текст
- Выбрать текущий язык перевода
- Выбрать в какой язык перевести
- Скопировать перевод
- Открыть результирующий strings.xml
- Вставить перевод
Чего хотелось — одной комбинацией клавиш получить моментальный результат.
Читать полностью »
Полноценный DI на node.js
2016-05-06 в 16:52, admin, рубрики: dependency injection, javascript, node.js, tricks, V8С выходом Node.js 6.0 мы из коробки получили готовый набор компонентов для организации честного DI. В данном случае я имею в виду DI, который пытается найти и загрузить нужный модуль только в момент запроса его по имени и находится в глобальной области видимости для текущего модуля, при этом не вмешиваясь в работу сторонних модулей. Написано по мотивам статей Node.JS Избавься от require() навсегда и Загрузчик модулей для node js с поддержкой локальных модулей и загрузки модулей по требованию.
Данная статья носит больше исследовательский характер, а ее целью является показать особенности работы Node.js, показать реальную пользу от нововведений ES 2015 и по новому взглянуть на уже имеющиеся возможности JS. Замечу, что этот подход опробован в продакшене, но все же имеет несколько ловушек и требует вдумчивого применения, в конце статьи я опишу это подробнее. Данный DI может легко использоваться в прикладных программах.
Развертывание стека MEAN (MongoDB, Express, AngularJS, Node.js) в Microsoft Azure
2016-04-28 в 12:14, admin, рубрики: AngularJS, azure, azure marketplace, express, linux, mean, Microsoft Azure, mongodb, node.js, open source, Блог компании MicrosoftВы уже знаете, что мы запустили новый проект, посвященный проектам с открытым исходным кодом — linuxloves.ms. Подробности про проект вы можете найти в нашей публикации на Хабре, которая уже вызвала ожесточенный флейм :-).
Разработчики, которые создают решения в стеке MEAN могут легко размещать свои решения в облачной платформе Microsoft Azure. Проще всего это сделать с помощью виртуальных машин.
Для упрощения работы с виртуальными машинами в облаке Azure предлагается площадка Azure Marketplace, в которой находятся сотни заранее настроенных виртуальных машин с разным окружением и установленными инструментами, включая операционные системы, базы данных, среды, фреймворки, CMS и так далее.
Рассмотрим, как любой пользователь Azure может развернуть стек MEAN за несколько минут.
Читать полностью »