---

title: Link Preload与资源优先级治理(rel=preload/as/importance)最佳实践

keywords:

  • preload
  • as
  • importance
  • crossorigin
  • 资源优先级

description: 通过对白名单资源使用rel=preload并设置as/importance/crossorigin,规范预加载与优先级,提升首屏性能并降低风险。

categories:

  • 文章资讯
  • 技术教程

---

背景与价值

预加载能显著优化首屏,但需要白名单与正确的as/importance设置,避免错用与安全风险。

统一规范

  • 白名单:仅受控域与版本化路径允许预加载。
  • as设置:与资源类型匹配(script/style/font/image/fetch)。
  • importance:关键资源使用high,其余low。

核心实现

校验与生成

const allowOrigins = new Set(['https://cdn.example.com','https://assets.example.com'])

function originAllowed(url: string): boolean { try { const u = new URL(url); return allowOrigins.has(u.origin) } catch { return false } }

function validAs(as: string): boolean { return ['script','style','font','image','fetch'].includes(as) }

function versioned(path: string): boolean { return /@[0-9]+\.[0-9]+\.[0-9]+\//.test(path) || /\.[a-f0-9]{8,}\./.test(path) }

function makePreload(url: string, as: string, importance: 'high'|'low'='high', crossOrigin?: 'anonymous'|'use-credentials'): HTMLLinkElement | null {
  try {
    const u = new URL(url)
    if (!originAllowed(url)) return null
    if (!versioned(u.pathname)) return null
    if (!validAs(as)) return null
    const el = document.createElement('link')
    el.rel = 'preload'
    el.href = url
    el.as = as
    ;(el as any).importance = importance
    if (crossOrigin) el.crossOrigin = crossOrigin
    document.head.appendChild(el)
    return el
  } catch { return null }
}

落地建议

  • 仅对白名单域与版本化资源开启preload;确保as与资源类型一致并设置适当优先级。

验证清单

  • 是否命中白名单与版本化路径;as与importance是否正确。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部