Node Roundup: 0.10.36, io.js 1.0.4, Object.observe, Shipit

2015-01-28 00:00:00 +0000 by Alex R. Young

Node 0.10.36, io.js 1.0.4

The latest stable release of Node, 0.10.36, came out earlier this week. The changelog is short with just three bullets, but one thing that stands out is "v8: don't busy loop in cpu profiler thread". The commit for this is 6ebd85:

Before this commit, the thread would effectively busy loop and consume 100% CPU time. By forcing a one nanosecond sleep period rounded up to the task scheduler's granularity (about 50 us on Linux), CPU usage for the processor thread now hovers around 10-20% for a busy application.

In io.js, 1.0.4 has been released. I noticed in the changelog that there's a patch for V8 and ARMv6, so io.js should work again on platforms like Raspberry Pi.


It seems like I've been writing about a lot of frameworks that use ES6/7, but sometimes you just want a specific polyfill rather than an entire framework. A new polyfill that Massimo Artizzu sent me is for Object.observe (GitHub: MaxArt2501/object-observe, License: MIT, npm: object.observe, Bower: object.observe), which you can use with Node and browsers.

The readme explains the basic usage, but there's also more detailed documentation. This also explains the two versions of the API:

If you don't need to check for "reconfigure", "preventExtensions" and "setPrototype" events, and you are confident that your observed objects don't have to do with accessor properties or changes in their descriptors, then go for the light version, which should perform reasonably better on older and/old slower environments.

In Node 0.10.x, you can use it like this:

if (!Object.observe) require('object.observe');

This will avoid loading it when your version of Node gets Object.observe in the future.



Greg Bergé sent in Shipit (GitHub: shipitjs/shipit, License: MIT, npm: shipit-cli), a deployment tool. It can use SSH to sign in to a server and run scripts, and it handles multiple environments so you can create settings that will work for production, staging, CI, and so on.

It has an event-based API with tasks, in a style that reminds me of Grunt and Gulp. It uses plain old SSH and rsync under the hood.

Shipit recently got lots of attention because Ghost uses it. I haven't been able to find an exact reference to Shipit in Ghost's source, so it's presumably used for deploying their commercial hosted solution. However, I actually thought Shipit might be useful as part of Ghost's open source stack, because it would help support people who download Ghost and deploy it to their own servers. It would be interesting to discover more about the Ghost connection.