JSer.info #559 - Web Componentsを扱うライブラリであるLit 2がリリースされました。
Lit 2は今までLitElement 2.xとlit-html 1.xという別々のパッケージになったものを統合していて、lit
という新しいパッケージ担っています。
classベースのDirectives API、非同期Directives、Reactive Controllersの追加されています。
要素全体に対して影響を与えられるElement expressions、タグ名などに変数を使えるStatic expressionsなども追加されています。
また、実験的にSSRのサポートなども追加されています。
LitElement 2.xとlit-html 1.xからアップグレードガイドも公開されています。
Gatsby 4のベータ版がリリースされています。
rendering modeとして、HTMLの生成を実際にアクセスするときまで遅延するDeferred Static Generation(DSG)のサポート、SSRのサポートが追加されています。
Deferred Static Generation(DSG)はNext.jsのIncremental Static Regeneration(ISR)と似ていて、初回のリクエストがきた段階で始めてビルドを開始することで、めったにアクセスされないコンテンツを含むようなサイトでのデプロイにかかるビルド時間を短縮する仕組みです。
DSGではデプロイ時にデータのスナップショットを作り、リクエスト時にスナップショットからコンテンツであるHTMLを生成して返します。そのため、DSGはISRとは、リクエスト時に異なりサーバから外部リソースを再取得するのではなく、あくまでデプロイ時に作成されたスナップショットを参照してビルドするようになっています。
While DSG may look similar on the surface, what Gatsby does is that it takes a snapshot of the data at initial build time and creates lightweight render engines that are capable of building a page on demand. However, all data was already sourced at initial build time!
— Sid (@chatsidhartha) September 27, 2021
その他にはparallel queryでのビルド時間の改善なども含まれています。
あわせてv3からのマイグレーションガイドも公開されています。
PartytownはサードパーティスクリプトをWebWorkerで動かし、サードパーティスクリプトによるメインスレッドのブロッキングを避ける目的のライブラリです。
WebWorkerにはDOM APIなどがないため、そのままサードパーティスクリプトをWorkerで動かすとエラーとなります。
そのため、次のような仕組みでDOM APIなどを含むサードパーティスクリプトをWorker内で動かしています。
- Worker内でのDOM操作をProxyする
- DOM操作をコマンドにして同期XHRで通信(Worker内では同期XHRが利用できます)
- この通信をService Workerでインターセプトしてコマンドを取得
- コマンドを元にService Workerとメインスレッドで非同期にやりとりしてDOM操作の結果を取得
- DOM操作の結果を元のWorkerに返す
これによって、Worker内で動作しているサードパーティスクリプトから見れば同期的にAPIを使えているように見えるため、コードの変更なしに動作しています。
詳しい仕組みについては記事も公開されているので、こちらを参照してください。
JSer.infoをサポートするには
- 😘 知り合いにJSer.infoをおすすめする
- ❤️ GitHub Sponsorsで@azuのスポンサーになる
- 🐦 X(Twitter)で@jser_infoをフォローする
JSer.info Sponsors
JSer.info SponsorsはGitHub SponsorsとしてJSer.infoを支援してくれている方々です。
ヘッドライン
Announcing Lit 2 stable release – Lit
lit.dev/blog/2021-09-21-announcing-lit-2/
Lit 2リリース。
classベースのDirectives API、非同期Directives、Reactive Controllersの追加。
要素全体に対して影響を与えられるElement expressions、タグ名などに変数を使えるStatic expressionsの追加。
また、実験的にSSRのサポートなど
Node v16.10.0 (Current) | Node.js
nodejs.org/en/blog/release/v16.10.0/
Node v16.10.0リリース。
コネクションごとに最大のリクエスト数を制限するserver.maxRequestsPerSocket
オプションの追加。
$HOME/.node_modules
などを探索しない--no-global-search-paths
フラグの追加など
Electron 15.0.0 | Electron
www.electronjs.org/blog/electron-15-0/
Electron 15.0.0リリース。
Electron 15から8週間ごとのメジャーアップデートとなる。
Chromium 94、Node.js 16.5.0、V8 9.4へアップデート、nativeWindowOpen
のデフォルト値をtrue
へ変更、safeStorage
APIの追加など
Chromium Blog: Chrome 95 Beta: Secure Payment Confirmation, WebAssembly Exception Handling and More
blog.chromium.org/2021/09/chrome-95-beta-secure-payment.html
Chrome 95 betaリリース。
Origin TrialとしてAccess HandleをFile System Access APIに追加。
Performance ObserverにdroppedEntriesCount
の追加、EyeDropper APIの追加、self.reportError()
の追加、URLPattern
の追加など。
また、FTP URLのサポート終了、数字で終わるIPv4アドレスではないホスト名のサポートを廃止など
Miniflare is now an official part of the Workers ecosystem 🎉 · cloudflare/miniflare@e1cb97f
github.com/cloudflare/miniflare/commit/e1cb97f9891b2818f4be5715ee467668a39f7f80
Cloudflare WorkersのsimulatorであるMiniflareがCloudflare公式となった
es-module-shims/CHANGELOG.md at 1.0.0 · guybedford/es-module-shims
github.com/guybedford/es-module-shims/blob/1.0.0/CHANGELOG.md
ES Module Shims 1.0.0リリース。
lexerがWasmを利用していたためunsafe-eval
のCSP設定が必要となっていたが、asm.jsビルドを使いデフォルトでCSPに対応した。
また、パフォーマンスについてはほぼ同等で、Safariに関してはasm.js版の方が早くなっている。
- feat: make the CSP asm.js build the main entry by guybedford · Pull Request #193 · guybedford/es-module-shims
- feat: asm.js build by guybedford · Pull Request #86 · guybedford/es-module-lexer
- content-security-policy/CSP.md at master · WebAssembly/content-security-policy
Manifest V2 support timeline - Chrome Developers
developer.chrome.com/docs/extensions/mv3/mv2-sunset/
Chrome拡張のmanifest v3のロードマップ。
2022年1月17日に新しくmanifest v2の拡張は申請できなくなる。
2023年1月に既存のv2拡張は更新もできなくなる。
ESLint v8.0.0-rc.0 released - ESLint - Pluggable JavaScript linter
eslint.org/blog/2021/09/eslint-v8.0.0-rc.0-released
ESLint v8.0.0-rc.0リリース。
Stimulus 3
world.hey.com/hotwired/stimulus-3-c438d432
Stimulus 3 リリース。
パッケージ名がstimulus
から@hotwired/stimulus
へと変更された。
Action Parametersのサポート、デフォルト値のサポート、debug
オプションの追加など
Introducing Gatsby 4 | Gatsby
Gatsby 4ベータリリース。
HTMLの生成を実際にアクセスするときまで遅延するDeferred Static Generation(DSG)のサポート、SSRのサポート、parallel queryでのビルド時間の改善など
- Matteo Frana on Twitter: "@chatsidhartha Can you explain me briefly the differences between Gatsby DSG and ISR? Thank you! I'm looking forward to testing Gatsby 4." / Twitter
- Run Gatsby 4 with DSG and SSR on Netlify today | Netlify
アーティクル
Blazor Developers Can Now Create Custom Elements, Render Components from JavaScript -- Visual Studio Magazine
visualstudiomagazine.com/articles/2021/09/16/aspnet-core-updates.aspx
.NET 6 RC1でBlazorがCustom Elementをサポートし、BlazorコンポーネントをCustom Elementとして利用できるようになった。
- Announcing .NET 6 Release Candidate 1 - .NET Blog
- AspLabs/src/BlazorCustomElements at main · aspnet/AspLabs
Fullstack app with TypeScript, Next.js, Prisma & GraphQL
www.prisma.io/blog/fullstack-nextjs-graphql-prisma-oklidw1rhw
Next.js/Prisma/GraphQLを使ったアプリケーション開発についてのチュートリアル。
What's new in React 18? | Yagmur Cetin Tas
yagmurcetintas.com/journal/whats-new-in-react-18
React 18で予定されている変更の概要をまとめた記事
スライド、動画関係
Get Your Head Straight - Speaker Deck
speakerdeck.com/csswizardry/get-your-head-straight
パフォーマンスの問題を見つけるために<head>
の中身を表示するct.cssについてのスライド。
<script>
や<style>
について3rd partyであるかやブロッキングしてるかなどを可視化してくれる
サイト、サービス、ドキュメント
vite/packages/plugin-react at main · vitejs/vite
github.com/vitejs/vite/tree/main/packages/plugin-react
ViteのReact Plugin。
@vitejs/plugin-react-refresh
を置き換えるプラグイン
BuilderIO/partytown: Relocate resource intensive third-party scripts off of the main thread and into a web worker. 🎉
github.com/BuilderIO/partytown
サードパーティスクリプトをWorker内で動かしてメインスレッドのブロッキングを防ぐライブラリ。
Worker内でのDOM操作をProxyして、同期XHRで通信し、その通信をService Workerでインターセプトしてメインスレッドと非同期でやり取りした結果をWorkerに返している。
ソフトウェア、ツール、ライブラリ関係
gvergnaud/ts-pattern: 🎨 The exhaustive Pattern Matching library for TypeScript, with smart type inference.
github.com/gvergnaud/ts-pattern
TypeScriptでのパターンマッチライブラリ
cesanta/elk: A low footprint JavaScript engine for embedded systems
組み込み向けの小さなJavaScriptエンジン