Frontend Weekly 2024-03-28
Chrome 123
2024 年 3 月 19 日に Chrome 123 がリリースされました。
Chrome 123 の新機能 | Blog | Chrome for Developers
text-spacing-trim
text-spacing-trim
プロパティを利用すれば、CJK の句読点や括弧を詰めることが出来ます。
このプロパティの各値は次のような効果をもたらします。
- normal:初期値。隣接している句読点や括弧のペアと行末を詰める。行頭は詰めない。
- trim-start:normal の行頭も詰める版。
- space-all:今までの表示。何も詰めない。
- space-first:normal の 1 行目以外の行頭も詰める版。
https://hrdtbs.github.io/sandbox/pages/css.text-spacing-trim.html
初期値でも効果があり現状 Chrome でしか利用できないため、Chrome 123 以前及び他のブラウザでの表示にズレが発生しています。
また、いくつか注意すべき点があります。
- メイリオや MS ゴシックなどいくつかのフォントには適用できない。
- font-feature-settings の palt や halt の方が優先される。
さらに、Yu Gothic UI に text-spacing-trim を適用するとバグることが分かっています。ただし、これはフォント側の問題で、font-feature-settings でも同様の問題が発生するようです。
light-dark() CSS function
CSS の light-dark()を利用すれば、ユーザー設定または指定された color-schema に応じて、色を切り替えることが出来ます。
:root { color-schema: light dark;}* { background-color: light-dark(ghostwhite, darkslategray); color: light-dark(darkslategray, ghostwhite);}
Block layout with align-content
Safari 17.4 に続いて、align-content を適用できるレイアウトが追加されました。 今まで利用できた flex や grid に加えて、block、list-item、table-cell に適用できます。
field-sizing: content;
field-sizing: content を使用すれば、フォーム要素の大きさをコンテンツ依存に出来ます。min-width や max-height などとの併用も可能です。これは以前 form-sizing という名前で呼ばれていました。現状 Chrome でのみサポート。
元々扱いにくい textarea 要素での Chat のような UI での利用例が多く見られますが、個人的には input 要素や select 要素でも有効なケースがある気がします。
display-mode: picture-in-picture
display-mode: picture-in-picture
を利用すれば、PiP でのみ適用される CSS を記述できます。現状 Chrome でのみサポート。
@media all and (display-mode: picture-in-picture) { body { margin: 0; } h1 { font-size: 0.8em; }}
Long Animation Frames API
あまり有益な情報をもたらさなかった Long Tasks API の代替手段として Long Animation Frames API が追加されました。これを利用することで、INP の改善に役立つ情報を取得できます。
名前の通りこれは個々の Task ではなく一連の Animation Frame を、レンダリングの更新が 50ms を超えて遅延する Long Animation Frame のみを対象にします。
長いアニメーション フレーム API | Web Platform | Chrome for Developers
とりあえず、計測したければ次のコードを貼り付けましょう。
const observer = new PerformanceObserver((list) => { console.log(list.getEntries());});
observer.observe({ type: "long-animation-frame", buffered: true });
次のようなデータが取れます。
[ { name: "long-animation-frame", entryType: "long-animation-frame", startTime: 3513644.6000000015, duration: 51, renderStart: 3513665.3000000007, styleAndLayoutStart: 3513685.8999999985, firstUIEventTimestamp: 0, blockingDuration: 0, scripts: [ { name: "script", entryType: "script", startTime: 3513651.1000000015, duration: 14, invoker: "MessagePort.onmessage", invokerType: "event-listener", windowAttribution: "self", executionStart: 3513651.1000000015, forcedStyleAndLayoutDuration: 0, pauseDuration: 0, sourceURL: "https://static.cdn.net/assets/vendor-9a...c.js", sourceFunctionName: "P", sourceCharPosition: 1174240, }, ], }, // ...];
Service Worker Static Routing API
Service Worker Static Routing API を利用すれば、ServiceWorker が起動する前に fetch して良いリソースをブラウザに伝えることが出来ます。
ページが読み込まれた際に Service Worker が実行されていないと、フェッチは Service Worker を通る必要があるため、パフォーマンスコストが発生することがありますが、これを迂回させることが出来ます。
addEventListener("install", (event) => { event.addRoutes({ condition: { urlPattern: "/articles/*", runningStatus: "running", }, source: "fetch-event", });});
Easter Egg
DevTools にイースターエッグが仕込まれているらしい。
4 月 1 日は、Web サイトのパフォーマンスチューニングをしよう。
What’s new in DevTools (Chrome 123) | Blog | Chrome for Developers
Others
“React が使いたいわけではなく jsx が使いたい Next が使いたいわけではなくファイルベースルーティングと SSR、Layouts が使いたい” みたいな人に hono は良いのかもしれない。
HonoX で shadcn/ui を使用する | yossy.dev
Twitter(X)の Digital Asset Links 対応
https://x.com/agektmr/status/1772553296009404645?s=20
Google Scholar PDF Reader
PDF 論文を読みやすくことを目的として Google 製 Chrome 拡張
Google、PDF 論文を劇的に読みやすくする Chrome 拡張「Google Scholar PDF Reader」
Netlify が Next.js の App Router をサポートした
長い間 experimental だった VitePress が 1.0 に。
VitePress という名前だが、VuePress の後継であり Vue しか使えない。
Announcing VitePress 1.0 | The Vue Point
Node.js v20.11.0 でサポートされた CJS のdirname やfilename 互換である ESM の import.meta.dirname、import.meta.filename について。
__dirname is back in Node.js with ES modules
色々なリアルタイム通信手法、読んでない
アクセシビリティチェックを実際どうのようにやるのか。
アクセシビリティチェックってどうやってるの?ということで、実際にやってみた。(その 1) - 水底の血
よくまとまっている。見出しの話は、二転三転しており、article や blockquote などのいくつかの要素で独立している場合、それらの見出しは h1 からはじまるべきという話があった。これが今のふわっとした形式に戻ったのは結構最近。
公式の、統一された、安定的な URL を求めるのであればhttps://www.rfc-editor.org/rfc/rfc9110.htmlを用いると良い。
RFC の URL はどのドメインで貼るのが良いか | blog.jxck.io
JS のエンジンとランタイム区別できてるか?
What’s the difference between JavaScript engines and JavaScript runtimes? - Human Who Codes
関連するファイルを開いておくのおすすめ。開いているファイルを読み込んで結果を返してくれる。
GitHub、Copilot でより高い精度のコードを生成させる方法を指南。関連ファイルを開く、トップレベルのコメントを書くなど
Sadness ojisan による実践 Next.js の書評。”App Router を学ぶ理由”は実際に触っている人しか分からない内容で、Page Router がまだ使えるなら良いと思っている人は認識を更新した方がいい。Page Router を利用する上で問題が出てきている。ただし App Router を利用する上でも問題はある。
Next.js を初心者向けツールとして捉えている自分が、実践 Next.js を読んでみて
SSR していればランタイム CSS-in-JS でもすごく速い。ゼロランタイム CSS-in-JS の意義はパフォーマンスよりエコシステム互換性。ゼロランタイムで生成された CSS を静的解析して最適化している。React Compiler と同様に Kuma のコンパイラは最適化手段
Kuma UI の設計思想と 頑張らないゼロランタイム CSS-in-JS
スレッド含めて面白そう。まだ読んでない。
Why choose async/await over threads?