Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Node.js Development in 2020: trends and techniques
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Nikita Galkin
November 08, 2019
Programming
580
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
860
Cloud Native Approach for Node.js Developers
galkin
0
110
Deep Dive Into NestJS at FWDays
galkin
0
540
Node.js Recipes: Road to Production.
galkin
0
220
Auth for React.js App
galkin
1
170
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
400
Other Decks in Programming
See All in Programming
言語を使う側から、作る側へ。 自作 Lisp で得た新たな気づき。
andpad
0
140
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
170
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
560
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.7k
React本体のコードリーディング
high_g_engineer
0
110
メールのエイリアス機能を履き違えない
isshinfunada
0
150
torikago - Ruby::Boxで照らすモジュラモノリスの実行境界
se4weed
1
260
php-fpmのプロセスが枯渇した日-調査・対処・そして本当にやるべきだったこと-
shibuchaaaan
0
170
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
440
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
560
使いながら育てる Claude Code — 開発フローの1コマンド化 × 繰り返し指摘の自動仕組み化
shiki_kakaku
0
1.4k
Build-to-own AI: Agentic Development for Humans
inesmontani
PRO
0
120
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.7k
Prompt Engineering for Job Search
mfonobong
0
390
Fireside Chat
paigeccino
42
4k
Building Adaptive Systems
keathley
44
3.1k
Paper Plane
katiecoart
PRO
2
52k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
160
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
820
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
460
Building Applications with DynamoDB
mza
96
7.1k
Speed Design
sergeychernyshev
33
2k
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