Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Node.js Development in 2020: trends and techniques
Search
Nikita Galkin
November 08, 2019
Programming
590
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Node.js Development in 2020: trends and techniques
Nikita Galkin
November 08, 2019
More Decks by Nikita Galkin
See All by Nikita Galkin
React applications Failures
galkin
0
320
Node.js Development in 2022
galkin
0
870
Cloud Native Approach for Node.js Developers
galkin
0
120
Deep Dive Into NestJS at FWDays
galkin
0
550
Node.js Recipes: Road to Production.
galkin
0
220
Auth for React.js App
galkin
1
180
Web Developer Toolbox at 2020
galkin
1
250
Backend For Frontend: The Missing Manual at Devoxx Ukraine
galkin
1
180
The Twelve-Factor App for Node.js Developers at KharkivJS
galkin
0
410
Other Decks in Programming
See All in Programming
IBM Bob でAI駆動開発『QC-Playbook』
ichirokano2
0
120
ChromeでローカルLLM
ryu1013
0
160
自作Discord音声botをLambda MicroVMsに移行した話 / Migrating My Discord Voice Bot to Lambda MicroVMs
akihisaikeda
0
150
JAWS-UG 東京支部が始める、JAWS-UG支部コラボ / JAWS-UG lunchtime LT Collaboration
y0hgi
0
310
月間100万人のサービス刷新で、 技術選定をHonoに振り切った話
yutobara
8
6.9k
Zero-Tap Sign-In対応、結局何をすればいいの?
mitohato14
0
520
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
920
見えないものを探る要求要件定義に必要な基本的思考 / invisible-requirement-thinking
minodriven
15
8.7k
自サークルのIdPからログアウトできるようになるまで
taiseiue
1
150
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
160
JIS keyboard support in Omarchy
lef237
0
160
Apple Intelligenceとオンデバイス時代の到来
yahir0
0
100
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
699
190k
Abbi's Birthday
coloredviolet
4
10k
Are puppies a ranking factor?
jonoalderson
2
4.1k
The untapped power of vector embeddings
frankvandijk
2
1.9k
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
The Cost Of JavaScript in 2023
addyosmani
55
10k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Building AI with AI
inesmontani
PRO
1
1.3k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
580
Color Theory Basics | Prateek | Gurzu
gurzu
1
490
Transcript
Node.js Development in 2020: trends and techniques by Nikita Galkin
Nov 8, 2019
What anniversary is today?
None
None
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
None
nvm install 12.13.0 nvm alias default 12.13.0 nvm reinstall-packages 10.16.3
Migrate your local version easy with nvm:
Node.js v12 Breaking changes
None
None
Breaking change at Event Loop for Timers and Microtasks
setTimeout(() => console.log('timeout1')); setTimeout(() => { console.log('timeout2'); Promise.resolve().then(() => console.log('promise
resolve') ); }); setTimeout(() => console.log('timeout3')); setTimeout(() => console.log('timeout4'));
None
6.8 ➜ 7.7
➜ ~ 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
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');
None
1. Faster JavaScript parsing 2. Faster async functions and promises
3. Zero-cost async stack traces
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));
None
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
Node.js features
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.
JavaScript designed for browser where a failure affects only one
tab, only one user. But at Node.js failing affect everything...
Worker Threads are no longer experimental!
None
New http parser llhttp based on llparse
1. You use it! 2. For your own parser 3.
TypeScript Why learn how it works?
native Promises
1. Faster JavaScript parsing 2. Faster async functions and promises
3. Zero-cost async stack traces
What need to know: 1. promisify from util 2. once
from events 3. Reading streams asynchronously
function wait(timeout) { return new Promise(resolve => { setTimeout(resolve, timeout));
}); } // VS const util = require('util'); const wait = util.promisify(setTimeout);
const { EventEmitter } = require('events'); const emitter = new
EventEmitter(); async function getPromise() { return new Promise(resolve => { emitter.once('eventName', resolve); }) }
const { EventEmitter } = require('events'); const { once }
= require('events'); const emitter = new EventEmitter(); async function getPromise() { return once( emitter, 'eventName'); }
const { EventEmitter } = require('events'); const emitter = new
EventEmitter(); async function getPromise() { return new Promise(resolve => { emitter.once('eventName', resolve); }) }
async function main(filePath) { const readStream = fs.createReadStream(filePath); for await
(const chunk of readStream) { console.log('>>> '+chunk); } console.log('### DONE ###'); }
What need to use: 1. Promise.all/Promise.race 2. p-limit 3. multipleResolves
from process
Next big thing is QUIC/HTTP3
None
Node.js news
1. Node.js Foundation and JS Foundation Merge to Form OpenJS
Foundation 2. Node.js certification 3. Nodejs.dev arrived
None
1. Boolean 2. Null 3. Undefined 4. Number 5. String
6. Symbol 7. Object Data types in JavaScript.
1. Boolean 2. Null 3. Undefined 4. Number 5. String
6. Symbol 7. Object 8. BigInt Data types in JavaScript.
Not only Node.js news
1. TC39 new proposals 2. GraphQL is not hype and
has foundation. 3. Nestjs is the most promising framework
TypeScript 3.7
None
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