The Nodesource Blog

Node.js 7.4.0 Release Brief

2017's first Node 7 release comes with several significant performance improvements, as well as a sizable upgrade to the bundled npm.

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

Overview

Of a total of 142 commits:

  • 30 were documentation-only commits.
  • 68 only modify tests and 3 only affect internal tooling.
  • Two dependencies were upgraded:

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

The remaining significant commits are as follows:

  • [d1843ec3a7] - async_wrap: clear destroy_ids vector (Trevor Norris) #10400
  • [022c743693] - benchmark: allow benchmarks to specify flags (Joyee Cheung) #10448
  • [0b2bc5e27b] - benchmark: add benchmark for WHATWG URL properties (Joyee Cheung) #10408
  • [10b3297e8f] - benchmark: use commas in non-csv rate output (Brian White) #10360
  • [6d15e7b528] - benchmark: refactor buffer benchmarks (Troy Connor) #10175
  • [797495a84a] - buffer: improve allocation performance (Brian White) #10443
  • [ad5ae922ce] - build: add /opt/freeware/… to AIX library path (Stewart X Addison) #10128
  • [cff57be2b6] - build: add (not) cross-compiled configure flags (Jesús Leganés-Combarro 'piranna) #10287
  • [80e798e324] - crypto: use CHECK_NE instead of ABORT or abort (Sam Roberts) #10413
  • [f9a5c13ff3] - dtrace: resolve conversion warnings from SLURP_INT (Christopher J. Brody) #10143
  • [66a9f013ac] - events: optimize arrayClone by copying forward (Benedikt Meurer) #10571
  • [7ece950ffe] - events: improve once() performance (Brian White) #10445
  • [6629f8f83f] - fs: cache non-symlinks in realpathSync. (Jeremy Yallop) #10253
  • [32b6bcdd83] - http: optimize headers iteration (Brian White) #6533
  • [a760d707ad] - http: simplify boolean checks (Brian White) #6533
  • [c8ad127abc] - http: extract validation functions (Brian White) #6533
  • [8a2a763f13] - http: improve validation performance (Brian White) #6533
  • [df8b8b257d] - http: refactor server connection handling (Brian White) #6533
  • [1f0fd7b35d] - http: misc cleanup and minor optimizations (Brian White) #6533
  • [b094b49659] - http: reuse existing headers array for raw values (Brian White) #6533
  • [4bed9475d1] - inspector: fix Coverity defects (Eugene Ostroukhov) #10240
  • [023956187e] - inspector: split HTTP/WS server from the inspector (Eugene Ostroukhov) #9630
  • [aed5e27451] - lib: avoid recompilation of anonymous functions (Brian White) #6533
  • [064607be58] - meta: modify pull request template for prepending (Rich Trott) #10484
  • [75efdeb635] - os: fix os.release() for aix and add test (jBarz) #10245
  • [6796bf4829] - repl: allow autocompletion for scoped packages (Evan Lucas) #10296
  • [11ed8007df] - src: describe what NODE_MODULE_VERSION is for (Sam Roberts) #10414
  • [5e5b1f8b89] - src: return early if nextTickQueue is empty (Trevor Norris) #10274
  • [3195fb45ae] - url: set toStringTag for the URL class (James M Snell) #10562
  • [659d522d7c] - url: fix accidental filemode change (James M Snell) #10549
  • [6977224059] - url: fix URL query update if searchParams changes (Michaël Zasso) #10486
  • [78e867492a] - url: improve spec compliance of WHATWG URL (Michaël Zasso) #10317
  • [2b98ea0dec] - url: move originFor, domainToAscii and domainToUnicode (James M Snell) #10512
  • [e210efad9e] - url: performance improvement in URL implementation (James M Snell) #10469
  • [7fbd12f876] - url: make WHATWG URL properties spec compliant (Joyee Cheung) #10408
  • [495213e545] - url: mark ignored return value in node::url::Parse(...) (Christopher J. Brody) #10141
  • [ba46374cb9] - watchdog: add flag to mark handler as disabled (Bartosz Sosnowski) #10248

Notable Changes

  • buffer:
    • Improved performance of Buffer allocation by ~11%. (Brian White) #10443
    • Improved performance of Buffer.from() by ~50%. (Brian White) #10443
  • events: Improved performance of EventEmitter.once() by ~27%. (Brian White) #10445
  • fs: Uint8Arrays may now be passed to fs methods where Buffers are supported. (Anna Henningsen) #10382
  • http: Improved performance of http servers by ~7%. (Brian White) #6533
  • npm: Upgraded to 4.0.5 (Kat Marchán) #10330

Git Diffstats

(Showing the delta between 7.3.0 and 7.4.0, ignoring deps/npm.)

Without deps, tools, docs, benchmarks, or tests:

 .eslintrc                      |   3 +-
 configure                      |  19 +-
 lib/_http_common.js            | 101 +++--
 lib/_http_incoming.js          |  12 +-
 lib/_http_outgoing.js          |  75 ++--
 lib/_http_server.js            | 449 +++++++++++-----------
 lib/_stream_readable.js        |   6 +-
 lib/_stream_writable.js        |  35 +-
 lib/buffer.js                  |   8 +-
 lib/events.js                  |  29 +-
 lib/fs.js                      |  14 +-
 lib/internal/url.js            | 803 +++++++++++++++++++++------------------
 lib/repl.js                    |  11 +-
 lib/url.js                     |   9 +-
 node.gyp                       |  31 +-
 src/async-wrap.cc              |   6 +-
 src/inspector_agent.cc         | 424 +++++++--------------
 src/inspector_agent.h          |   3 +-
 src/inspector_socket_server.cc | 473 +++++++++++++++++++++++
 src/inspector_socket_server.h  |  77 ++++
 src/node.cc                    |   1 +
 src/node_crypto.cc             |   7 +-
 src/node_dtrace.cc             |   2 +-
 src/node_os.cc                 |   7 +
 src/node_url.cc                |  84 ++--
 src/node_util.cc               |   3 +-
 src/node_version.h             |   5 +-
 src/node_watchdog.cc           |  13 +-
 src/node_watchdog.h            |   1 +
 29 files changed, 1640 insertions(+), 1071 deletions(-)

Tools only:


Deps only:

 deps/icu-small/source/common/locmap.c          |   2 +-
 deps/icu-small/source/common/ucasemap.cpp      |   5 ++++-
 deps/icu-small/source/common/unicode/uvernum.h |   6 +++---
 deps/icu-small/source/common/ustrcase.cpp      |   3 +++
 deps/icu-small/source/data/in/icudt58l.dat     | Bin 2680800 -> 2682224 bytes
 deps/icu-small/source/i18n/digitlst.cpp        |   4 ++--
 deps/icu-small/source/i18n/scriptset.cpp       |   2 +-
 deps/icu-small/source/i18n/uspoof.cpp          |   7 -------
 8 files changed, 14 insertions(+), 15 deletions(-)

Docs only:

 .github/PULL_REQUEST_TEMPLATE.md |   7 +-
 BUILDING.md                      |   4 +-
 CHANGELOG.md                     |   3 +-
 COLLABORATOR_GUIDE.md            |   2 +-
 CONTRIBUTING.md                  |  96 +++++++++++++--
 README.md                        |   6 +-
 WORKING_GROUPS.md                | 231 +++----------------------------------
 benchmark/README.md              |  67 +++++++++--
 doc/api/child_process.md         |  24 +++-
 doc/api/cluster.md               |  45 ++++----
 doc/api/console.md               |  29 +++--
 doc/api/dgram.md                 |  18 +--
 doc/api/domain.md                |   6 +-
 doc/api/fs.md                    |  12 +-
 doc/api/globals.md               |  51 +++++---
 doc/api/modules.md               |  10 +-
 doc/api/process.md               |   4 +-
 doc/api/repl.md                  |  58 +++++-----
 doc/api/stream.md                |  20 ++--
 doc/api/tls.md                   |  62 +++++-----
 doc/api/vm.md                    |  20 +++-
 doc/changelogs/CHANGELOG_V7.md   | 160 +++++++++++++++++++++++++
 doc/guides/maintaining-V8.md     | 121 +++++++++++++------
 doc/onboarding.md                |  15 ++-
 24 files changed, 638 insertions(+), 433 deletions(-)

Tests & Benchmarks only:

   0.7% benchmark/buffers/
   0.2% benchmark/events/
   0.1% benchmark/misc/
   1.2% benchmark/url/
   1.5% benchmark/
  10.9% test/cctest/
   2.2% test/debugger/
   0.0% test/fixtures/node_modules/@nodejsscope/
   7.0% test/fixtures/
   2.6% test/internet/
   0.2% test/known_issues/
  65.2% test/parallel/
   0.6% test/pseudo-tty/
   5.7% test/sequential/
   1.2% test/
 116 files changed, 2976 insertions(+), 1627 deletions(-)

Most active commit

Of the 142 commits, 0239561 was the most active:
(Excluding docs, npm, eslint, and tests.)

commit 023956187e124172707761a238201ea2dc8c6b9b
Author: Eugene Ostroukhov <eostroukhov@chromium.org>
Date:   Wed Nov 9 14:19:35 2016 -0800

    inspector: split HTTP/WS server from the inspector

    Both our team experiments and some embedder request indicate a potential
    in implementing alternative transport for inspector - e.g. IPC pipes or
    custom embedder APIs. This change moves all HTTP specific code into a
    separate class and is a first attempt at defining a boundary between the
    inspector agent and transport. This API will be refined as new
    transports are implemented.
    Note that even without considering alternative transports, this change
    enables better testing of the HTTP server (Valgrind made it possible to
    identify and fix some existing memory leaks).

    PR-URL: https://github.com/nodejs/node/pull/9630
    Reviewed-By: James M Snell <jasnell@gmail.com>
    Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>

 node.gyp                                    |  21 +-
 src/inspector_agent.cc                      | 424 +++++++--------------
 src/inspector_agent.h                       |   3 +-
 src/inspector_socket_server.cc              | 471 +++++++++++++++++++++++
 src/inspector_socket_server.h               |  77 ++++
 test/cctest/test_inspector_socket_server.cc | 517 ++++++++++++++++++++++++++
 6 files changed, 1212 insertions(+), 301 deletions(-)

This is a regular and routine release for a Node.js Current 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.