Token导航 LogoToken导航TokenDH.com
前端设计操作浏览器github未标认证来源可访问许可证需确认审计异常

web-perf网络性能

Agent Skill

web-perf 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

724

周安装

29

GitHub Stars

25

下载量

234
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:web-perf(网络性能)
来源仓库:https://github.com/oimiragieo/agent-studio
仓库路径:skills/web-perf
安装命令:
npx skills add https://github.com/oimiragieo/agent-studio --skill web-perf
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/oimiragieo/agent-studio --skill web-perf

简介

web-perf 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息。

  • 适合围绕仓库状态、代码变更或协作事项进行整理和查询。
  • 可结合来源仓库、安装命令和原始 README 继续核验具体用法。
  • 安装前建议确认权限范围、维护状态及是否触发联网或文件读写。
  • 涉及创建 PR、修改 Issue 时需确认 token 权限和目标仓库范围。

SKILL.md

Web Performance Audit

Structured 5-phase web performance audit workflow. Diagnose performance bottlenecks, measure Core Web Vitals, and produce actionable optimization recommendations.

When to Apply

Use this skill when:

  • Auditing website performance for Core Web Vitals compliance
  • Diagnosing slow page loads, high Time to Interactive, or layout shifts
  • Optimizing Largest Contentful Paint (LCP), Cumulative Layout Shift (CLS), or Interaction to Next Paint (INP)
  • Reviewing frontend code for performance anti-patterns
  • Preparing a site for Google's page experience ranking signals
  • Optimizing build output for Webpack, Vite, Next.js, or Nuxt

Core Web Vitals Thresholds

MetricGoodNeeds ImprovementPoorWhat It Measures
LCP<= 2.5s2.5s - 4.0s> 4.0sLoading performance
CLS<= 0.10.1 - 0.25> 0.25Visual stability
INP<= 200ms200ms - 500ms> 500msInteractivity (replaced FID)

Additional Performance Metrics

MetricGoodPoorWhat It Measures
FCP<= 1.8s> 3.0sFirst content rendered
TTFB<= 800ms> 1800msServer response time
TBT<= 200ms> 600msMain thread blocking
Speed Index<= 3.4s> 5.8sVisual completeness over time

5-Phase Audit Workflow

Phase 1: Performance Trace

Capture a performance trace to establish baseline metrics.

Browser-Based (Chrome DevTools):

  1. Open Chrome DevTools (F12) > Performance tab
  2. Click "Record" and reload the page
  3. Stop recording after page fully loads
  4. Analyze the flame chart for:

- Long tasks (> 50ms, marked in red) - Layout thrashing (forced reflow cycles) - Render-blocking resources - JavaScript execution bottlenecks

Lighthouse Audit:

# CLI-based Lighthouse audit
npx lighthouse https://example.com --output=json --output-path=./lighthouse-report.json

# With specific categories
npx lighthouse https://example.com --only-categories=performance --output=html

# Mobile simulation (default)
npx lighthouse https://example.com --preset=perf --throttling-method=simulate

Key Trace Indicators:

  • Main thread busy time: Should be < 4s total
  • Largest task duration: Should be < 250ms
  • Script evaluation time: Should be < 2s
  • Layout/style recalculation: Should be < 500ms

Phase 2: Core Web Vitals Analysis

Measure each Core Web Vital and identify specific causes.

LCP Diagnosis

LCP measures loading performance -- when the largest content element becomes visible.

Common LCP Elements:

  • <img> elements (hero images)
  • <video> poster images
  • Block-level elements with background images
  • Text blocks (<h1>, <p>)

LCP Optimization Checklist:

  1. Preload the LCP resource <link rel="preload" as="image" href="/hero.webp" fetchpriority="high" />
  2. Eliminate render-blocking resources <!-- Defer non-critical CSS --> <link rel="stylesheet" href="/non-critical.css" media="print" onload="this.media='all'" /> <!-- Async non-critical JS --> <script src="/analytics.js" async></script>
  3. Optimize server response time (TTFB)

- Use CDN for static assets - Enable HTTP/2 or HTTP/3 - Implement server-side caching - Use streaming SSR where supported

  1. Optimize image delivery <!-- Modern format with fallback --> <picture> <source srcset="/hero.avif" type="image/avif" /> <source srcset="/hero.webp" type="image/webp" /> <img src="/hero.jpg" alt="Hero" width="1200" height="600" fetchpriority="high" decoding="async" /> </picture>

