以下の内容はhttps://ozaki25.hatenadiary.jp/entry/2024/04/25/220650より取得しました。
ランタイム
- 近年ランタイムが増えてきた
- Cloudflare WorkersとかBunとかWinterJSとか
エンジンとランタイム
- エンジンは言語処理系
- v8とか
- ブラウザ搭載のものは巨大
- ブラウザ非搭載の後発は軽量
- ランタイムは実行環境
- ランタイムがエンジンを埋め込んでいる
令和最新静的サイトジェネレーター事情
SSGの背景
- WordPressの時代
- HTMLを動的に返す
- メンテ/パフォーマンス/セキュリティ
- Janstackの登場
JS関連のSSG
- Hexo
- Gatsby
- Reactベース
- GrahpQL
- プラグイン
- incremental buildsでビルド効率化
- Netlifyの子会社
- 最近止まってるらしい
- 11ty
- マークダウン置いて設定なしでビルドできる
- いろんなjsテンプレートで書ける
- 混み入った設定は難しい
- Docusaurus
- Reactベース
- meta製
- VitePressのReact版
- 最近のFWは代替SSGできちゃう
- Next
- Nuxt
- Angular
- Astro
- ...
require(ESM)
復習
- JSは2つに分類される
- script
- module
- mjd
<script type="module">
- モジュールは3分類される
- Abstract/Cyclick/SourceText
require(ESM)の使用上の解釈
- 4段階を順番に実行していく
- Promiseを返すフェーズがある
- そこをどうやって同期的にしてるか
- Evaluateは最初からPromiseを解決済み
- これも前提を満たせばPromiseが最初から解決されている
- ECMAScriptの仕様とは矛盾せずに対応できている
The Fall of React Native Bridge
ReactNativeの仕組み(Before)
- objective-c/JavaからJSを呼び出すためにBridgeという仕組みがあった
- Request/ResponseをJSONで非同期にやり取り
- JSとNativeはBridgeで完全に分離されていた
Bridgeの問題
- 非同期なので描画が遅い
- アプリ起動の負荷が高い
- 処理の優先順位設定できない
React Native New Architecture
- 2018のReact Confで発表
- Bridgeを介さずにやり取り
- Facebookのアプリは置き換わっている
ReactNativeの仕組み(After)
- JSI
- Hermes
- ReactNative Codegen
- JSからc++呼ぶには型情報が必要
- TSからc++用の方を生成する
- Turbo Modules
- ネイティブのモジュールを実行する仕組み
- NativeのコードをJSI経由で呼び出す
- Fabrics Renderer
- これらによってBridgeが不要になった
Fast JSX: Don't clone props object #28768
JSXの高速化
- React19になっての話
- propsのクローンが不要になった
- keyとrefの予約語を消す必要がなくなった
- forwardRefが要らなくなる
- keyはスプレッド構文を使わなければ問題なし
- createElementが使われなくなった
- jsxという関数が変わりに使われるようになる
- jsxならユーザによるpropsの上書きができなくなった
JavaScriptCoreのObject.groupBy/Map.groupByのバグを自分で報告して自分で直す
Object.groupBy/Map.groupBy
- ES2024から入った
- 条件に応じてグルーピングできる
- 配列だけじゃなくてイテラブルならOK
JSCのgroupByの実装
- objectじゃなかったらTypeError投げてた
- イテラブルなものもエラーにしてていいのか
- stringはどうなのか
- バグ報告して直した
- 修正してPR出した
- test262へのテスト追加もした
以上の内容はhttps://ozaki25.hatenadiary.jp/entry/2024/04/25/220650より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます
不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14