线上项目白屏的原因
2026-08-27
1082 字约 4 分钟
...白屏的本质是渲染管线某一环断了——可能是资源、JS、接口、路由、样式、兼容性任一环节出问题。排查按"控制台 → 网络 → DOM → 环境"四步定位。
本质(前端类比)
把网页想成一栋楼:
房子盖好了,里面有人,但他说不出话 = 数据没回来 → 白屏
房子盖好了,里面没人 = JS 没执行 → 白屏
房子没盖好 = HTML 没加载 → 白屏
灯没开 = CSS 缺失 → 白屏
人在家但出 bug 了 = JS 运行时错误 → 白屏
白屏 ≠ 一定是同一种原因——这是面试想听的层次。
六大类原因(按出现频率)
| 类别 | 典型表现 | 真实案例 |
|---|---|---|
| ① 资源加载失败 | DOM 是空的 | 入口 JS 404、CDN 挂了、CSS 阻塞 |
| ② JS 运行时错误 | 控制台红字,页面卡死 | undefined.xxx、循环引用 |
| ③ 接口请求失败 | 框架在,内容区空白 | 接口超时、CORS、401 后没 fallback |
| ④ 渲染逻辑错误 | 路由匹配不到、组件 throw | SPA 路由配置漏、写错 base path |
| ⑤ 样式问题 | DOM 在但看不见 | display:none、z-index 被遮、字色和背景同色 |
| ⑥ 兼容性/构建 | 特定设备/版本才白屏 | polyfill 漏配、浏览器版本太低 |
排查顺序(面试答题模板)
拿到白屏,按这个顺序查——从最快到最慢:
第 1 步 看控制台
├─ 有报错 → 解决报错即可(最高频)
└─ 没报错 → 进入第 2 步
第 2 步 看 Network
├─ 入口 HTML/JS 红色 4xx/5xx → 资源问题
├─ 关键 CSS 红色 → 样式问题
├─ 接口全部 pending → 网络/后端问题
└─ 全部 200 → 进入第 3 步
第 3 步 看 Elements/DOM
├─ #app 是空的 → JS 没执行
├─ #app 有内容但 0 高度 → CSS 问题
└─ 有内容但没显示 → v-if/z-index 问题
第 4 步 区分环境
├─ 只在某个浏览器版本 → 兼容性
├─ 只在某个网络 → 跨域/代理
└─ 所有人都白屏 → 部署/构建
高频坑(面试加分项)
1. JS 报错吞掉整棵树(React 类比)
React 组件里只要有一个 throw 没被 <ErrorBoundary> 接住,整个根组件就 unmount。Vue 同理(errorHandler 没注册)。线上最常见是某个非核心组件(统计、广告、某个弹窗)挂了,整个应用一起死。
2. 异步数据没回来就先 render
// ❌ 典型写法
const [user, setUser] = useState(null)
return <div>{user.name}</div> // user 为 null 就白屏
// ✅ 应该有 loading/empty/error 三态
if (loading) return <Skeleton />
if (!user) return <Empty />
return <div>{user.name}</div>
3. SPA 部署路径错
线上最经典的坑:
- 前端路由是
/user/123,但 nginx 没配try_files,刷新直接 404 - 部署到子路径(如
/admin/)但代码里写死了绝对路径/static/xxx.js - history 模式和 hash 模式配错
4. 接口报错没兜底
axios.get('/api/user')
.then(res => this.setState({ user: res.data }))
// ❌ 没有 .catch,网络挂了一直转圈或白屏
5. 环境变量漏配
.env.production 没打包进 dist,process.env.API_BASE 是 undefined,接口请求 undefined/api/user → 404 → 白屏。
6. CDN / 字体阻塞
- 用了 Google Fonts,国内访问全挂,CSS 加载阻塞渲染
<link>里的 JS 报错,整页 HTML parse 停下来
一句话答题版
白屏的本质是渲染管线某一环断了。从排查角度按"控制台 → 网络 → DOM → 环境"四步定位;从原因角度分资源加载、运行时错误、接口请求、渲染逻辑、样式问题、兼容性六大类。实战里最常见的是 JS 报错吞整棵树、异步数据没回就先 render、SPA 部署路径错 这三类。
延伸阅读
前端性能优化_白屏-首屏加载:白屏时间指标计算SPA项目频繁上线导致白屏?最佳实践来了:SPA 部署缓存策略一次低端机 WebView 白屏的兼容之路:兼容性专题vite+vue3实现低版本浏览器兼容的解决方案:构建工具兼容方案
如果您觉得这篇文章有帮助,请点个赞吧~
相关文章
更多文章 →八股文2026-08-27
定时器按顺序播放多个音频,切后台音频会乱
本身不会补触发,但 它会被系统级冻结 ——iOS Safari 后台完全停止计时,切回前台后 只补执行一次 (不是不补,而是"缺失的中间状态补不上")。间隔短的不会出大问题, 间隔长的会出现"音频流被压缩" ——切回来后本该播 5 分钟的间隙,实际只过了 3 分钟,结果整段对不上。 核心原则 :定时器只能用来"提醒一次", 真正决定"该不该播"的是绝对时间戳 。 setTimeout 在后台会发生什么(按平台) | 平台 | 后台行为...
面试
八股文2026-08-27
背景图就是 1MB 大图,怎么优化
1MB 大背景图优化分 三步 :压缩体积(10 30x)、按需加载(按设备/视口/网速)、渲染期优化(GPU 合成)。背景图跟 不同——它是 CSS,不走浏览器的原生懒加载机制,得手动处理。 背景图 vs 的关键区别(先讲清楚这个) 这是面试官想听的"针对性认知"——背景图不是普通图片,不能套通用方案。 三步优化(按优先级) 第 1 步:压缩体积(最重要,立竿见影) 1MB 的来源一般是这几种 ,对应解决方案: | 原始问题 | 体积来...
面试
八股文2026-08-27
项目里很多图片和视频,怎么优化
图片视频优化分 四层 :网络层(CDN/格式)、加载层(懒加载/预加载)、渲染层(解码/缓存)、业务层(按需/降级)。面试要把这四层都讲到位才算有体系。 四层优化模型 第 1 层:网络层(省钱、省时间) 核心目标:让资源体积小、让用户拿到资源快 | 手段 | 作用 | 关键点 | | : | : | : | | 图片格式 | WebP/AVIF 比 JPEG 小 25 50% | 兼容 fallback | | 视频格式 | H.265...
面试
八股文2026-08-20
Embedding 向量模型:从语义表示到相似度计算
前言 大模型「读懂」文字靠的是 token,但 token 之间只有离散的编号关系,模型并不知道「苹果」和「李子」在语义上很近。要让程序能「理解」两段文字的相似程度,必须先把文本映射成一个 高维向量 ,再用几何方法比较。这一步就是 Embedding。 本篇基于我本地 今天的真实代码,从语义表示讲到余弦相似度,并复盘几个踩过的真实坑。 一、为什么需要 Embedding 传统关键词检索是「字面匹配」: Embedding 做的是「语义匹...
面试
八股文2026-08-19
前端面试100题
前端面试 100 题 适用方向:中高级前端 / React / Vue / Next.js / Nuxt / TypeScript / 工程化 / 实时通信 / Electron / Node.js / AI 应用前端 使用方式:优先掌握“标准回答”,再练“面试官追问”,最后把“结合你的简历怎么答”组织成自己的项目故事。 说明 “结合你的简历怎么答”只使用你简历中已经出现的项目与技术事实。 “标准回答 / 追问”属于通用前端知识总结,用...
面试
八股文2026-08-19
深入理解 JavaScript 原型与原型链:从关系图到核心逻辑 - heshanwan - 博客园
在 JavaScript 世界里, 原型(Prototype)和原型链(Prototype Chain) 是理解对象继承、属性查找机制的基石。很多开发者初学时对它们 “又爱又恨”,这篇文章将结合经典关系图,用通俗易懂的方式拆解原型与原型链的核心逻辑,帮你彻底掌握这套机制! 一、先搞懂几个核心概念 在分析关系图前,先明确 JavaScript 中与原型相关的关键概念,避免后续混淆: 1\. 函数对象与普通对象 函数对象 :由...
面试
评论
请登录后发表评论
去登录