nodeJS Быстрый веб-сервер на javascript движке V8

10Фев/1110

Вышла node.js версии 0.4

Основные отличия от ветки 0.2:

  • Полностью переработанный модуль TLS/SSL. Ранее биндинги к коду OpenSSL плотно переплетались с кодом сокетов. Сейчас всё переработано чтобы представлять защищённое соединение как пару "потоков": двусторонний поток защищенных данных и двусторонний открытый поток. Зашифрованный поток передаётся в TCP сокет с помощью стандартного Stream.prototype.pipe().
  • Выделение буферов стало быстрее. Node использует буферы во многих ситуациях. Было замечено что выделение новых буферов работало довольно медленно и сборка мусора в них была сложной. Теперь буферы это чистые объекты javascript вместо ObjectWrap - это положительно сказалось на производительности.
  • Теперь, когда у нас уже есть некоторый опыт, код загрузки модулей был модифицирован для лучшей поддержки менеджеров пакетов. В частности, NPM приходилось пользоваться глубокими симлинками и "подставными" модулями чтобы обойти недостающие фичи в работе require(). Основные изменения:
    1. require() теперь использует realpath. Т.е., теперь эта функция может следовать по символическим ссылкам. Теперь модули с символическими ссылками могут делать require() используя относительные пути.
    2. require() теперь понимает формат package.json. В соответствии с ним теперь определяется главный скрипт модуля. Это позволяет использовать require прямо с директорией модуля.
    3. Директория node_modules просматривается внутри текущей в поисках подключаемых модулей. Будем надеяться что это поможет программистам лучше структурировать свои модули не полагаясь на глобальное пространство имён.
  • Начата работа над нативной сборкой под MinGW. Инструкции по сборке можно найти в вики.
  • Версия V8 обновлена до последней, v3.1.2. Сюда также входят многие возможности вроде новой инфраструктуры компиляции и плагин GDB для Linux. Подробности можно узнать в логе изменений V8.
  • В node был добавлен встроенный клиент для отладчика V8. Он пока довольно примитивный, но вполне подходит для несложных задач. Уже есть небольшое вступительное видео (на английском) и документация.
  • Райаном Уайтом добавлен модуль os, предоставляющий доступ к полезной информации о системе: os.cpus(), os.freemem, os.totalmem, os.loadavg
  • И, само собой, исправления ошибок. Полную информацию можно найти в официальном Changelog

Скачать новую версию можно здесь.

Метки записи: , 10 Комментарии
24Май/100

Node.js обновился до v0.1.96

v0.1.94

* Глобальные модули перемещены в /usr/local/lib/node

* улучшен SSL (Rhys Jones, Paulo Matias)

* Добавлены заголовки c-ares для linux-arm (Jonathan Knezek)

* Добавлены symbols в окончательную сборку

* HTTP улучшения и документация (Micheil Smith)

* HTTP server передаёт сообщение 'clientError' вместо сообщения об ошибке

* Bugfix: не передаёт 'error' дважды из http.Client

* Bugfix: Игнорирование SIGPIPE

* Bugfix: destroy() вместо end() в http соединении

* Bugfix: http.Client  может преждевременно освобождать свободное соединение.  (Thomas Lee)

v0.1.95

* Поправилисборщик мусора, чтобы он мог работать вместе с setInterval

* Инсталлирует node_buffer.h на make install

1Май/103

Node.js v0.1.92 и v0.1.93

v0.1.92

* поддержка OpenSSL. Пока не документирована. (see tests). (Rhys Jones)

* API: Не обрабатываемый  обработчик ошибки 'error'.

* Класс с eval-function-family в binding('evals') +тесты.
(Herbert Vojcik)

* stream.setKeepAlive (Julian Lamb)

* Bugfix: Не передавать body при http 204 и 304

* Обновлён Waf до 1.5.16, V8 до 2.2.4.2

v0.1.93

* Исправлена ошибка события 'end' на длинных фрагментированных HTTP сообщениях
http://github.com/ry/node/issues/#issue/77

* Удалены модули http_old и tcp_old

* Поддержка DNS MX (Jérémy Lal)

* Исправлена запись больших сообщений в сокеты (t...@tlb.org)

* Исправлена ошибка с кодами выхода дочерних процессов (Felix Geisendörfer)

* Возможность отключить стиль передачи параметров от PHP/Rails в querystring.stringify (Thomas Lee)

* Обновлён V8 to 2.2.6

15Апр/101

Node v0.1.91

* Добавлен httpVersion во входяший запрос

* Проблемы Object.prototype с C-Ares binding

* REPL может  быть запущен с разных потоков. (Matt Ranney)

* Улучшения связанные со сборщиком мусора

* Улучшен nextTick.

* Добавлена приметивная  поддержка Upgrading HTTP connections.
(See commit log for docs 760bba5)

* Добавлены timeout и maxBuffer опции в child_process.exec

* Поправлены баги.

* Обновлён V8 до 2.2.3.1

Скачать: http://nodejs.ru/download
Документация: http://nodejs.org/api.html
Оф.Сайт: http://nodejs.org/

Метки записи: , 1 комментарий
10Апр/100

Node v0.1.90

* Обновлены сетевые модули (net2)
- Новый буффер для бинарных данных
- Поддержка UNIX sockets, Pipes
- Унифицировано stream API
- Всё ещё нет SSL
- Старые модули доступны как 'http_old' и 'tcp_old'

* udns заменён на c-ares. (Krishna Rajendran)

* Новая документация использующая Markdown и Ronn
(Tim Caswell, Micheil Smith)

* Улучшен сборщик мусора

* Бесчисленные исправления мелких багов

* Обновлён V8 to 2.2.X
+ Оптимизации быстродействия для арифметических операций
+ Оптимизации быстродействия для операций со строками
+ Улучшен дебаггер
+ Новое API для управления сборщиком мусора
+ Улучшена производительность на всех платформах
+ Бесчисленные исправления мелких багов

* Обновлён WAF 1.5.15

Скачать: http://nodejs.ru/download
Документация: http://nodejs.org/api.html
Оф.Сайт: http://nodejs.org/

22Мар/100

Node v0.1.33

* Появилась директория lib/ для системных модулей на js
* рефакторинг evalcx (Isaac Z. Schlueter, Tim-Smart)
* Исправлены баги, улучшен код
* V8 обновлена до 2.1.5
+ Оптимизации быстродействия для арифметических операций
+ Оптимизации быстродействия для операций со строками

Скачать: http://nodejs.ru/download
Оф. Сайт: http://nodejs.org/
Документация: http://nodejs.org/api.html

18Мар/103

Node.js 0.1.32

  • Код events.EventEmitter оптимизирован для случая с одним обработчиком событий (Listener)
  • Добавлен process.evalcx (выполение стороннего кода в произвольном контексте), require.registerExtension (возможность добавлять свои обработчики для типов подключаемых файлов)
  • Замена --cflags на --vars
  • Исправлены баги в fs.create*Stream (Felix Geisendörfer)
  • Удалены из Node (deprecated) process.mixin и process.unloop
  • Некоторые сообщения об ошибках сделаны более подробными, и включают в себя stack trace
  • Исправлены баги в парсере INI-файлов (Isaac Schlueter)
  • Исправления в версии для FreeBSD (Vanilla Hsu)
  • V8 обновлён до 2.1.3, WAF и libev обновлены

Интересное дополнение тут одно: require.registerExtension. Оно позволяет регистрировать собственные обработчики для подключаемых типов файлов. Например, чтобы исходники подключаемых модулей с расширением .coffee передавались в функцию compileCoffee, можно сделать так:

// Вернёт скомпилированную строку JavaScript
require.registerExtension('.coffee', function(async, source, callback) {
return compileCoffee(source);
});

Или можно компилировать шаблоны Mu, подключая их как модули:

// Возвращает объект
require.registerExtension('.mu', function(async, source, callback) {
return {
html: compileTemplate(source),
test: 321
};
});

Метки записи: , 3 Комментарии
22Фев/100

Node.js 0.1.30

Новая, богатая на изменения версия :)

  • Глобальные изменения API:
    • Promises убраны, принят другой стиль написания кода: с передачей флага ошибки в callback первым параметром
    • Доступны синхронные операции с файловой системой (используйте с осторожностью)
    • Методы tcp.Connection.prototype.readPause() и readResume() переименованы в pause() и resume.
    • http.ServerResponse.prototype.sendHeader() переименован в writeHeader и принимает параметр reasonPhrase
  • Улучшен алгоритм сборки мусора в моменты простоя
  • Настраиваемые порты для отладки и опция --debug-brk
  • Улучшен алгоритм разбора опций командной строки
  • Добавлены методы fs.chmod() и fs.lstat
  • Исправления в методе process.mixin()
  • V8 обновлён до версии 2.1.1

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

Раньше код с Promises выглядел так:

1
2
3
 fs.readdir("/usr").addCallback(function (files) { 
     puts("/usr files: " + files); 
 });

Теперь используется такой синтаксис:

1
2
3
4
fs.readdir("/usr", function (err, files) { 
      if (err) throw err; 
      puts("/usr files: " + files); 
 });

В модуль fs добавлены синхронные варианты функций, блокирующие выполнение до своего завершения. Синхронные варианты имеют приставку Syncfs.rename(path1, path2, callback) соответствует fs.renameSync(path1, path2). В высокопроизводительном коде программистам настойчиво рекомендуется применять асинхронные версии. Синхронная версия блокирует выполнение всего кода, в том числе event loop, препятствуя обработке соединений пока операция с файловой системой не завершится.

18Фев/101

nodeJS 0.1.29

* Изменения в API
- Удалён модуль 'file'
- require('posix') -----------------> require('fs')
- fs.cat ---------------------------> fs.readFile
- file.write -----------------------> fs.writeFile
- TCP 'receive' event --------------> 'data'
- TCP 'eof' event ------------------> 'end'
- TCP send() -----------------------> write()
- HTTP sendBody() ------------------> write()
- HTTP finish() --------------------> close()
- HTTP 'body' event ----------------> 'data'
- HTTP 'complete' event ------------> 'end'
- http.Client.prototype.close() (formerly finish())
Теперь без аргументов. Добавляйте 'response' listener manually.
- Теперь можно строки для флагов в fs.open
("r", "r+", "w", "w+", "a", "a+")

* Добавлено неограниченное количество аргументов для sys.puts(), print(), и.т.д
(t...@vision-media.ca)

* sys.inspect(Date) Теперь показывает дату (Mark Hansen)

* Посчитать размер страницы через getpagesize для armel (Jérémy Lal)

* Bugfix: stderr flushing.

* Bugfix: Promise late chain (Yuichiro MASUI)

* Bugfix: wait() для сработавших promises
(Felix Geisendörfer, Jonas Pfenniger)

* Bugfix: InstanceTemplate() вместо PrototypeTemplate() для методов получателей.
(Zoran Tomicic)

* Bugfix: Throw из connection.connect поправили.
(Reported by James Golick)

6Фев/100

Релиз nodeJS v0.1.27

* Добавлена __dirname (Felix Geisendörfer)

* Изменили process.ARGV, process.ENV, GLOBAL
Теперь используем: process.argv, process.env, global

* Исправлен баг с опаздывающими коллбеками
(Felix Geisendörfer, Jonas Pfenniger)

* Добавили тип ошибок: assert.AssertionError

* Удалён вызов require call для строки
(Alexis Sellier)

* Добавлена поддержка MX, TXT, и SRV записей в модуле DNS.
(Blaine Cook)

* HTTP клиент теперь автоматически переподключается.

* Добавлен скрипт для сборки .dmg (для OS X) (Standa Opichal)

* Исправлена утечка памяти в ObjectWrap.

* Исправлен баг связанный с заголовками Content-Type с указанной кодировкой в Multipart запросах
(Felix Geisendörfer)

* http-parser больше не подвержен атаке с переполнением заголовков.

* Обновлён V8 до 2.1.0

* И другие незначительные исправления и улучшения производительности.