モダンなJavaScriptフレームワークの仕組みを自分で作りながら学ぶ
(nolanlawson.com)モダンなJavaScriptフレームワークの仕組みを理解する
- 自分自身のJavaScriptフレームワークを作ってみることは、学習に役立つ。
- 「モダンなJavaScriptフレームワーク」は、React以降のフレームワークを意味する。
- これらのフレームワークはReactから着想を得ているが、互いによく似た方向へ進化してきた。
モダンなフレームワークの特徴
- DOM更新のためにリアクティビティ(reactivity)を使う。
- DOMレンダリングのためにテンプレートの複製(cloning templates)を使う。
<template>やProxyのようなモダンなWeb APIを使う。
リアクティビティ(Reactivity)
- Reactはリアクティブではないとしばしば言及される。
- モダンなフレームワークは、パフォーマンスを優先するためにプッシュベースの反応モデルを使う。
Proxyを利用して、状態が変更されるたびにDOMが更新されるよう実装する。
DOMツリーの複製(Cloning DOM trees)
<template>タグを使ってHTMLを一度だけパースし、その後全体を高速に複製する技術は効率的である。- この方法は、さまざまなJavaScriptフレームワークで使われている。
モダンなJavaScript API
<template>とProxyは、リアクティビティシステムを構築するのに役立つAPIである。- タグ付きテンプレートリテラル(tagged template literals)を使って、HTMLテンプレートAPIをシンプルに作る。
リアクティビティ構築の段階
- 状態管理と、状態変更時のDOM更新を定義するリアクティビティがフレームワークの土台になる。
Proxyを使って状態変更を検知し、queueMicrotaskを通じて更新を効率よく管理する。
DOMレンダリングの段階
html関数を使ってDOMツリーを構築し、効率的に更新する。- タグ付きテンプレートリテラルを使ってHTMLテンプレートを記述し、
WeakMapを用いてHTMLパースを最適化する。
リアクティビティとDOMレンダリングの結合
createEffectを使って、状態に応じてDOMを更新する。- 状態変更時にテキストが自動で更新されるように実装する。
次のステップ
- DOMレンダリングシステムを改善できる方法は多数ある。
- テンプレートを一度だけパースし、バインディングも一度だけ設定して更新を最小化することが目標である。
GN⁺の意見
この記事で最も重要なのは、モダンなJavaScriptフレームワークの中核概念と実装方法を理解し、実際に自分だけのフレームワークを作ってみる体験を通じて学ぶプロセスである。このようなアプローチは、初級ソフトウェアエンジニアにとってフレームワークの内部動作を理解し、実際に適用してみる機会を提供し、興味深く有益な学習体験になり得る。
1件のコメント
Hacker News のコメント
関心のあるテーマの基礎的な理解のために、次の資料を勧める:
React に関する誤解と実際の動作方式についての説明:
useMemoは再レンダリングを防がず、その役割を担うのはReact.memoである。Svelte に対する肯定的な評価と活用事例:
リアクティブなフレームワークに対するさまざまな観点:
React のリアクティビティに関する質問と議論:
フロントエンドフレームワークの経験が豊富な人々に投げかけられた質問: