The Nodesource Blog

#shoptalk Subscribe

Node.js v5.4.0 Release Brief

With collaborators back from Holidays, this Node.js stable release marks the beginning of a new year for Node, being the first release of 2016.
Expect the regular weekly-ish cadence of Stable releases in the weeks and months to come with releases coming to LTS as needed.

As with all releases within major version lines, minor and patch upgrades should be drop-in replacements for previous versions. Rebuilding add-ons should not be necessary.

Overview

Of a total of 98 commits:

  • 26 were documentation-only commits.
  • 41 only modify tests and 2 only affect internal tooling.
  • One V8 commit was backported from V8 upstream: 200315c as b4c51c5

2 commits were tagged as semver-minor, adding new functionality and justifying the jump to v5.4.0:

  • [1dd2d015d2] - (SEMVER-MINOR) http: handle errors on idle sockets (José F. Romaniello) #4482
  • [c77fd6829a] - (SEMVER-MINOR) http: 451 status code "Unavailable For Legal Reasons" (Max Barinov) #4377

The remaining significant commits are as follows:

  • [d265fc821a] - assert: typed array deepequal performance fix (Claudio Rodriguez) #4330
  • [6d8053ab56] - buffer: faster case for create Buffer from new Buffer(0) (Jackson Tian) #4326
  • [8781c59878] - buffer: refactor create buffer (Jackson Tian) #4340
  • [252628294b] - child_process: guard against race condition (Rich Trott) #4418
  • [fcf632bc6a] - crypto: load PFX chain the same way as regular one (Fedor Indutny) #4165
  • [a5094a35a0] - debugger: guard against call from non-node context (Ben Noordhuis) #4328
  • [e742422757] - fs: use pushValueToArray for readdir(Sync) (Trevor Norris) #3780
  • [083ae166bb] - http: use self.keepAlive instead of self.options.keepAlive (Damian Schenkelman) #4407
  • [ffb4a6e0e4] - http: fix non-string header value concatenation (Brian White) #4460
  • [8f7af9a489] - http: remove excess calls to removeSocket (Dave) #4172
  • [b841967103] - http: Remove an unnecessary assignment (Bo Borgerson) #4323
  • [b8366e76dd] - http_parser: use pushValueToArray for headers (Trevor Norris) #3780
  • [ca97e7276e] - https: use servername in agent key (Fedor Indutny) #4389
  • [b5aaccc6af] - lib: remove unused modules (Rich Trott) #4396
  • [921fb540c1] - node: improve performance of process.hrtime() (Evan Lucas) #4484
  • [ecef817a28] - node: improve accessor perf of process.env (Trevor Norris) #3780
  • [89f056bdf3] - node: improve performance of hrtime() (Trevor Norris) #3780
  • [c8fc217dc7] - node: improve GetActiveHandles performance (Trevor Norris) #3780
  • [8464667071] - node: fix erroneously named function call (Trevor Norris) #3780
  • [e57fd51a5e] - os: fix crash in GetInterfaceAddresses (Martin Bark) #4272
  • [65c40d753f] - repl: remove unused function (Rich Trott)
  • [3d41a44dba] - repl: Fixed node repl history edge case. (Mudit Ameta) #4108
  • [d11930d604] - repl: use String#repeat instead of Array#join (Evan Lucas) #3900
  • [69343d6d2e] - tls_wrap: clear errors on return (Fedor Indutny) #4515
  • [14a947fc70] - tools: run tick processor without forking (Matt Loring) #4224
  • [8039ca06eb] - util: faster arrayToHash (Jackson Tian)

Notable Changes

  • http:
    • A new status code was added: 451 - "Unavailable For Legal Reasons" (Max Barinov) #4377.
    • Idle sockets that have been kept alive now handle errors (José F. Romaniello) #4482.
  • This release also includes several minor performance improvements:
    • assert: deepEqual is now speedier when comparing TypedArrays (Claudio Rodriguez) #4330.
    • lib: Use arrow functions instead of bind where possible (Minwoo Jung) node#3622.
    • node: Improved accessor perf of process.env (Trevor Norris) #3780.
    • node: Improved performance of process.hrtime() (Trevor Norris) #3780, (Evan Lucas) #4484.
    • node: Improved GetActiveHandles performance (Trevor Norris) #3780.
    • util: Use faster iteration in util.format() (Jackson Tian) #3964.

Git Diffstats

(Showing the delta between v5.3.0 and v5.4.0, ignoring deps/npm.)

Without deps, docs, benchmarks, or tests:

 .eslintignore                     |   1 +
 .eslintrc                         |   2 +
 Makefile                          |   3 +
 lib/_http_agent.js                |   4 +-
 lib/_http_client.js               |  10 +-
 lib/_http_incoming.js             |   2 +-
 lib/_http_outgoing.js             |   2 +-
 lib/_http_server.js               |   1 +
 lib/assert.js                     |   5 +
 lib/buffer.js                     |  24 ++---
 lib/https.js                      |   4 +
 lib/internal/child_process.js     |   3 +
 lib/internal/repl.js              |  24 +++--
 lib/internal/v8_prof_polyfill.js  |  28 +++---
 lib/internal/v8_prof_processor.js |  33 ++-----
 lib/os.js                         |   1 -
 lib/repl.js                       |   6 +-
 lib/url.js                        |   4 +-
 lib/util.js                       |   5 +-
 node.gyp                          |   1 -
 src/debug-agent.cc                |   2 +
 src/env.h                         |  12 ++-
 src/node.cc                       | 112 ++++++++++++----------
 src/node.js                       |  27 +++++-
 src/node_crypto.cc                | 185 +++++++++++++++++++++++-------------
 src/node_crypto.h                 |  15 +++
 src/node_file.cc                  |  37 ++++++--
 src/node_http_parser.cc           |  23 +++--
 src/node_os.cc                    |   2 +-
 src/node_version.h                |   2 +-
 src/tls_wrap.cc                   |  10 +-
 tools/doc/addon-verify.js         |   7 ++
 tools/doc/json.js                 |   2 +-
 tools/test.py                     |  17 +++-
 34 files changed, 409 insertions(+), 207 deletions(-)

Deps only:

 deps/v8/src/ast-value-factory.cc             | 30 ++++++++++++++++++++++----
 deps/v8/test/mjsunit/regress/regress-4450.js |  8 +++++++
 2 files changed, 34 insertions(+), 4 deletions(-)

Docs only:

 CHANGELOG.md                    |  123 +++++
 WORKING_GROUPS.md               |   43 +-
 doc/api/addons.markdown         |  338 ++++++++----
 doc/api/assert.markdown         |  295 ++++++++--
 doc/api/buffer.markdown         | 1008 ++++++++++++++++++++++-------------
 doc/api/child_process.markdown  | 1067 +++++++++++++++++++++----------------
 doc/api/cluster.markdown        |   95 ++--
 doc/api/console.markdown        |  180 +++++--
 doc/api/crypto.markdown         |   44 +-
 doc/api/debugger.markdown       |   72 +--
 doc/api/dgram.markdown          |  353 +++++++-----
 doc/api/dns.markdown            |  323 +++++------
 doc/api/domain.markdown         |   56 +-
 doc/api/errors.markdown         |  700 ++++++++++++------------
 doc/api/events.markdown         |  358 +++++++++----
 doc/api/fs.markdown             |   42 +-
 doc/api/http.markdown           |   80 +--
 doc/api/https.markdown          |   48 +-
 doc/api/modules.markdown        |   33 +-
 doc/api/net.markdown            |   45 +-
 doc/api/process.markdown        |  108 ++--
 doc/api/readline.markdown       |   42 +-
 doc/api/repl.markdown           |   26 +-
 doc/api/stream.markdown         |  105 ++--
 doc/api/string_decoder.markdown |    8 +-
 doc/api/synopsis.markdown       |    4 +-
 doc/api/timers.markdown         |   23 +-
 doc/api/tls.markdown            |   54 +-
 doc/api/tty.markdown            |    4 +-
 doc/api/util.markdown           |   50 +-
 doc/api/v8.markdown             |    2 +-
 doc/api/vm.markdown             |   40 +-
 doc/api/zlib.markdown           |   32 +-
 doc/releases.md                 |   42 +-
 34 files changed, 3566 insertions(+), 2277 deletions(-)

Tests & Benchmarks only:

   2.4% benchmark/assert/
   0.4% benchmark/buffers/
   1.0% benchmark/fs/
   1.9% benchmark/http/
   0.8% benchmark/misc/
   0.4% benchmark/util/
   0.1% test/addons/at-exit/
   0.0% test/addons/buffer-free-callback/
   0.0% test/addons/repl-domain-abort/
   0.4% test/debugger/
   3.9% test/fixtures/keys/
   0.0% test/fixtures/
   0.2% test/gc/
   0.8% test/internet/
   3.1% test/message/
  78.0% test/parallel/
   2.0% test/pummel/
   2.0% test/sequential/
   0.1% test/timers/
   1.5% test/
 519 files changed, 1335 insertions(+), 905 deletions(-)

Most active commit

Of the 98 commits, cd79ec2 was the most active (not counting npm or doc updates):

commit cd79ec268db8e9ba83c090dc8f9e61eaca9d06e6
Author: Rich Trott <rtrott@gmail.com>
Date:   Wed Dec 23 16:02:12 2015 -0800

    test: remove unnecessary assignments

    common.js needs to be loaded in all tests so that there is checking
    for variable leaks and possibly other things. However, it does not
    need to be assigned to a variable if nothing in common.js is referred
    to elsewhere in the test.

    PR-URL: https://github.com/nodejs/node/pull/4408
    Reviewed-By: James M Snell <jasnell@gmail.com>

   5.6% test/message/
  84.2% test/parallel/
   3.1% test/pummel/
   5.0% test/sequential/
 313 files changed, 317 insertions(+), 317 deletions(-)

This is a regular and routine release for a Node.js stable release line. We will be sure to let you know when a release contains a critical update and a recommendation to upgrade. Of course, we'd love you to upgrade, but this release is not critical unless you are experiencing one of the issues identified and fixed above.