おためし 11ty
直す気のないところ以外は lighthouse 満点までチューニングしてみた
- 画像の解像度が低すぎ → 元からこのサイズなので
- 小さすぎるリンクがある → 元から押されることを意図していないリンクが一つあるので
- なんらかの branch を push すると lighthouse が走る
masterに push するとビルドが走ってgh-pagesに発射される- 毎早朝にビルドが走る
npm install して npm run develop で開発用サーバー立ち上げ
npm run build で静的ページが _site に生成される (npm run serve で確認できる)。
web フォントのサブセット化に必要なツール
pip install fonttools
を入れてから npm run opt すると、生成された静的ページがもろもろ最適化される。
試してみたこと。
(see _includes/layout/minimal.njk)
-
index.njk のクリティカルな css をすべてインラインに展開
- それ以外のページはキャッシュに期待して普通に配置
-
index.njk のフォントを preload
- css 側で
font-display: swapな fontface を定義
- css 側で
-
追加の css, js をすべて遅延ロード
- 各種インタラクションなど、初回のレンダリングに必要のないもの
- js, css は
requestIdleCallbackでアイドルを待ってからロード (seejs/loader.js)loader.js自体はdeferで遅延ロード
(see .eleventy.js)
eleventy-imgでラスター画像の自動 webp 化 & lazy load
(see package.json)
-
glyphhangerで web フォントをサブセット化index.html用とそれ以外用で別々にサブセット化@fontfaceの CSS をインライン化してあるので、index.htmlだけ外から URL を書き換える- ※ html の minify 前に走らせないと、書き換え箇所が複数ある時うまくいかないっぽい
-
htmlminで html (とインライン js, css) を minify- タグ間のスペースまで消す設定にして、空白は margin でつける
- → フォントが後から読み込まれた時の CLS が小さい
- (※ この影響で opt 前後で空白の大きさが若干変わることがある)
-
uglifyjs-folderで js を minify -
cleancssで css を minify -
svgoで svg 画像を minify
(see js/prefetch.js)
-
サイト内リンクをほぼすべてアイドル中に
prefetchmousedown(touchstart) でprerender- 「最近の活動」ページだけリンクがすごく多いので自重
-
全ページ共通で使用している CSS などもアイドル中に
prefetch- index.njk だけ初回レンダー最優先でインライン化しているので
_datalastUpdatedDate.js... GitHub からこのリポジトリの最終更新日を取ってくるmonthEmoji.js... それぞれの月を表す絵文字recentActivities.js... 最近の僕の活動をいろんなフィードから取ってくる
_layouts... いろんなページで共通して使っている DOM 構造css... cssfonts... web フォントimg... ラスター画像js... jspages... 各ページ (のテンプレート)svg... SVG