Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Door , , 15 reacties
Bron: Node.js, submitter: begintmeta

Node.js is opensource en platformonafhankelijk en is gericht op het ontwikkelen van server-side-webapplicaties. Die applicaties worden geschreven in JavaScript en uitgevoerd binnen de Node.js runtime op de server. Het biedt een event-gedreven omgeving aan waarbij non-blocking I/O een belangrijk uitgangspunt is geweest. Voor meer informatie verwijzen we jullie door naar deze pagina. Het ontwikkelteam heeft enkele dagen geleden versie 4.0.0 vrijgegeven en voorzien van de volgende veranderingen:

Notable changes

This list of changes is relative to the last io.js v3.x branch release, v3.3.0. Please see the list of notable changes in the v3.x, v2.x and v1.x releases for a more complete list of changes from 0.12.x. Note, that some changes in the v3.x series as well as major breaking changes in this release constitute changes required for full convergence of the Node.js and io.js projects.
  • child_process: ChildProcess.prototype.send() and process.send() operate asynchronously across all platforms so an optional callback parameter has been introduced that will be invoked once the message has been sent, i.e..send(message[, sendHandle][, callback]) (Ben Noordhuis) #2620.
  • node: Rename "io.js" code to "Node.js" (cjihrig) #2367.
  • node-gyp: This release bundles an updated version of node-gyp that works with all versions of Node.js and io.js including nightly and release candidate builds. From io.js v3 and Node.js v4 onward, it will only download a headers tarball when building addons rather than the entire source. (Rod Vagg) #2700
  • npm: Upgrade to version 2.14.2 from 2.13.3, includes a security update, see https://github.com/npm/npm/releases/tag/v2.14.2 for more details, (Kat Marchán) #2696.
  • timers: Improved timer performance from porting the 0.12 implementation, plus minor fixes (Jeremiah Senkpiel) #2540, (Julien Gilli) nodejs/node-v0.x-archive#8751 nodejs/node-v0.x-archive#8905
  • util: The util.is*() functions have been deprecated, beginning with deprecation warnings in the documentation for this release, users are encouraged to seek more robust alternatives in the npm registry, (Sakthipriyan Vairamani) #2447.
  • v8: Upgrade to version 4.5.103.30 from 4.4.63.30 (Ali Ijaz Sheikh) #2632.
    • Implement new TypedArray prototype methods: copyWithin(), every(), fill(), filter(), find(), findIndex(), forEach(), indexOf(), join(), lastIndexOf(), map(), reduce(), reduceRight(), reverse(), slice(), some(), sort(). See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray for further information.
    • Implement new TypedArray.from() and TypedArray.of() functions. See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray for further information.
    • Implement arrow functions, see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions for further information.
    • Full ChangeLog available at https://github.com/v8/v8-git-mirror/blob/4.5.103/ChangeLog
Known issues

See https://github.com/nodejs/node/labels/confirmed-bug for complete and current list of known issues.
  • Some uses of computed object shorthand properties are not handled correctly by the current version of V8. e.g. [{ [prop]: val }] evaluates to [{}]. #2507
  • Some problems with unreferenced timers running during beforeExit are still to be resolved. See #1264.
  • Surrogate pair in REPL can freeze terminal. #690
  • Calling dns.setServers() while a DNS query is in progress can cause the process to crash on a failed assertion. #894
  • url.resolve may transfer the auth portion of the url when resolving between two full hosts, see #1435.
