ポップオーバー API:JS なしでトップレイヤーのポップアップ
シナリオ:モニタリングダッシュボードで、親要素のoverflow: hiddenに遮られない浮動ウィンドウを表示する必要がある場合。
<button popovertarget="info-panel">詳細表示</button>
<div id="info-panel" popover>
<h4>リアルタイムメトリクス</h4>
<p>CPU 使用率: 85%</p>
</div>
ダイアログ API:制御されたモーダルダイアログ
シナリオ:アラーム発生時に、ユーザの明確な確認が必要なモーダルダイアログを表示。
<dialog id="confirmation-modal">
<form method="dialog">
<p>アラームを閉じますか?</p>
<button value="cancel">キャンセル</button>
<button value="confirm">確認</button>
</form>
</dialog>
<script>
const modal = document.getElementById('confirmation-modal');
modal.showModal();
modal.addEventListener('close', (event) => {
console.log('選択結果:', modal.returnValue);
});
</script>
Speculation Rules API:ページ遷移を瞬時に実現
シナリオ:ダッシュボードのリンク先の分析ページへのアクセスが80%の確率で予測される場合。
<script type="speculationrules">
{
"prerender": [{
"source": "list",
"urls": ["/dashboard/performance"],
"score": 0.9
}]
}
</script>
View Transitions API:UIの滑らかな遷移
シナリオ:リストビューから詳細ビューへの切り替え時に、カードがスムーズにアニメーションするようにする。
function changeView() {
if (!document.startViewTransition) {
updateLayout();
return;
}
document.startViewTransition(() => {
updateLayout();
});
}
.metric-element {
view-transition-name: card-transition;
}
WebAssembly と JS のゼロコピー通信
シナリオ:大量のデータポイントのトレンドをリアルタイムで計算する必要がある場合。
import init, { processMetrics } from './data_processing.wasm';
async function execute() {
await init();
const sharedBuffer = new SharedArrayBuffer(1024);
const dataView = new Float64Array(sharedBuffer);
const result = processMetrics(dataView);
}
WebTransport API:HTTP/3 時代のリアルタイム通信
シナリオ:数万台のデバイスから毫秒単位でデータを送信する場合、WebSocket の Head-of-Line Blocking 問題を回避。
const transport = new WebTransport('https://metrics.example.com:443');
await transport.ready;
const writer = transport.datagrams.writable.getWriter();
const data = new TextEncoder().encode(JSON.stringify({ cpu: 85 }));
await writer.write(data);
Intersection Observer API (V2):正確な可視性検出
シナリオ:広告の不正検知や高性能な長リストレンダリング。
const observer = new IntersectionObserver(entries => {
entries.forEach(entry => {
if (entry.isIntersecting && entry.isVisible) {
recordVisibility('element-real-view');
}
});
}, {
trackVisibility: true,
delay: 50
});
observer.observe(document.getElementById('target-element'));
Compression Streams API:ブラウザネイティブの圧縮
シナリオ:数MBのエラーログを送信前に圧縮。
async function compressAndSend(data) {
const stream = new Blob([JSON.stringify(data)]).stream();
const compressed = stream.pipeThrough(new CompressionStream('gzip'));
const blob = await new Response(compressed).blob();
navigator.sendBeacon('/logs', blob);
}
File System Access API:Web アプリをローカルツール化
シナリオ:GB単位のローカルログファイルを直接読み書きする分析ツール。
async function editLocalFile() {
const [handle] = await window.showOpenFilePicker();
const file = await handle.getFile();
const writable = await handle.createWritable();
await writable.write('新規ログエントリ');
await writable.close();
}