Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Node.js Development in 2020: trends and techniques

Node.js Development in 2020: trends and techniques

Nikita Galkin

November 08, 2019
Tweet

More Decks by Nikita Galkin

Other Decks in Programming

Transcript

  1. Why Node.js won the market? 1. Everybody knows JavaScript 2.

    Everybody loves Open Source 3. Google pay for V8 4. Performance boost every release 5. There is a release schedule
  2. setTimeout(() => console.log('timeout1')); setTimeout(() => { console.log('timeout2'); Promise.resolve().then(() => console.log('promise

    resolve') ); }); setTimeout(() => console.log('timeout3')); setTimeout(() => console.log('timeout4'));
  3. ➜ ~ nvm use v10 Now using node v10.16.3 (npm

    v6.9.0) ➜ ~ node --print process.versions.v8 6.8.275.32-node.54 ➜ ~ nvm use v12 Now using node v12.13.0 (npm v6.12.0) ➜ ~ node --print process.versions.v8 7.7.299.13-node.12 6.8 ➜ 7.7
  4. const array = []; for (let i = 1; i

    < 10000; i++) array.push(i); console.time('assign'); const assign = array.reduce( (acc, curr) => Object.assign(acc, {[curr]: curr}), {}); console.timeEnd('assign'); console.time('spread'); const spread = array.reduce( (acc, curr) => ({...acc, [curr]: curr}), {}); console.timeEnd('spread');
  5. const { promisify } = require('util'); const wait = promisify(setTimeout);

    async function testAsyncStacktrace() { await wait(10); await willDie(); return 42; } async function willDie() { await Promise.resolve(); throw new Error('#Feelsbadman'); } testAsyncStacktrace() .catch(error => console.log(error.stack));
  6. By default stack-trace is 10 On CLI level ➜ ~

    node async-stack-trace.js \ --stack-trace-limit=1000 On code level Error.stackTraceLimit = Infinity; More
  7. Node.js v12 disappointments 1. ECMAScript Modules support is not stable.

    Again. 2. Most native modules are callback based. Only fs and dns modules have promises.
  8. JavaScript designed for browser where a failure affects only one

    tab, only one user. But at Node.js failing affect everything...
  9. 1. You use it! 2. For your own parser 3.

    TypeScript Why learn how it works?
  10. What need to know: 1. promisify from util 2. once

    from events 3. Reading streams asynchronously
  11. function wait(timeout) { return new Promise(resolve => { setTimeout(resolve, timeout));

    }); } // VS const util = require('util'); const wait = util.promisify(setTimeout);
  12. const { EventEmitter } = require('events'); const emitter = new

    EventEmitter(); async function getPromise() { return new Promise(resolve => { emitter.once('eventName', resolve); }) }
  13. const { EventEmitter } = require('events'); const { once }

    = require('events'); const emitter = new EventEmitter(); async function getPromise() { return once( emitter, 'eventName'); }
  14. const { EventEmitter } = require('events'); const emitter = new

    EventEmitter(); async function getPromise() { return new Promise(resolve => { emitter.once('eventName', resolve); }) }
  15. async function main(filePath) { const readStream = fs.createReadStream(filePath); for await

    (const chunk of readStream) { console.log('>>> '+chunk); } console.log('### DONE ###'); }
  16. 1. Node.js Foundation and JS Foundation Merge to Form OpenJS

    Foundation 2. Node.js certification 3. Nodejs.dev arrived
  17. 1. Boolean 2. Null 3. Undefined 4. Number 5. String

    6. Symbol 7. Object Data types in JavaScript.
  18. 1. Boolean 2. Null 3. Undefined 4. Number 5. String

    6. Symbol 7. Object 8. BigInt Data types in JavaScript.
  19. 1. TC39 new proposals 2. GraphQL is not hype and

    has foundation. 3. Nestjs is the most promising framework
  20. HAPPY NODE.JS DEVELOPMENT! You can find me on Twitter as

    @galk_in Slides are available at speakerdeck.com/galkin or at my site galk.in