Pull to refresh

Comments 48

Легко читаемо. Спасибо за перевод.
Евангелистская статья должна быть простой и понятной :-)
Очень удачная метафора про царя. Браво.
«Могу ли я получить доступ к DOM в Node?»

Отличный вопрос! Нет, DOM определён в браузере отдельно от движка Javascript (V8). Тем не менее, есть люди, работает над реализацией DOM в качестве модуля Node, что может открыть очень интересные возможности, такие как тестирование клиентского кода с помощью Node.


Несколько недель назад я экспериментировал с этим — получилось очень интересно, но скорость выполнения операций c DOM на порядок ниже скорости их выполнения в браузере, из-за чего пришлось переписать систему на ruby(используя гемы, работающие на нативных либах).
Было бы интересно узнать, какую реализацию вы пробовали.
Уверен, появятся и нативные модули для DOM.
Пользовался этой библиотекой.
Пока в некоторых местах поведение отличается от поведения браузера, но, применив голову, легко можно пофиксить и отдать автору патч :)
Библиотека быстро развивается. Думаю, ее тесты позволят быстрее разработать нативную библиотеку.
Моей первой статьей на хабре как раз было использование node.js как веб-майнера, в которой я использовал одну из реализаций «прощающего» html-парсера, превращающего текст в dom-дерево — априкот. Но сам априкот использует jsdom.

Ссылка на статью — habrahabr.ru/blogs/personal/102840/
Тогда еще не хватало кармы перенести в блок «Javascript». Может кому полезно будет :)
Не вот так? Вообще уже есть jsdom, на нём работает jQuery. Т.е. можно сделать робота который будет обходить страницы и извлекать данные, например. Правда для тестирования интерфейсов имхо пока возможностей маловато.
Примерно так, да, только jQuery мы не использовали. Писали json rest сервис для обработки html данных.
> Нет. Если вы используете Windows, вам нужна виртуальная машина (я рекомендую VirtualBox) с Linux.
Еще можно скомпилировать в Cygwin.
Все давно скомпилировано и работает. Вопрос только в автоматическом билде под винды каждой новой версии, т.к. разработчики под виндоус не привыкли замарачиваться с компилированием средств разработки после каждого обновления.
Месяца два назад смотрел его и скомпилированная версия под виндовс отставала на несколько версий и некоторые функции не работали. Убил с время на поиске багов, пересобрал и всё заработало. Теперь с недоверием отношусь к собранному.
Отличная штука с неприятной схемой разработки. Посмотрите в гитхабе — за все время ни одного стороннего коммита они не приняли, при наличии порядка 40 веток от сторонних разработчиков с баг-фиксами. Такое чувство, что стараются сохранить копирайт для каких-то целей, мне непонятных. В худшем случае — для смены лицензии.
Да, такое отношение не очень приятно. Мне пока с коллабораторами по Node везёт.
«Работает ли Node на Windows?»

Да, работает же.
Сделать node.exe дело пяти минут, при наличии быстрого интернета (качать git+python иногда долго), и настроить nginx+apache локально еще 20 минут.
Простите, действительно указано как в комментариях к статье, так и в одном комменте.
Пожалуй напишу развёрнутое дополнение «от переводчика».
Дополню по поводу того, где узнать о нём
прекрасный источник: kuroikaze85.wordpress.com от одноименного хабрапользователя, + nodejs.ru, аналог хабры вокруг темы node.js
Не находит:
Checking for openssl: not found
Checking for function SSL_library_init: not found
Checking for header openssl/crypto.h: not found
Checking for header port.h: not found
Checking for header sys/event.h: not found
Checking for function kqueue: not found

OS Kubuntu
Должно помочь:
$> sudo apt-get install openssl libssl-dev
Однако это не обязательно, только если вам нужна поддержка SSL и шифрования.

Остальные проверки же совсем не обязательны. Node.js собирается на многих платформах и использует нативные средства для организации event-loop. На BSD — kqueue, на Linux epoll/select. У вас Linux и при сборке будет использоваться epoll, судя по всему.
Спасибо! установил, уже тестирую :)
Не паралельно, а асинхронно. См libevent. Тру параллельность будет только в случае нескольких воркеров и ядер.
Думаю автор использовал 'parallel' вместо 'async' из-за выбранной метафоры, цари с асинхронностью как-то совсем не сочетаются. Да и статья не нацелена на техническую точность.