Commits
  • [4f50d3fb90] - (SEMVER-MAJOR) This commit sets the value of process.release.name to "node". (cjihrig) #2367
  • [d3178d8b1b] - buffer: SlowBuffer only accept valid numeric values (Michaël Zasso) #2635
  • [0cb0f4a6e4] - build: fix v8_enable_handle_zapping override (Karl Skomski) #2731
  • [a7596d7efc] - build: remote commands on staging in single session (Rod Vagg) #2717
  • [be427e9efa] - build: make.msi install to "nodejs", not "node" (Rod Vagg) #2701
  • [5652ce0dbc] - build: fix.pkg creation tooling (Rod Vagg) #2687
  • [101db80111] - build: add --enable-asan with builtin leakcheck (Karl Skomski) #2376
  • [2c3939c9c0] - child_process: use stdio.fd even if it is 0 (Evan Lucas) #2727
  • [609db5a1dd] - child_process: check execFile and fork args (James M Snell) #2667
  • [d010568c23] - (SEMVER-MAJOR) child_process: add callback parameter to.send() (Ben Noordhuis) #2620
  • [c60857a81a] - cluster: allow shared reused dgram sockets (Fedor Indutny) #2548
  • [b2ecbb6191] - contextify: ignore getters during initialization (Fedor Indutny) #2091
  • [3711934095] - cpplint: make it possible to run outside git repo (Ben Noordhuis) #2710
  • [03f900ab25] - crypto: replace rwlocks with simple mutexes (Ben Noordhuis) #2723
  • [847459c29b] - (SEMVER-MAJOR) crypto: show exponent in decimal and hex (Chad Johnston) #2320
  • [e1c976184d] - deps: improve ArrayBuffer performance in v8 (Fedor Indutny) #2732
  • [cc0ab17a23] - deps: float node-gyp v3.0.0 (Rod Vagg) #2700
  • [b2c3c6d727] - deps: create.npmrc during npm tests (Kat Marchán) #2696
  • [babdbfdbd5] - deps: upgrade to npm 2.14.2 (Kat Marchán) #2696
  • [155783d876] - deps: backport 75e43a6 from v8 upstream (again) (saper) #2692
  • [5424d6fcf0] - deps: upgrade V8 to 4.5.103.30 (Ali Ijaz Sheikh) #2632
  • [c43172578e] - (SEMVER-MAJOR) deps: upgrade V8 to 4.5.103.24 (Ali Ijaz Sheikh) #2509
  • [714e96e8b9] - deps: backport 75e43a6 from v8 upstream (saper) #2636
  • [8637755cbf] - doc: add TSC meeting minutes 2015-09-02 (Rod Vagg) #2674
  • [d3d5b93214] - doc: update environment vars in manpage and --help (Roman Reiss) #2690
  • [29f586ac0a] - doc: update url doc to account for escaping (Jeremiah Senkpiel) #2605
  • [ba50cfebef] - doc: reorder collaborators by their usernames (Johan Bergström) #2322
  • [8a9a3bf798] - doc: update changelog for io.js v3.3.0 (Rod Vagg) #2653
  • [6cd0e2664b] - doc: update io.js reference (Ben Noordhuis) #2580
  • [f9539c19e8] - doc: update changelog for io.js v3.2.0 (Rod Vagg) #2512
  • [cded6e7993] - doc: fix CHANGELOG.md on master (Roman Reiss) #2513
  • [93e2830686] - (SEMVER-MINOR) doc: document deprecation of util.is* functions (Sakthipriyan Vairamani) #2447
  • [7038388558] - doc,test: enable recursive file watching in Windows (Sakthipriyan Vairamani) #2649
  • [f3696f64a1] - events,lib: don't require EE#listenerCount() (Jeremiah Senkpiel) #2661
  • [45a2046f5d] - (SEMVER-MAJOR) installer: fix installers for node.js rename (Frederic Hemberger) #2367
  • [7a999a1376] - (SEMVER-MAJOR) lib: add net.Socket#localFamily property (Ben Noordhuis) #956
  • [de88255b0f] - Revert "lib,src: add unix socket getsockname/getpeername" (Ben Noordhuis) #2584
  • [f337595441] - (SEMVER-MAJOR) lib,src: add unix socket getsockname/getpeername (Ben Noordhuis) #956
  • [3b602527d1] - (SEMVER-MAJOR) node: additional cleanup for node rename (cjihrig) #2367
  • [a69ab27ab4] - (SEMVER-MAJOR) node: rename from io.js to node (cjihrig) #2367
  • [9358eee9dd] - node-gyp: float 3.0.1, minor fix for download url (Rod Vagg) #2737
  • [d2d981252b] - src: s/ia32/x86 for process.release.libUrl for win (Rod Vagg) #2699
  • [eba3d3dccd] - src: use standard conform snprintf on windows (Karl Skomski) #2404
  • [cddbec231f] - src: fix buffer overflow for long exception lines (Karl Skomski) #2404
  • [dd3f3417c7] - src: re-enable fast math on arm (Michaël Zasso) #2592
  • [e137c1177c] - (SEMVER-MAJOR) src: enable vector ics on arm again (Ali Ijaz Sheikh) #2509
  • [7ce749d722] - src: replace usage of v8::Handle with v8::Local (Michaël Zasso) #2202
  • [b1a2d9509f] - src: enable v8 deprecation warnings and fix them (Ben Noordhuis) #2091
  • [808de0da03] - (SEMVER-MAJOR) src: apply debug force load fixups from 41e63fb (Ali Ijaz Sheikh) #2509
  • [5201cb0ff1] - src: fix memory leak in ExternString (Karl Skomski) #2402
  • [2308a27c0a] - src: only set v8 flags if argc > 1 (Evan Lucas) #2646
  • [384effed20] - test: fix use of common before required (Rod Vagg) #2685
  • [f146f686b7] - (SEMVER-MAJOR) test: fix test-repl-tab-complete.js for V8 4.5 (Ali Ijaz Sheikh) #2509
  • [fe4b309fd3] - test: refactor to eliminate flaky test (Rich Trott) #2609
  • [619721e6b8] - test: mark eval_messages as flaky (Alexis Campailla) #2648
  • [93ba585b66] - test: mark test-vm-syntax-error-stderr as flaky (João Reis) #2662
  • [367140bca0] - test: mark test-repl-persistent-history as flaky (João Reis) #2659
  • [f6b093343d] - timers: minor _unrefActive fixes and improvements (Jeremiah Senkpiel) #2540
  • [403d7ee7d1] - timers: don't mutate unref list while iterating it (Julien Gilli) #2540
  • [7a8c3e08c3] - timers: Avoid linear scan in _unrefActive. (Julien Gilli) #2540
  • [b630ebaf43] - win,msi: Upgrade from old upgrade code (João Reis) #2439
