Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2022-04-05のJS: React 18、Vite 2.9.0、Firefoxの新しいパフォーマンスツール #974

Merged
merged 23 commits into from
Apr 6, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
251 changes: 251 additions & 0 deletions _i18n/ja/_posts/2022/2022-04-06-react-18-vite-2.9.0-firefox.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,251 @@
---
title: "2022-04-06のJS: React 18、Vite 2.9.0、Firefoxの新しいパフォーマンスツール"
author: "azu"
layout: post
date : 2022-04-06T09:31:54.356Z
category: JSer
tags:
- React
- performance
- Chrome
- Firefox
- HTML

---

JSer.info #586 - React 18が正式リリースされました。

- [React v18.0 – React Blog](https://reactjs.org/blog/2022/03/29/react-v18.html)

Internet Explorerのサポートが終了されています。

主な変更としてConcurrent Renderingに対応するための変更と新しいAPIが追加されています。
setStateの呼び出しを自動的にバッチ化とopt-outするための`flushSync`を追加、緊急と緊急ではない状態の更新を扱うTransition APIがされています。

クライアントの`ReactDOM.render`とPReactDOM.hydrate`とサーバの`renderToString`はそれぞれ非推奨となっています。
これに対応する新しいAPIとして、クライアントに`createRoot`/`hydrateRoot`、サーバに`renderToPipeableStream`/`renderToReadableStream`が追加されています。

また、`<StrictMode>`が開発時は再マウントをテストする挙動に変更、`useId`/`useSyncExternalStore`/`useInsertionEffect`のHooksの追加なども行われています。

詳しいマイグレーション方法については次のドキュメントが公開されています。

- [How to Upgrade to React 18 – React Blog](https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html)

TypeScriptの型定義はまだReact 18の対応版が公開されていませんが、次のIssueとPRで対応されています。

- [[RFC] React 18 and types-only breaking changes · Issue #46691 · DefinitelyTyped/DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/issues/46691)
- [[react] React 18 types by eps1lon · Pull Request #56210 · DefinitelyTyped/DefinitelyTyped](https://github.com/DefinitelyTyped/DefinitelyTyped/pull/56210)

React周辺のツールやライブラリのReact 18対応については、次の記事でまとめられています。

- [React 周辺ツールの React v18 サポート](https://zenn.dev/arayaryoma/scraps/3845eb077129b6)

---

Vite 2.9.0がリリースされました。

- [vite/CHANGELOG.md at main · vitejs/vite](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md#290-2022-03-30)

依存関係のscanとpre-bundleの処理を改善、実験的にCSSのSource Mapのサポート、Web WorkerのSource Mapサポートの改善が含まれています。
Glob Importsに`{ as: 'raw' }`を追加し、`{ assert: { type: 'raw' }}`は非推奨化されています。

`{ assert: { type: 'raw' }}`はVite 2.8で、[Import Assertions](https://github.com/tc39/proposal-import-assertions)を意識して導入された構文ですが、Import Assertionsは読み込むモジュールの`type`を検証(assert)する[目的](https://github.com/WICG/webcomponents/issues/839)のProposalです。そのため読み込むモジュールの評価方法を変更する構文ではありません。

一方で、読み込むモジュールの評価方法を指定するProposalとして[Import Reflection](https://github.com/tc39/proposal-import-reflection)があります。Vite 2.9では、こちらのImport Reflectionを意識した構文に変更されました。

---

Firefoxのパフォーマンスツールが新しくなっています。

- [Performance Tool in Firefox DevTools Reloaded - Mozilla Hacks - the Web developer blog](https://hacks.mozilla.org/2022/03/performance-tool-in-firefox-devtools-reloaded/)

UIも大きく変わり、取得できるデータもWebサイトや動画などの特性に合わせたプリセットが用意されていて、それぞれに合わせたプロファイルが取れるようになっています。
また、取得したパフォーマンスデータは https://profiler.firefox.com/ で表示と共有ができるようになっています。

----

<h1 class="site-genre">ヘッドライン</h1>

----

## React v18.0 – React Blog
[reactjs.org/blog/2022/03/29/react-v18.html](https://reactjs.org/blog/2022/03/29/react-v18.html "React v18.0 – React Blog")
<p class="jser-tags jser-tag-icon"><span class="jser-tag">React</span> <span class="jser-tag">ReleaseNote</span></p>

React 18リリース。
Concurrent Renderingに対応するための変更と新しいAPIが追加される。
setStateの呼び出しを自動的にバッチ化とopt-outするための`flushSync`を追加、ページ遷移時の状態を扱うTransition APIを追加。
クライアントに`createRoot`/`hydrateRoot`、サーバに`renderToPipeableStream`/`renderToReadableStream`を追加。
`<StrictMode>`が開発時は再マウントをテストする挙動に変更、`useId`/`useSyncExternalStore`/`useInsertionEffect`のHooksの追加など。

- [How to Upgrade to React 18 – React Blog](https://reactjs.org/blog/2022/03/08/react-18-upgrade-guide.html "How to Upgrade to React 18 – React Blog")

----

## Release v6.3.0 · remix-run/react-router
[github.com/remix-run/react-router/releases/tag/v6.3.0](https://github.com/remix-run/react-router/releases/tag/v6.3.0 "Release v6.3.0 · remix-run/react-router")
<p class="jser-tags jser-tag-icon"><span class="jser-tag">React</span> <span class="jser-tag">library</span> <span class="jser-tag">ReleaseNote</span></p>

React Router 6.3.0リリース。
v5からv6に移行を補助するための`react-router-dom-v5-compat`モジュールの追加

- [Official v5 to v6 Migration Guide · Discussion #8753 · remix-run/react-router](https://github.com/remix-run/react-router/discussions/8753 "Official v5 to v6 Migration Guide · Discussion #8753 · remix-run/react-router")

----

## Chromium Blog: Chrome 101: Federated Credential Management Origin Trial, Media Capabilities for WebRTC, and More
[blog.chromium.org/2022/03/chrome-101-federated-credential.html](https://blog.chromium.org/2022/03/chrome-101-federated-credential.html "Chromium Blog: Chrome 101: Federated Credential Management Origin Trial, Media Capabilities for WebRTC, and More")
<p class="jser-tags jser-tag-icon"><span class="jser-tag">Chrome</span> <span class="jser-tag">ReleaseNote</span></p>

Chrome 101ベータリリース。
UA文字列の削減の開始。
Origin TrialとしてFedCMの追加、Priority Hintsがデフォルトで有効化。
`AudioContext.outputLatency`の実装、CSSの`ont-palette`プロパティの実装、MediaCapabilities APIがWebRTCをサポート。
Third-Party contextでのWebSQLのサポートを削除など

- [Chromium Blog: User-Agent Reduction Origin Trial and Dates](https://blog.chromium.org/2021/09/user-agent-reduction-origin-trial-and-dates.html "Chromium Blog: User-Agent Reduction Origin Trial and Dates")

----

## Announcing React Native 0.68 · React Native
[reactnative.dev/blog/2022/03/30/version-068](https://reactnative.dev/blog/2022/03/30/version-068 "Announcing React Native 0.68 · React Native")
<p class="jser-tags jser-tag-icon"><span class="jser-tag">React</span> <span class="jser-tag">iOS</span> <span class="jser-tag">Android</span> <span class="jser-tag">ReleaseNote</span></p>

React Native 0.68リリース。
依存関係のアップデート、opt-inでNew Architectureへの対応に対応。
React 18の対応は含まれていない。


----

## Release 0.7.0 · facebookexperimental/Recoil
[github.com/facebookexperimental/Recoil/releases/tag/0.7.0](https://github.com/facebookexperimental/Recoil/releases/tag/0.7.0 "Release 0.7.0 · facebookexperimental/Recoil")
<p class="jser-tags jser-tag-icon"><span class="jser-tag">React</span> <span class="jser-tag">library</span> <span class="jser-tag">ReleaseNote</span></p>

Recoil 0.7.0リリース。
`atom()`と`atomFamily()`に`default`オプションを追加、Snapshotに`getStoreID()`メソッドの追加など


----

## ECMAScript proposal updates @ 2022-03 | ECMAScript Daily
[ecmascript-daily.github.io/ecmascript/2022/04/03/ecmascript-proposal-update](https://ecmascript-daily.github.io/ecmascript/2022/04/03/ecmascript-proposal-update "ECMAScript proposal updates @ 2022-03 | ECMAScript Daily")
<p class="jser-tags jser-tag-icon"><span class="jser-tag">ECMAScript</span> <span class="jser-tag">proposal</span> <span class="jser-tag">news</span></p>

2022年3月のTC39 MeetingでのECMAScript ProposalのStage変更まとめ。
Type AnnotationsがStage 1に、DecoratorがStage 3となった。

- [Updates from the 89th TC39 meeting - DEV Community 👩‍💻👨‍💻](https://dev.to/hemanth/updates-from-the-89th-tc39-meeting-5bkf "Updates from the 89th TC39 meeting - DEV Community 👩‍💻👨‍💻")

----

## vite/CHANGELOG.md at main · vitejs/vite
[github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md#290-2022-03-30](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md#290-2022-03-30 "vite/CHANGELOG.md at main · vitejs/vite")
<p class="jser-tags jser-tag-icon"><span class="jser-tag">vite</span> <span class="jser-tag">ReleaseNote</span></p>

Vite 2.9.0リリース。
依存関係のscanとpre-bundleの処理を改善、実験的にCSSのSource Mapのサポート、Web WorkerのSource Mapサポートの改善。
Glob Importsに`{ as: 'raw' }`を追加し、`{ assert: { type: 'raw' }}`は非推奨化。
Plugin向けの変更として、ClientとServer間をWebSocketsでやりとりできるAPIの追加など


----

## Electron 18.0.0 | Electron
[www.electronjs.org/blog/electron-18-0](https://www.electronjs.org/blog/electron-18-0 "Electron 18.0.0 | Electron")
<p class="jser-tags jser-tag-icon"><span class="jser-tag">Electron</span> <span class="jser-tag">ReleaseNote</span></p>

Electron 18.0.0リリース。
Chromium 100、Node.js 16.13.2、V8 10.0へアップデート。
Electron 15で`nativeWindowOpen: true`がデフォルトとなったため、これを無効化するためだけに残されていた`nativeWindowOpen`オプションが削除された。


----
<h1 class="site-genre">アーティクル</h1>

----

## Performance Tool in Firefox DevTools Reloaded - Mozilla Hacks - the Web developer blog
[hacks.mozilla.org/2022/03/performance-tool-in-firefox-devtools-reloaded/](https://hacks.mozilla.org/2022/03/performance-tool-in-firefox-devtools-reloaded/ "Performance Tool in Firefox DevTools Reloaded - Mozilla Hacks - the Web developer blog")
<p class="jser-tags jser-tag-icon"><span class="jser-tag">Firefox</span> <span class="jser-tag">performance</span> <span class="jser-tag">article</span></p>

Firefoxのパフォーマンスタブが新しくなる。
プロファイルを記録し、そのパフォーマンスデータを https://profiler.firefox.com/ で表示と共有ができるようになる。

- [Firefox Profiler](https://profiler.firefox.com/ "Firefox Profiler")

----

## What&#039;s New In DevTools (Chrome 100) - Chrome Developers
[developer.chrome.com/blog/new-in-devtools-100/](https://developer.chrome.com/blog/new-in-devtools-100/ "What&#039;s New In DevTools (Chrome 100) - Chrome Developers")
<p class="jser-tags jser-tag-icon"><span class="jser-tag">Chrome</span> <span class="jser-tag">article</span></p>

Chrome 100の開発者ツールの変更点について。
`@support`のサポート、Recorderで`data-test`属性などのサポート、記録済みのセレクタの変更をサポート。
"Droppped frames"を"Partially presented frames"という表現に変更など


----

## When does React render your component?
[www.zhenghao.io/posts/react-rerender](https://www.zhenghao.io/posts/react-rerender "When does React render your component?")
<p class="jser-tags jser-tag-icon"><span class="jser-tag">React</span> <span class="jser-tag">article</span> <span class="jser-tag">performance</span></p>

Reactコンポーネントがいつレンダリングされるかについて書かれた記事。
Reactコンポーネントが再レンダリングされる条件、PropsとChildコンポーネントのレンダリング、Contextと再レンダリングについてなど


----

## Understanding Layout Algorithms
[www.joshwcomeau.com/css/understanding-layout-algorithms/](https://www.joshwcomeau.com/css/understanding-layout-algorithms/ "Understanding Layout Algorithms")
<p class="jser-tags jser-tag-icon"><span class="jser-tag">CSS</span> <span class="jser-tag">article</span></p>

CSSのレイアウトアルゴリズム(レイアウトモード)について。
それぞれのレイアウトアルゴリズムによって同じプロパティでもどのように処理されるかは異なる。プロパティはレイアウトアルゴリズムという関数に渡される引数のようなものという話。


----

## Locale Aware Sorting in JavaScript
[elijahmanor.com/byte/js-locale-sort](https://elijahmanor.com/byte/js-locale-sort "Locale Aware Sorting in JavaScript")
<p class="jser-tags jser-tag-icon"><span class="jser-tag">i18n</span> <span class="jser-tag">JavaScript</span> <span class="jser-tag">article</span></p>

`Intl.Collator`を使ったローカライズされた文字列のソートについて


----
<h1 class="site-genre">サイト、サービス、ドキュメント</h1>

----

## Shakerphobia
[shakerphobia.netlify.app/](https://shakerphobia.netlify.app/ "Shakerphobia")
<p class="jser-tags jser-tag-icon"><span class="jser-tag">JavaScript</span> <span class="jser-tag">Tools</span> <span class="jser-tag">bundler</span></p>

npmパッケージ時からimportするものを指定し、Tree Shaking後のbundle sizeを計測するツール


----

## nuxodin/dialog-polyfill: &quot;insert and thats it&quot;-dialog-polyfill
[github.com/nuxodin/dialog-polyfill](https://github.com/nuxodin/dialog-polyfill "nuxodin/dialog-polyfill: \&quot;insert and thats it\&quot;-dialog-polyfill")
<p class="jser-tags jser-tag-icon"><span class="jser-tag">HTML</span> <span class="jser-tag">polyfill</span> <span class="jser-tag">JavaScript</span></p>

Dialog要素のpolyfillライブラリ


----
<h1 class="site-genre">ソフトウェア、ツール、ライブラリ関係</h1>

----

## nicolo-ribaudo/jest-light-runner: A Jest runner that runs tests directly in bare Node.js, without virtualizing the environment.
[github.com/nicolo-ribaudo/jest-light-runner](https://github.com/nicolo-ribaudo/jest-light-runner "nicolo-ribaudo/jest-light-runner: A Jest runner that runs tests directly in bare Node.js, without virtualizing the environment.")
<p class="jser-tags jser-tag-icon"><span class="jser-tag">jest</span> <span class="jser-tag">node.js</span> <span class="jser-tag">library</span></p>

Jest向けの軽量なRunner。
`jest-runner`からテストケースごとのIsolationのサポートを取り除くことで、テストの実行をより早くしている。


----