audit-performance — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited audit-performance (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Performance is not an optimization — it is a baseline requirement. Every second of load time costs conversions. Every render-blocking resource delays the user's first interaction. Every unoptimized image wastes bandwidth and damages Core Web Vitals scores that directly affect SEO ranking.
This audit covers everything that affects how fast the site loads and how smoothly it runs, verifiable by reading the code directly without external tools.
| Level | Description | Action |
|---|---|---|
| Critical | Blocks rendering or causes complete load failure | Fix before any other work |
| High | Fails Core Web Vitals, major bottleneck | Fix before launch |
| Medium | Performance opportunity with measurable impact | Fix within current sprint |
| Low | Minor optimization, marginal gain | Fix when convenient |
Time to render the largest visible element. Measures perceived load speed.
| Rating | Value |
|---|---|
| Good | < 2.5s |
| Needs improvement | 2.5s – 4.0s |
| Poor | > 4.0s |
What to check:
loading="lazy" — critical mistake that delays the most important elementfetchpriority="high"font-display: swap<link rel="preload">
Visual stability. Measures how much content moves unexpectedly during load.
| Rating | Value |
|---|---|
| Good | < 0.1 |
| Needs improvement | 0.1 – 0.25 |
| Poor | > 0.25 |
What to check:
width and height attributesfont-display: swap strategy definedtransform not top/left/margin/width/heightResponsiveness. Measures time from user interaction to next visual update.
| Rating | Value |
|---|---|
| Good | < 200ms |
| Needs improvement | 200ms – 500ms |
| Poor | > 500ms |
What to check:
Every page has a weight ceiling. Exceeding it degrades load times on mobile networks and low-end devices.
| Rating | Total Page Weight |
|---|---|
| Excellent | < 500 KB |
| Good | 500 KB – 1 MB |
| Acceptable | 1 MB – 2 MB |
| Poor | 2 MB – 5 MB |
| Critical | > 5 MB |
What to check:
<!-- Weight audit summary format -->
HTML: _____ KB
CSS: _____ KB (files: ___)
JS: _____ KB (files: ___)
Images: _____ KB (files: ___)
Fonts: _____ KB (files: ___)
Other: _____ KB
TOTAL: _____ KB
Requests: ___Images are typically 50–70% of total page weight. This section covers both performance and responsive delivery.
Full image strategy reference with code examples: see references/image-strategy.mdSummary of checks:
<picture> elementw) over density descriptors (x) — exception: fixed-size logos/icons<img> with srcset must have a sizes attribute matching actual layout widthsloading="eager" + fetchpriority="high"loading="lazy"loading="lazy" on above-fold images — High severitywidth and height attributesobject-fit: cover or contain<picture> with media queries| Image Position | loading | fetchpriority | Reason |
|---|---|---|---|
| Hero / LCP element | eager | high | Optimize LCP score |
| Above fold, not LCP | eager | omit | Load normally |
| Below fold | lazy | omit | Defer until near viewport |
| Off-screen carousel | lazy | omit | Defer until interaction |
What to check:
<head> before content@import rules — each creates a blocking chaintransition specifies properties explicitly, not all
@import url('components.css');
@import url('animations.css');
Render-blocking stylesheets delay first paint. Non-critical CSS should be loaded asynchronously.
What to check:
What to check:
defer or placed at end of <body>
What to check:
&display=swap<link rel="preconnect"> for font domains
What to check:
loading="lazy"loading="lazy"loading="lazy" on above-fold elementsThe .htaccess file at the project root controls compression and caching. Without it, every visit downloads uncompressed files with no browser caching.
What to check — verify `.htaccess` exists and contains:
# GZIP Compression
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css text/javascript
AddOutputFilterByType DEFLATE application/javascript application/json
AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>
# Cache Expiration Headers
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/avif "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/svg+xml "access plus 1 year"
ExpiresByType font/woff2 "access plus 1 year"
</IfModule>
# HTTPS Enforcement
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>Flag if .htaccess is missing entirely — High severity. Flag if GZIP or cache headers are absent.
What to check:
Page Title — Brand
Flag if: <!DOCTYPE html> is missing, charset is not within first 1024 bytes, viewport meta is absent, <title> is empty, scripts lack defer.
Full animation, WebGL/Canvas, and inline SVG reference: see references/animation-webgl-svg.mdtransform and opacity — GPU-acceleratedwidth, height, margin, padding, top, left — trigger layout recalculationtransition specifies properties explicitly, not allrequestAnimationFramewill-change must NOT be declared in static CSS rules — Medium severitywill-change at any time| Count on page | Impact |
|---|---|
| 1–3 | Acceptable |
| 4–8 | Medium — monitor on low-end devices |
| 9+ | High — likely causes jank on mobile |
backdrop-filter elementsbackdrop-filter on elements > 50% viewport — High severitybackdrop-filter combined with CSS animations — High severity@supports not (backdrop-filter: blur()) fallback existsIf the project does not use WebGL or Canvas, skip this section and note "Not applicable — no WebGL/Canvas detected" in the audit output.
Full WebGL/Canvas reference with code examples: see references/animation-webgl-svg.mdSummary of checks:
{ antialias: false } on mobileMath.min(window.devicePixelRatio || 1, 2)IntersectionObserver) — High severity if missingwebglcontextlost event handledPath2D for complex paths, offscreen canvas for static elementsIf the project does not use inline SVGs, skip this section and note "Not applicable — no inline SVGs detected" in the audit output.
Full inline SVG reference: see references/animation-webgl-svg.mdSummary of checks:
| SVG Block Size | Action |
|---|---|
| < 5 KB | Fine to inline |
| 5–20 KB | Consider if it must be inline or can be <img> |
| 20–50 KB | Should be external <img> with loading="lazy" unless animated |
| > 50 KB | Must be external — High severity if inline |
<img>, not inlineviewBox (case-sensitive) present on all SVGsprefers-reduced-motionRespecting motion preferences is both an accessibility requirement and a performance optimization.
What to check:
@media (prefers-reduced-motion: reduce) rule exists in CSS covering all animationswindow.matchMedia('(prefers-reduced-motion: reduce)') before startingprefers-reduced-motion — Medium severityFull code examples: see references/animation-webgl-svg.mdWhat to check:
defer or asyncPerformance Audit — [Project Name]
Date: [Date]
Summary
- Critical issues: X
- High priority: X
- Medium priority: X
- Low priority: X
- Total page weight: X KB (target: < 1 MB)
- backdrop-filter count: X
- Inline SVG weight: X KB
- WebGL/Canvas contexts: X
- Overall performance assessment: [Good / Needs work / Critical problems]
Critical Issues
[Issue title]
- File: [filename and line]
- Severity: Critical
- Issue: [What is wrong and why it matters]
- Fix: [Specific correction with code example]
High Priority
[Same format]
Medium Priority
[Same format]
Low Priority
[Same format]
Quick Wins
[Issues fixable in under 5 minutes with high impact]
Recommended Fix Order
1. [First because...]
2. [Then...]
3. [Finally...]Full quick-reference checklist: see references/checklist.md~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.