CLS Diagnosis

CLS measures visual stability -- unexpected layout shifts during page load.

Common CLS Causes:

  • Images without explicit dimensions
  • Ads or embeds without reserved space
  • Dynamically injected content above the fold
  • Web fonts causing FOIT/FOUT (Flash of Invisible/Unstyled Text)

CLS Optimization Checklist:

  1. Always set image dimensions <img src="/photo.jpg" width="800" height="600" alt="Photo" /> Or use CSS aspect-ratio: .hero-image {aspect-ratio: 16 / 9; width: 100%;}
  2. Reserve space for dynamic content .ad-slot {min-height: 250px;}.skeleton {height: 200px; background: #f0f0f0;}
  3. Use font-display: swap with size-adjust @font-face {font-family: 'CustomFont'; src: url('/font.woff2') format('woff2'); font-display: swap; size-adjust: 100.5%; /* Match fallback font metrics */}
  4. Avoid inserting content above existing content

- Banners should push down from top, not shift existing content - Use transform animations instead of top/left/width/height

INP Diagnosis

INP measures interactivity -- the delay between user interaction and visual response.

Common INP Causes:

  • Long JavaScript tasks blocking the main thread
  • Synchronous layout/style recalculations
  • Heavy event handlers
  • Excessive re-renders (React, Vue)

INP Optimization Checklist:

  1. Break up long tasks // Instead of one long task function processAllItems(items) {for (const item of items) {/* heavy work */}} // Break into chunks with scheduler async function processAllItems(items) {for (const item of items) {processItem(item); // Yield to main thread between items await scheduler.yield();}}
  2. Debounce/throttle event handlers // Throttle scroll handler let ticking = false; window.addEventListener('scroll', () => {if (!ticking) {requestAnimationFrame(() => {updateUI(); ticking = false;}); ticking = true;}}, {passive: true});
  3. Use requestIdleCallback for non-urgent work requestIdleCallback(() => {// Analytics, prefetching, non-visible updates sendAnalytics(data);});

Phase 3: Network Analysis

Analyze network waterfall for optimization opportunities.

Key Checks:

  1. Resource count and total size

- Target: < 100 requests, < 2MB total (compressed) - Check: performance.getEntriesByType('resource').length

  1. Critical request chains

- Identify chains longer than 3 requests - Break chains with preload/prefetch hints

  1. Compression

- All text resources should use Brotli (br) or gzip - Check Content-Encoding header in response

  1. Caching headers # Immutable assets (hashed filenames) Cache-Control: public, max-age=31536000, immutable # HTML documents Cache-Control: no-cache # API responses Cache-Control: private, max-age=0, must-revalidate
  2. HTTP/2+ multiplexing

- Verify protocol in DevTools Network tab - Multiple resources should load in parallel over single connection

Phase 4: Accessibility Performance

Performance optimizations must not degrade accessibility.

Validation Checklist:

  • Lazy-loaded images have alt attributes
  • Deferred scripts do not break keyboard navigation
  • Skeleton loaders have aria-busy="true" and aria-label
  • prefers-reduced-motion is respected for animations
  • Focus management works with dynamically loaded content
/* Respect reduced motion preference */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

Phase 5: Codebase Analysis

Review source code for performance anti-patterns.

Webpack Optimization

// webpack.config.js
module.exports = {
  optimization: {
    splitChunks: {
      chunks: 'all',
      maxInitialRequests: 25,
      minSize: 20000,
      cacheGroups: {
        vendor: {
          test: /[\\/]node_modules[\\/]/,
          name(module) {
            const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1];
            return `vendor.${packageName.replace('@', '')}`;
          },
        },
      },
    },
  },
};

Vite Optimization

// vite.config.ts
export default defineConfig({
  build: {
    rollupOptions: {
      output: {
        manualChunks: {
          vendor: ['react', 'react-dom'],
          router: ['react-router-dom'],
        },
      },
    },
    cssCodeSplit: true,
    sourcemap: false, // Disable in production
  },
});

Next.js Optimization

// next.config.ts
const nextConfig = {
  images: {
    formats: ['image/avif', 'image/webp'],
    deviceSizes: [640, 750, 828, 1080, 1200],
  },
  experimental: {
    optimizePackageImports: ['lucide-react', '@heroicons/react'],
  },
};

Common Code Anti-Patterns

Anti-PatternImpactFix
Barrel file importsBundle bloatImport directly from module
Synchronous localStorage in renderMain thread blockMove to useEffect or worker
Unoptimized imagesLCP, bandwidthUse next/image or <picture>
Inline <script> in bodyRender blockingUse async or defer
CSS @import chainsCSSOM blockingConcatenate or inline critical CSS
Unthrottled scroll listenersINPUse passive: true + requestAnimationFrame
document.querySelectorAll in loopsLayout thrashingCache DOM references

Audit Report Template

# Web Performance Audit Report

**URL:** [target URL]
**Date:** [audit date]
**Tool:** Lighthouse [version] / Chrome DevTools

## Core Web Vitals Summary

| Metric | Score | Rating                      | Target   |
| ------ | ----- | --------------------------- | -------- |
| LCP    | X.Xs  | GOOD/NEEDS IMPROVEMENT/POOR | <= 2.5s  |
| CLS    | X.XX  | GOOD/NEEDS IMPROVEMENT/POOR | <= 0.1   |
| INP    | Xms   | GOOD/NEEDS IMPROVEMENT/POOR | <= 200ms |
| FCP    | X.Xs  | -                           | <= 1.8s  |
| TTFB   | Xms   | -                           | <= 800ms |
| TBT    | Xms   | -                           | <= 200ms |

## Critical Findings

### P0 (Immediate Action Required)

1. [Finding] - [Impact] - [Recommended Fix]

### P1 (Address This Sprint)

1. [Finding] - [Impact] - [Recommended Fix]

### P2 (Address This Quarter)

1. [Finding] - [Impact] - [Recommended Fix]

## Optimization Recommendations (Priority Order)

1. [Recommendation with estimated impact]
2. [Recommendation with estimated impact]
3. [Recommendation with estimated impact]

Anti-Patterns

  • Do NOT optimize without measuring first -- always capture baseline metrics
  • Do NOT lazy-load above-the-fold content -- it worsens LCP
  • Do NOT remove image dimensions to "fix" CLS -- use CSS aspect-ratio instead
  • Do NOT bundle all JS into a single file -- use code splitting
  • Do NOT ignore mobile performance -- test with CPU/network throttling
  • Do NOT use loading="lazy" on the LCP image -- it delays loading
  • Do NOT serve images without modern formats (AVIF/WebP)

References

Iron Laws

  1. ALWAYS measure Core Web Vitals (LCP, INP, CLS) with field data (CrUX) before proposing optimizations
  2. NEVER optimize based on lab data alone — real user metrics determine actual user experience
  3. ALWAYS prioritize LCP ≤2.5s, INP ≤200ms, CLS ≤0.1 as the primary performance targets
  4. NEVER ship a performance fix without a before/after measurement proving improvement
  5. ALWAYS address critical rendering path issues before layout or paint optimizations

Anti-Patterns

Anti-PatternWhy It FailsCorrect Approach
Optimizing without baseline measurementCan't prove improvement, may optimize wrong thingMeasure CWV with Lighthouse and CrUX first
Lab-only metrics (Lighthouse only)Doesn't reflect real user network/device conditionsCombine lab data with CrUX field data
Fixing CLS before LCP is addressedLCP impacts far more users than CLSPrioritize in order: LCP → INP → CLS
Shipping without before/after metricsNo evidence of improvement for stakeholdersRecord pre-fix and post-fix CWV scores
Adding polyfills without code splittingBloats JS bundle for all usersUse dynamic import() with target browserslist

Memory Protocol (MANDATORY)

Before starting: Read .claude/context/memory/learnings.md

After completing:

  • New pattern -> .claude/context/memory/learnings.md
  • Issue found -> .claude/context/memory/issues.md
  • Decision made -> .claude/context/memory/decisions.md

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

39.2%
按下载量换算92

Claude

29.59%
按下载量换算69

Cursor

19.15%
按下载量换算45

Gemini CLI

9.25%
按下载量换算22

安全审计

Gen Agent Trust Hub

可疑

Socket

通过

Snyk

未通过

权限和风险

操作浏览器

该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在 warning/failed 结果,不能写成本站确认安全。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills