https://github.com/ideamans/web-vitals-distribution

Probability Distribution Utility for Web Vitals

https://github.com/ideamans/web-vitals-distribution

Science Score: 26.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
  • Academic publication links
  • Academic email domains
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (1.6%) to scientific vocabulary
Last synced: 10 months ago · JSON representation

Repository

Probability Distribution Utility for Web Vitals

Basic Info
  • Host: GitHub
  • Owner: ideamans
  • Language: TypeScript
  • Default Branch: main
  • Size: 212 KB
Statistics
  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Created over 1 year ago · Last pushed 10 months ago
Metadata Files
Readme

README.ja.md

Web Vitals のための確率分布ユーティリティ

Web Vitalsの多くの指標は対数正規分布に基づくとされる。このユーティリティはWeb Vitalsの確率分布を扱うための各種機能を提供する。

インストール

bash npm i web-vitals-distribution

サポートするWeb Vitals指標

このライブラリは、以下の主要なWeb Vitals指標とその閾値をサポートする:

| 指標 | 説明 | 良い | 悪い | |------|------|------|------| | LCP | 最大視覚コンテンツの描画時間 | < 2500ms | > 4000ms | | INP | 次の描画までの相互作用 | < 100ms | > 500ms | | CLS | 累積レイアウトシフト | < 0.1 | > 0.25 | | TTFB | 最初のバイトまでの時間 | < 500ms | > 1500ms | | FCP | 最初のコンテンツ描画 | < 1500ms | > 2500ms | | OL | ページ読み込み完了 | < 2500ms | > 6500ms | | FID | 最初の入力遅延 | < 100ms | > 300ms | | RTT | ラウンドトリップタイム(ネットワーク診断) | < 75ms | > 275ms |

使い方

Chrome UX Reportは、サイトにおけるWeb Vitalsの実績を、良い基準の割合、悪い基準の割合、75パーセンタイル値で提供している。

このライブラリは、良い基準の割合と悪い基準の割合からWeb Vitalsの対数正規分布モデルを復元する。

基本的な使用例

```javascript import { createWebVitalsDistribution } from 'web-vitals-distribution'

// CrUXデータから分布を作成 // パラメータ: 指標タイプ、良い割合、悪い割合 const lcpDistribution = createWebVitalsDistribution('lcp', 0.61, 0.18)

// 統計量を取得 const mode = lcpDistribution.mode() // 最頻値 const median = lcpDistribution.median() // 中央値(50パーセンタイル) const mean = lcpDistribution.mean() // 平均値

console.log(LCP 最頻値: ${mode}ms) console.log(LCP 中央値: ${median}ms) console.log(LCP 平均値: ${mean}ms) ```

パーセンタイル値の取得

```javascript // 特定のパーセンタイル値を取得 const p75 = lcpDistribution.percentile(0.75) // 75パーセンタイル const p90 = lcpDistribution.percentile(0.90) // 90パーセンタイル const p99 = lcpDistribution.percentile(0.99) // 99パーセンタイル

console.log(75パーセンタイル: ${p75}ms) console.log(90パーセンタイル: ${p90}ms) console.log(99パーセンタイル: ${p99}ms) ```

確率計算

``javascript // 累積分布関数(CDF)を計算 // x以下の値となる確率を返す const probUnder3000 = lcpDistribution.cdf(3000) console.log(LCPが3000ms未満の確率: ${(probUnder3000 * 100).toFixed(1)}%`)

// 確率密度関数(PDF)を計算 // 特定の値の相対的な尤度を返す const density2500 = lcpDistribution.pdf(2500) ```

分布グラフの描画

```javascript // PDFグラフ用のデータポイントを生成 const p99 = lcpDistribution.percentile(0.99) const chartData = []

for (let i = 0; i <= 100; i++) { const x = (p99 * i) / 100 const probability = lcpDistribution.pdf(x) chartData.push({ x, probability }) }

// chartDataをお好みのグラフライブラリで使用 // (例:Chart.js、D3.js、Plotly など) ```

RTTによるネットワーク診断

RTT(ラウンドトリップタイム)は、ネットワーク状況を理解するための診断指標:

```javascript // CrUXのRTTデータからネットワーク状況を分析 const rttDistribution = createWebVitalsDistribution('rtt', 0.7, 0.15)

// ネットワーク統計を取得 const rttMedian = rttDistribution.median() const rttP90 = rttDistribution.percentile(0.90)

console.log(ネットワークRTT中央値: ${rttMedian}ms) console.log(ネットワークRTT 90パーセンタイル: ${rttP90}ms)

// 注意:RTTは診断指標であり、サイト運営者が直接改善することはできません // ネットワーク状況によるパフォーマンスの変動を理解するために使用してください ```

複数指標の完全な例

```javascript import { createWebVitalsDistribution } from 'web-vitals-distribution'

// あなたのサイトのCrUXデータ const metrics = { lcp: { good: 0.61, poor: 0.18 }, inp: { good: 0.85, poor: 0.05 }, cls: { good: 0.75, poor: 0.15 }, ttfb: { good: 0.90, poor: 0.03 } }

// 各指標を分析 for (const [metric, ratios] of Object.entries(metrics)) { const dist = createWebVitalsDistribution(metric, ratios.good, ratios.poor)

console.log(\n${metric.toUpperCase()} 分析:) console.log(最頻値: ${dist.mode().toFixed(2)}) console.log(中央値: ${dist.median().toFixed(2)}) console.log(75パーセンタイル: ${dist.percentile(0.75).toFixed(2)}) console.log(90パーセンタイル: ${dist.percentile(0.90).toFixed(2)}) } ```

APIリファレンス

createWebVitalsDistribution(type, goodRatio, poorRatio)

Web Vitals指標の対数正規分布を作成する。

  • type: 'lcp', 'inp', 'cls', 'ttfb', 'fcp', 'ol', 'fid', 'rtt' のいずれか
  • goodRatio: 「良い」体験のユーザーの割合(0-1)
  • poorRatio: 「悪い」体験のユーザーの割合(0-1)

以下のメソッドを持つ LogNormalDistribution インスタンスを返す:

  • pdf(x): 値xにおける確率密度関数
  • cdf(x): 値xまでの累積分布関数
  • percentile(p): パーセンタイルp(0-1)における値
  • mean(): 分布の平均値
  • median(): 分布の中央値
  • mode(): 分布の最頻値

Owner

  • Name: ideaman's Inc.
  • Login: ideamans
  • Kind: organization

GitHub Events

Total
  • Push event: 2
  • Create event: 2
Last Year
  • Push event: 2
  • Create event: 2

Packages

  • Total packages: 1
  • Total downloads: unknown
  • Total dependent packages: 0
  • Total dependent repositories: 0
  • Total versions: 2
  • Total maintainers: 1
npmjs.org: web-vitals-distribution

Probability Distribution Utility for Web Vitals

  • Versions: 2
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 0 Last month
Rankings
Dependent repos count: 25.3%
Average: 30.9%
Dependent packages count: 36.6%
Maintainers (1)
Last synced: 10 months ago