前端首屏渲染性能优化小技巧

` export default defineNuxtPlugin(() => { if (process.client) { const optimizeCSSLoading = () => { const links = Array.from(document.querySelectorAll('link[rel="stylesheet"]')) as HTMLLinkElement[]

javascript 复制代码
  links.forEach((link) => {
    const href = link.getAttribute('href')
    if (!href) return
    
    if (href.includes('entry') && href.includes('.css')) {
      link.setAttribute('media', 'print')
      link.onload = function() {
        const linkElement = this as HTMLLinkElement
        linkElement.setAttribute('media', 'all')
      }
    }
  })
}

if (document.readyState === 'loading') {
  document.addEventListener('DOMContentLoaded', optimizeCSSLoading)
} else {
  setTimeout(optimizeCSSLoading, 0)
}

} }) `

plugins文件夹下创建async-css.client文件

vue3+ts+nuxt.js+sass+pina+vuetify+unocss+autoprefixer

这是一个用于优化 CSS 加载性能的 Nuxt 插件。 async-css.client.ts 实现了"异步 CSS 加载"优化,用于提升首屏渲染

工作原理

  1. 查找入口 CSS 文件:查找所有包含 entry 和 .css 的样式表链接(通常是 Nuxt 生成的入口 CSS)。
  2. 临时设置为打印媒体:将这些 CSS 的 media 属性设为 print,使其不阻塞渲染。
  3. 加载完成后恢复:CSS 加载完成后,将 media 改回 all,样式生效。

为什么这样做?

  • 问题:CSS 是渲染阻塞资源,会阻塞页面渲染,导致白屏。
  • 解决:通过 media="print" 让浏览器异步加载,不阻塞渲染,加载完成后再应用样式。

注意事项

  • 优点:减少首屏阻塞,提升 FCP/LCP。
  • 风险:可能出现短暂无样式(FOUC),但通常不明显。

建议

如果遇到样式闪烁或加载问题,可以:

  1. 移除该插件(删除文件)
  2. 或调整逻辑,只对非关键 CSS 应用此优化
相关推荐
超级无敌暴龙兽7 小时前
和我一起刷面试题呀
前端·面试
wzl202612137 小时前
企业微信定时群发技术实现与实操指南(原生接口+工具落地)
java·运维·前端·企业微信
小码哥_常7 小时前
Robots.txt:互联网爬虫世界的“隐形规则”
前端
小码哥_常7 小时前
Android开发神器:AndroidAutoSize,轻松搞定屏幕适配
前端
前端一小卒7 小时前
前端工程师的全栈焦虑,我用 60 天治好了
前端·javascript·后端
不停喝水7 小时前
【AI+Cursor】 告别切图仔,拥抱Vibe Coding: AI + Cursor 开启多模态全栈新纪元 (1)
前端·人工智能·后端·ai·ai编程·cursor
coderyi9 小时前
LLM Agent 浅析
前端·javascript·人工智能
科雷软件测试9 小时前
使用python+Midscene.js AI驱动打造企业级WEB自动化解决方案
前端·javascript·python
ConardLi9 小时前
把 Claude Design 做成 Skill,你的网站也能拥有顶级视觉体验
前端·人工智能·后端