Вышла node.js версии 0.4
Основные отличия от ветки 0.2:
- Полностью переработанный модуль TLS/SSL. Ранее биндинги к коду OpenSSL плотно переплетались с кодом сокетов. Сейчас всё переработано чтобы представлять защищённое соединение как пару "потоков": двусторонний поток защищенных данных и двусторонний открытый поток. Зашифрованный поток передаётся в TCP сокет с помощью стандартного Stream.prototype.pipe().
- Выделение буферов стало быстрее. Node использует буферы во многих ситуациях. Было замечено что выделение новых буферов работало довольно медленно и сборка мусора в них была сложной. Теперь буферы это чистые объекты javascript вместо ObjectWrap - это положительно сказалось на производительности.
- Теперь, когда у нас уже есть некоторый опыт, код загрузки модулей был модифицирован для лучшей поддержки менеджеров пакетов. В частности, NPM приходилось пользоваться глубокими симлинками и "подставными" модулями чтобы обойти недостающие фичи в работе require(). Основные изменения:
- require() теперь использует realpath. Т.е., теперь эта функция может следовать по символическим ссылкам. Теперь модули с символическими ссылками могут делать require() используя относительные пути.
- require() теперь понимает формат package.json. В соответствии с ним теперь определяется главный скрипт модуля. Это позволяет использовать require прямо с директорией модуля.
- Директория node_modules просматривается внутри текущей в поисках подключаемых модулей. Будем надеяться что это поможет программистам лучше структурировать свои модули не полагаясь на глобальное пространство имён.
- Начата работа над нативной сборкой под MinGW. Инструкции по сборке можно найти в вики.
- Версия V8 обновлена до последней, v3.1.2. Сюда также входят многие возможности вроде новой инфраструктуры компиляции и плагин GDB для Linux. Подробности можно узнать в логе изменений V8.
- В node был добавлен встроенный клиент для отладчика V8. Он пока довольно примитивный, но вполне подходит для несложных задач. Уже есть небольшое вступительное видео (на английском) и документация.
- Райаном Уайтом добавлен модуль os, предоставляющий доступ к полезной информации о системе: os.cpus(), os.freemem, os.totalmem, os.loadavg
- И, само собой, исправления ошибок. Полную информацию можно найти в официальном Changelog
Скачать новую версию можно здесь.
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
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
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/
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/
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
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
};
});
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 добавлены синхронные варианты функций, блокирующие выполнение до своего завершения. Синхронные варианты имеют приставку Sync — fs.rename(path1, path2, callback) соответствует fs.renameSync(path1, path2). В высокопроизводительном коде программистам настойчиво рекомендуется применять асинхронные версии. Синхронная версия блокирует выполнение всего кода, в том числе event loop, препятствуя обработке соединений пока операция с файловой системой не завершится.
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)
Релиз 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
* И другие незначительные исправления и улучшения производительности.