Versienummer:4.0.0
Releasestatus:Final
Besturingssystemen:Windows 7, Linux, BSD, Windows XP, macOS, UNIX, Windows Server 2003, Windows Vista, Windows Server 2008, Windows Server 2012, Windows 8, Windows 10
Website:Node.js
Download:https://nodejs.org/en/download/
Licentietype:Voorwaarden (GNU/BSD/etc.)
Moderatie-faq Wijzig weergave

Reacties (15)

Ze zitten niet stil, ondertussen is versie 4.1.0 ook alweer uit! Alhoewel: 4.0.0 was alweer een tijdje uit. NIet dat iedereen denkt dat ze binnen 1 dag van 4.0.0 naar 4.1.0 gaan.
Van mij had tweakers hier wel een gewoon artikel van mogen maken. (of een achtergrond verhaal)
Mee eens. Zelf ben ik C# developer, maar er is zoveel te doen rondom node.js en die ruzie destijds en fork met io.js en nu met een nieuwe major release zou het leuk zijn om een inhoudelijk artikeltje op tweakers te lezen voor mensen met een programmeerachtergrond in andere taal/talen. Ik zou best wel willen investeren (lees: leren/verdiepen) in node.js en zie best toekomst in deze server side javascript taal.
Ik ben zelf al 15 jaar C# ontwikkelaar en heb de laatste 2 jaar veel met Node gewerkt. Voor grote projecten gebruik ik liever C#/.NET, maar Javascript/Node heeft ook zo zijn aantrekkelijke kanten:

Node is async geörienteerd. Een beetje vergelijkbaar met de async. I/O van .NET. Helaas mist de onderliggende taal (JavaScript) hier wel support voor in de taal zelf. Daardoor gebeurt alles met callbacks. Tegenwoordig zie je een beetje de trend door met promises te gaan werken. Als je het door wilt trekken naar de .NET wereld, dan is dit een (slap) aftreksel van de TPL (async/await en tasks).

Een ander verschil is dat Node standaard eigenlijk alles op één enkele thread doet. Multi-threading zit er niet in, tenzij je clusters gebruikt. Sterk vereenvoudigd is het niet veel meer dan dat er een paar Node instanties parallel draaien. Iets als een threadpool is er dan ook niet. Door het asynchrone karakter mis je het eigenlijk niet. De meeste Node applicaties zijn toch I/O bound en die schalen daardoor prima. Daarbij voegt multi-threading ook complexiteit toe, die lang niet altijd begrepen wordt door de ontwikkelaars die er mee aan de slag gaan. In die gevallen eindigt het in een buggy en instabiele server. In NodeJS heb je geen multi-threading, dus ook geen deadlocks, race-conditions, ...

Verder zijn de streams een sterk concept in Node. Het is een beetje te vergelijken met de streams zoals je die in het .NET framework tegenkomt. Op detail niveau wel anders, maar het stelt je wel in staat om op een zeer efficiënte wijze met grote hoeveelheden data om te gaan.

Het probleem van Node zit hem vooral in de onderliggende taal. Javascript is ooit ontwikkeld als eenvoudige taal om wat client-side checks te kunnen doen. Het is in 10 dagen geschreven en met dat in het achterhoofd is het erg knap. Soms is Javascript een verademing, omdat je met weinig code heel veel kunt bereiken. Een nadeel is echter het gebrek aan structuur. Het is untyped, mist interfaces, generics, LINQ, ... Refactoring is daardoor erg lastig. TypeScript probeert dat probleem op te lossen, maar als je externe libraries gebruikt dan is dat wel een gedoe. Fouten treden vaak pas at-runtime op, dus unit-testing is nog veel belangrijker dan bij .NET. Hoe meer ik met andere talen werk, des te meer leer ik C# en .NET waarderen. Wel geinig is dat veel nieuwe features van C# 6 eigenlijk al veel langer in CoffeeScript (dialect van Javascript) waren te vinden.

Net als bij .NET heb je bij Node ook een uitgebreide community die bijdraagt aan de taal. NPM is de tegenhanger van .NET's NuGet. Het .NET framework is veel uitgebreider (bijv. XML en database ondersteuning). De standaard bibliotheek van Node bevat veel minder en dan moet je al snel naar 3rd-party packages uitwijken.

Als je altijd C#/.NET programmeert, dan is het best zinvol om eens een keer buiten het Microsoft bastion te gaan kijken. Het verbreed je blik, waardoor je ook de goede en slechte kanten van C#/.NET leert kennen.

[Reactie gewijzigd door BugBoy op 17 september 2015 20:23]

Bedankt voor je reactie! Ben het helemaal eens met je laatste alinea, dat is ook de reden dat ik best wel eens wat met node wil gaan doen. Ik heb in het verleden een heel klein beetje php gedaan en nog wat java, maar het punt is dat C# mij zo goed bevalt dat ik niet de drang heb om uit te wijken naar andere talen. Maar het is goed (en belangrijk) als je je ogen open houdt voor nieuwe ontwikkelingen. Daarom heb ik naast Visual Studio 2013/2015 ook Visual Studio Code, Atom.io, Brackets, Sublime als editors om te proberen en testen.

TypeScript is trouwens gemaakt door Anders Hejlsberg van Microsoft die ook de lambda => heeft geregeld in C#.

Wat ik erg gaaf vind trouwens is dat Microsoft met .net 5 wat er aan komt, steeds meer kijkt naar de community en die tools gebruikt. Gulp, Bower, Grunt, NPM.

