前言
前端开发就像修一条通往多设备、多浏览器、多用户的大道,这条路上布满了各种“陷阱”。本文将一一应对这些问题,并教你如何“优雅应对”。
浏览器兼容性问题
你可能遇到的问题
- 页面在 Chrome 上好好的,但在 IE/Edge 打开就全乱了;
- 用了
flex
布局,在 Safari 中无效; - 使用箭头函数(
=>
)报语法错误。
为什么会出现这种问题?
浏览器不是一锤子买卖,它们由不同厂商(Google、Apple、Microsoft)开发,对 HTML/CSS/JS 标准的实现存在时间差异或执行差异。举个例子:
/* 某些旧版浏览器无法识别标准属性 */
div {
display: flex;
-webkit-display: flex; /* 为 Safari 添加前缀 */
}
如何解决?
问题 | 解决方案 |
---|---|
CSS 属性失效 | 使用 Autoprefixer 自动加浏览器前缀 |
JS 新语法报错 | 使用 Babel 把 ES6+ 转成 ES5 |
API 不存在 | 用 Polyfill 补上缺的功能 |
示例:加前缀
npm install autoprefixer postcss-loader
然后在 webpack 配置中加入:
{
loader: 'postcss-loader',
options: {
postcssOptions: {
plugins: [require('autoprefixer')],
},
},
}
示例:Babel 配置
npm install --save-dev babel-loader @babel/core @babel/preset-env
{
test: /\.js$/,
use: {
loader: "babel-loader",
options: {
presets: ["@babel/preset-env"]
}
}
}
页面性能优化问题
你可能遇到的问题
- 首屏白屏好几秒;
- 页面卡顿,滚动不流畅;
- 用户打开一会儿浏览器就“假死”。
原因剖析
- 引入了太多资源,浏览器加载慢;
- 图片太大,压根没压缩;
- JS 执行太多同步操作,阻塞 UI 渲染;
- 动画、滚动时频繁操作 DOM。
实战优化建议
- 图片优化:使用 WebP 格式压缩图片,开启懒加载。
<img src="preview.jpg" data-src="real.jpg" loading="lazy" />
- 代码分割 + 懒加载
// 异步加载某个页面组件
const Page = React.lazy(() => import('./Page'))
- 使用 Web Worker 执行重计算
// 在 worker 中计算大数据,主线程不被卡住
工具使用:
- Lighthouse:评测你的网页得分
- Chrome Performance 面板:分析 Timeline、内存快照
响应式设计问题
你可能遇到的问题
- 页面在电脑上很美,在手机上元素重叠;
- 图片太大加载慢,或变形;
- 移动端点击不灵敏。
原因解析
响应式网页的核心目标是:无论用户用什么设备(手机、平板、PC)打开网页,体验都应该是合理的。
怎么解决?
- 设置 viewport:
<meta name