Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Node.js Development in 2020: trends and techniques
Nikita Galkin
November 08, 2019
Programming
0
450
Node.js Development in 2020: trends and techniques
Nikita Galkin
November 08, 2019
Tweet
Share
More Decks by Nikita Galkin
See All by Nikita Galkin
React applications Failures
galkin
0
100
Node.js Development in 2022
galkin
0
450
Cloud Native Approach for Node.js Developers
galkin
0
42
Deep Dive Into NestJS at FWDays
galkin
0
270
Node.js Recipes: Road to Production.
galkin
0
150
Auth for React.js App
galkin
1
66
Web Developer Toolbox at 2020
galkin
1
150
Backend For Frontend: The Missing Manual at Devoxx Ukraine
galkin
1
96
The Twelve-Factor App for Node.js Developers at KharkivJS
galkin
0
300
Other Decks in Programming
See All in Programming
OIDC仕様に準拠した Makuake ID連携基盤構築の裏側
ymtdzzz
0
420
はてなリモートインターンシップ2022 Web API 講義資料
hatena
0
150
Zynq MP SoC で楽しむエッジコンピューティング ~RTLプログラミングのススメ~
ryuz88
0
320
はてなリモートインターンシップ2022 フロントエンドブートキャンプ 講義資料
hatena
0
120
Rによる大規模データの処理
s_uryu
2
620
コンピュータビジョンセミナー2 / computer_vision_seminar_libSGM
fixstars
0
310
SwiftPMのPlugin入門 / introduction_to_swiftpm_plugin
uhooi
2
100
LIFFで動く割り勘アプリTATEKAをリリースしてみた話
inoue2002
0
230
Findy - エンジニア向け会社紹介 / Findy Letter for Engineers
findyinc
2
42k
あなたと 「|」 したい・・・
track3jyo
PRO
2
1k
フロントエンドで学んだことをデータ分析で使ってみた話
daichi_igarashi
0
180
量子コンピュータ時代のプログラミングセミナー / 20221222_Amplify_seminar _route_optimization
fixstars
0
240
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1351
200k
The MySQL Ecosystem @ GitHub 2015
samlambert
240
11k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
29
7.8k
How STYLIGHT went responsive
nonsquared
89
4.2k
How GitHub Uses GitHub to Build GitHub
holman
465
280k
Fontdeck: Realign not Redesign
paulrobertlloyd
74
4.3k
Unsuck your backbone
ammeep
659
56k
Fireside Chat
paigeccino
16
1.8k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
217
21k
Documentation Writing (for coders)
carmenintech
51
2.9k
Code Review Best Practice
trishagee
50
11k
A designer walks into a library…
pauljervisheath
199
16k
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