Met welke editor heb je gewerkt of werk je aan je node klussen? Visual Studio? of Notepad++ of een van de editors die ik eerder heb genoemd?
Microsoft support het ook best goed (volgens mij) misschien kun jij met node ervaring daar wat over zeggen?
https://nodejstools.codeplex.com/ (visual studio)
https://code.visualstudio.com/Docs/runtimes/nodejs (visual studio code)
Anders Hejlsberg weet wel waar het om draait als het gaat om talen. De verbeteringen in TypeScript zijn erg handig voor refactoring, intellisense en transpile-time error checking. Maar als je externe libraries gebruikt (en dat doe je erg snel) dan ben je overgeleverd aan derden die TypeScript wrappers hebben gemaakt. Dat is vaak niet ideaal. Daarbij ben ik gecharmeerd van CoffeeScript, omdat met wat callbacks JavaScript en TypeScript bijna lijken op het ouderwetse LISP met al die haakjes en accolades :)

Ik gebruik zelf nog JetBrains Webstorm. Dat is een prima IDE voor een redelijke prijs. Visual Studio 2015 met NodeJS support staat nog altijd op mijn lijstje op een keer serieus in te duiken. Maar dan moet ik wel naar Windows en dat vind ik net even wat minder handig voor Node en Web ontwikkeling. Tooling onder OS X vind ik net even wat fijner (vooral als je op de commandline uitkomt).

Voor het web-project (TransferXL) maken we gebruik van AngularJS en Grunt. Het back-end project was voorheen geschreven in Ruby, maar heb ik herschreven in NodeJS en maakt gebruik van Gulp. Die laatste is wat vlotter en zou ik aanraden voor nieuwe projecten.

Microsoft schuift langzaam naar de meer gangbare standaarden. GIT wordt steeds beter gesupport en ook GitHub wordt nu eindelijk omarmt. Ik ben benieuwd waar het heengaat, maar ik heb wel het idee dat ze op de goede weg zitten. Verdienmodel wordt meer Azure dan de tooling en dat is als ontwikkelaar ook prettig.
Hier ook C# dev. deel je mening over Node.
Jammer dat er geen "Get started" in de officiele documentatie is om Node.js en npm correct en veilig te installeren en configureren. Nu moet je dat vaak doen met (doorgaans outdated) halfbakken tutorials elders.
Voor Mac gebruikers kun je het beste HomeBrew gebruiken. Meer informatie over HomeBrew en Node vind je hier: https://changelog.com/install-node-js-with-homebrew-on-os-x
Goh, daar heb je weer Ruby voor nodig, die niet standaard op de mac staat. En hoe je dat weer correct en veilig installeert en configureert.... :')

Sowieso een interpreter van ruby installeren om een packagemanager voor JavaScript te installeren. |:(
Volgens mij wordt OS X standaard met Ruby uitgeleverd. Zie ook http://stackoverflow.com/a/3479797/956435. Maar ik ben het met je eens dat ik een package manager ook liever native zie...
Voor Node.JS zijn er met Visual Studio 2015 handige tools door Microsoft beschikbaar gemaakt: https://www.visualstudio.com/en-us/features/node-js-vs.aspx
Heeft iemand hier al ervaring met die tooling? Ik wil er eigenlijk wel een keer mee aan het werk.

Ik gebruik nu JetBrains WebStorm en dat werkt best aardig, maar ik leef al 20 jaar dagelijks in Visual Studio (voorheen MSVC). Het nadeel vind ik alleen om met Node op Windows te werken. Dat werkt toch net even wat minder fijn dan op OS X (of een ander Unix-derivaat).

Op dit item kan niet meer gereageerd worden.



Apple iOS 10 Google Pixel Apple iPhone 7 Sony PlayStation VR AMD Radeon RX 480 4GB Battlefield 1 Google Android Nougat Watch Dogs 2

© 1998 - 2016 de Persgroep Online Services B.V. Tweakers vormt samen met o.a. Autotrack en Carsom.nl de Persgroep Online Services B.V. Hosting door True