{
"name" : "武田 諭 / Satoshi Takeda",
"social": "tkdn",
"from" : "株式会社 mediba",
"dept" : "CD本部創造開発部/ものづくり推進部",
"job" : "Front-End web developer",
"love" : "family, alcohol, DX"
}
KDDI グループ
事業成長に伴う施策はフロントエンド
Next.js/TypeScript を中心に据えた技術スタックでリニューアル,
それらを経て得たものを中心にお話します。
TTFB / FirstPaint 上昇
Akamai CDN
リニューアル前 CSR で埋めていた UI を SSR 化
redux state で状態注入する?
connect
したくない local state で振る舞い変える?
Context API により上位で A/B を判定
=> 下位でいつでも利用可能になる
分岐ロジックなしで JSX らしく宣言的に書きたい
res.query
を渡すイメージts-loader
によるコンパイル2018.3 プラグインで @babel/preset-typescript
Babel によるコンパイル
tsconfig.json
があれば zero-config で始められそうfork-ts-checker-webpack-plugin
も同梱されている@types/next
にあった型定義ファイルもすでに同梱されているmonorepo 構成で TypeScript がコンパイルを担当するワークスペース
tsc
でコンパイルtsc
でコンパイルNext.js を使って monorepo するなら
Next.js の依存に合わせた方が幸せかも
webpack が出来そうなことが結構遠回り
現プロジェクトでのデプロイ
デプロイする際に考慮すべきだったもの
BUILD_ID
BUILD_ID
とは?
/_next/static/7Fi662KeEj0FPozITJ6xZ/pages/index.js
nanoid
を利用してランダム値生成BUILD_ID
でないと不都合postbuild
的な後処理 📦BUILD_ID
として置換generateBuildId
という関数が用意されているCSR はリニューアル以前の Backbone.js, jQuery で動いています
<link rel="preload">
で 3rd party を投機的読み込みSSR: 愚直にレンダー
CSR: cSU false, dangerlously... 空値 => hydrate 処理軽量
何某かのブラウザ API をフックに ReactDOM.hydrate
// Two ways to opt in:
// 1. Part of an app (not final API)
<React.unstable_ConcurrentMode>
<Something />
</React.unstable_ConcurrentMode>
// 2. Whole app (not final API)
ReactDOM.unstable_createRoot(domNode).render(<App />);
Scheduling in React | Philipp Spiess
import {
unstable_LowPriority,
unstable_runWithPriority,
unstable_scheduleCallback
} from "scheduler";
function sendDeferredAnalyticsNotification(value) {
unstable_runWithPriority(unstable_LowPriority, () => {
unstable_scheduleCallback(() => {
sendAnalyticsNotification(value);
});
});
}
API や抜本的になにか変わることを期待してはダメ
小さなことからコツコツと積み重ね計測することが一番近道なはず