В Node, кстати, используется другая реализация цикла, libev.
Меня очень порадовал клиент для Redis redis-node-client, который поддерживает redis 2.0 с pub/sub-ом. Очень пригодилось, когда делали Comet сервер с большим колличеством подписок
Почему-то по упоминаниям (в основном в комментах) на хабре был уверен, что node.js — это веб-сервер или он «превращается» в него путем запуска команды «node.js mywebserver.js», после чего начинает слушать 80-й порт и обрабатывать HTTP запросы, как это может делать, скажем, скрипт на python?
Это его основное применение, скажем так. Однако это может быть любой другой TCP сервер, а также можно писать обычные утилиты командной строки. Так, для Node есть обётртки для JSLint и различных JSMin'ов, есть система сборки приложений Jake и много другого.
А как в ноде сейчас с отладкой обстоят? Когда я ее последний раз смотрел, там было что-то вроде «ну… э… этож йаваскрипт. Отлаживайтесь print'ами» :(
Есть туториалы по отладке nodejs в eclipse
Можно отлаживать в Eclipse, как уже сказали, и есть пошаговый дебагер для командной строки. Хуже всего тем, кто бинарные аддоны пишет, вот тогда сложно :-)
Сами понимаете, пошаговый отладчк для более-мене сложной отладки это инкарнация пушного зверя. А не подскажете, где туториалы по отладке в eclipse залегают?
В вики описано, как подключить: github.com/ry/node/wiki/Using-Eclipse-as-Node-Applications-Debugger.
Пробовал уже давно, но и тогда проблем не возникало.

Ndb «пошаговый» ровно настолько же, насколько и gdb, т.е. можно просто поставить брейк в нужные места (причём это можно сделать и в самом коде с помощью строчки «debugger;») и дальше запускать выполнение пока не встретится брейк.
И приходите в IRC, #node.js (да, в имени точка).

В какой IRC-сети?
irc.freenode.net уже стандартно
Или webchat.freenode.net — прямо из браузера :)
Я пытался поставить на Убунту-сервер 9.0 — просит очень много дополнительных ресурсов — у меня почти чистая установка. Кажется, хотело даже cc compiler. Ставил .deb пакет. Так как вы в теме, может посоветуете, как убить все недостающие зависимости одним выстрелом?
Список зависимостей был бы кстати. Заодно расскажите. Какая версия Node лежит в вашем репозитории. Есть мнение, что лучше собирать самостоятельно из исходников.
Верное мнение, нод обновляется довольно часто. А сборка не очень тяжеловесная — она хорошо параллелится waf'ом.
Не могли бы вы рассказать какие существуют альтернативы node.js, и какие у него преимущества по сравнению с альтернативами?
Есть Tornado и Twisted на питоне, PHPDaemon. Насчёт остальных языков не в курсе.
Подробно сравнить их не могу, не пробовал, однако Node удобен языком, удобно переиспользовать код и сам яваскрипт под события и цепочки колбеков хорошо заточен.
Из той же оперы есть ещё eventmachine для ruby.
Так ли хороша парадигма одного процесса на приложение? Нужно либо очень внимательно следить за тем, чтобы в основном приложении не было узких мест, либо смириться с неэффективностью при отсутствии возможности ручного распараллеливания на многоядерных процессорах.
В той нише, которую занял node, это вполне оправдано. Врядли вы будете спорить с тем, что Nginx справляется со своеими задачами, а он в основном и сделан на event-loop. Вы можете возразить, что в Nginx параллельно работают несколько таких обработчиков. Но это можно сделать и на node, просто запустив несколько копий приложения. Если нужно связать отдельные потоки, то уже есть готовые библиотеки.

Наличие нескольких потоков в приложении не освобождает программиста от необходимости следить за узкими местами. Если есть вероятность, что какой-то поток намертво повиснет, то это подрывает доверие к такому приложению, так как могу повиснуть и два, и большее количество потоков. Фишка же node заключается в том, что подобные длительные операции, например обращение к диску или БД, выполняются в отдельном потоке или с помощью асинхронных функций операционной системы, а значит никогда не блокируют основной поток (цикл) выполнения.
Sign up to leave a comment.

Articles