New stable features in #Nodejs
➡️ AbortController
➡️ crypto.randomUUID()
➡️ npm diff
➡️ Source map v3 support (stable as of v15.12.0)
➡️ Timers Promises API (stable as of v16.0.0)
➡️ RegExp match indices (in V8 9.0)
#OpenJSWorld21 https://t.co/TVgNxxjEVx
Experimental Core Modules in #nodejs
... continued
📦 Policies
📦 Buffer, Events, VM, Workers...
#OpenJSWorld21 https://t.co/sRkxixwhBB
Experimental Core Modules in #nodejs
... continued
📦 WebCrypto API
📦 WebAssembly System Interface (WASI)
📦 ECMAScript modules
📦 Top-level await
#OpenJSWorld21 https://t.co/MIDFfhJZ3F
Experimental Core Modules in #nodejs
📦 Async Hooks (ft. AsyncLocalStorage)
📦 Diagnostics Channel
📦 Inspector
📦 Trace events
... continued
#OpenJSWorld21 https://t.co/OqsyNnHnxl
Deprecations in #Nodejs
➡️ Documentation: expressed in Node.js API docs, may trigger a runtime warning when launched with --pending-deprecation flag
➡️ Runtime: generates a process warning, throws by default in Node.js v15.0+
#OpenJSWorld21 https://t.co/L859NGVyI1
Stability Indices in #nodejs:
0️⃣: Deprecated.
1️⃣: Experimental.
2️⃣: Stable.
3️⃣: Legacy.
More details: nodejs.org/api/documentation.html
#OpenJSWorld21 https://t.co/ey2FniqQp0
#node release schedule:
📦 Current - most of the non-major (non-breaking) changes
📦 Active LTS - New features, bug fixes, and updates audited by the LTS team
📦 Maintenance - Critical bug fixes and security updates.
More details: https://t.co/maZ7EQIgZQ
#OpenJSWorld21 https://t.co/TiHgcFsKZa
Current Strategic Initiatives in #Nodejs
⛳ Core Promise APIs
⛳ V8 Currency
⛳ QUIC/HTTP3
⛳ Startup performance
⛳ Build resources
⛳ Future of Build Toolchain
⛳ i18n
⛳ Mentorship
⛳ Node.js Collection
⛳ Examples
⛳ Outreach
⛳ Website Redesign
#OpenJSWorld21 https://t.co/FQM5eDXN2k
Working Groups and Teams in #nodejs
🏟️ Build WG
🏟️ Diagnostics WG
🏟️ Docker WG
🏟️ i18n WG
🏟️ Issue Triage team
🏟️ Loaders team
🏟️ next-10 team
🏟️ Release WG
🏟️ Package Maintenance WG
🏟️ Streams WG
#OpenJSWorld21 #javascript https://t.co/BhPa7D3biA
#OpenJSWorld21 breakout talk: Node.js: The new and the experimental by @BethGriggs_ from @RedHat
Node.js core is the sum of the interests and efforts of the contributors
Beth explains the pipeline and what's next
#OpenSource #nodejs
Watch on YouTube at https://t.co/898QFAf2ob https://t.co/Ef
Metric: Process restarts
This metric tells when application has crashed, and process had to be restarted.
#OpenJSWorld21 #nodejs #javascript https://t.co/lDtTmWtay5
In the rest of the talk, Guilherme goes through a few examples observed in production and how metrics helped in finding the root cause and fixing them.
View them on GitHub at https://github.com/ghermeto/openjs-world-2021
#OpenJSWorld21 #Nodejs #javascript
Metric: Inflight requests
This metric measures how many concurrent requests your app is handling. It helps finding handler or middleware leak.
#OpenJSWorld21 #nodejs #javascript https://t.co/MSS1c18lMt
Metric: Request latency
How long an average request is taking. This metric needs to be viewed in percentiles, as you examine each subset of your customers - p50, p90, p99, p99.9
#OpenJSWorld21 #nodejs #javascript https://t.co/SQZYHlihJE
Metric: Request rate (rps)
How many requests that app can receive in given amount of time. Must have metric for any application.
Increase in this metric means increase in CPU utilization (expected), as more requests need more CPU.
#OpenJSWorld21 #nodejs #javascript https://t.co/mpvZ6awZOs
Metric: Heap Utilization
High heap utilization usually means there's a memory leak
#OpenJSWorld21 #nodejs #javascript https://t.co/lrBosNCz01
Metric: Event loop lag
This chart is used along with CPU utilization. Increased event loop lag means it takes longer for next event loop tick, and request rate will drop.
#OpenJSWorld21 #nodejs #javascript https://t.co/XN5MnM8XPG
Metric: Process CPU Utilization
Common causes for high CPU usage:
➡️ Synchronous code blocking event loop
➡️ Process restarts
➡️ Pressure on the garbage collector
#OpenJSWorld21 #nodejs #javascript https://t.co/8muGyH9a8V
Guilherme talks about metrics-driven development feedback-loop:
🔁 Write code
🔁 Load test or Canary
🔁 Gather metrics
🔁 Analyze the results
#OpenJSWorld21 https://t.co/jXdRqJugpU
#OpenJSWorld21 breakout talk: "Observing Node.js: Using metrics to improve your application performance" by @ghermeto from @netflix
Watch it on YouTube at https://www.youtube.com/watch?v=XokTvf9WlXQ
#OpenSource #javascript #nodejs https://t.co/CfyI3oNjch
When not to use #WebAssembly
➡️ App is not compute-intensive enough
➡️ App is too compute-intensive
➡️ Adds too much complexity to your codebase & team
#OpenJSWorld21 #javascript https://t.co/PHz37TMCrx
#WebAssembly with SIMD benchmarks are every close to native!
Check out the SIM proposal in https://t.co/ZNV89Csoqm
➡️ Currently limited to 128-bit SIMD operations
➡️ For most browsers, need flag or origin trial
➡️ Enabled by default in Chrome 91
#OpenJSWorld21 #javascript https://t.co/78W8F7dlHK
#WebAssembly tools useful for data intensive apps:
➡️ Threads: WebWorkers, SharedArrayBuffer
➡️ SIMD: processes multiple data in a single CPU instruction
#OpenJSWorld21 #javascript https://t.co/MSNGHCIgvx
Case Study 2: http://genomeribbon.com
GenomeRibbon lets you explore complex arrangements in genome in the browser.
It used existing tools compiled to #WebAssembly:
➡️ samtools (C)
➡️ noodles (Rust)
#OpenJSWorld21 #javascript https://t.co/T5femwy1Hf
Case Study 1: http://fastq.bio
FastQ web app lets user input DNA sequencing data, and rapidly evaluate the quality of the data inside the browser.
It used existing tools compiled to #WebAssembly:
➡️ seqtk (C)
➡️ fastp (C++)
➡️ FastQC (Java)
#OpenJSWorld21 #javascript https://t.co/EBPHklth5B
#WebAsssembly usage is slowly increasing over the years!
Data from State of JavaScript Survey 2020.stateofjs.com/en-US/features/other-fea...
#OPenJSWorld21 #javascript https://t.co/FkF4ExHtHx
#WebAssembly is supported in 92.9% of the browser versions used on the web!
#OpenJSWorld21 #javascript https://t.co/R0tdOY3kKd
Why #WebAssembly?
➡️ Code Reuse: Google Earth, Figma, AutoCAD, sql.js
➡️ Performance: TensorFlow.js, 1Password, eBay, GenomRibbon
➡️ Portability: Cloudflare, Fastly, Wasmtime, Node, Deno, Wasm3
#OpenJSWorld21 #javascript https://t.co/OoI4gX86tZ
What is #WebAssembly?
➡️ New language that runs in the browser
➡️ Compilation target for C/C++/Rust/...
#OpenJSWorld21 #javascript https://t.co/JlRJPdUlWl
#OpenJSWorld21 breakout talk: Hit the ground running with WebAssembly by @RobAboukhalil from @Invitae
The talk introduces WebAssembly and covers upcoming features such as threads and SIMD, and use cases where WebAssembly shines!
Watch it on YouTube at https://t.co/tAxE8xGhyG https://t.co/k5Vq