Skip to content

Commit e331068

Browse files
committed
chore: 更新依赖
1 parent ba79ddd commit e331068

File tree

8 files changed

+2217
-1996
lines changed

8 files changed

+2217
-1996
lines changed
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
---
2+
title: "移动端web兼容性"
3+
draft: true
4+
tags: ["web"]
5+
date: "2025/08/08"
6+
---
7+
8+
移动端 Web 的运行环境更加碎片化:
9+
10+
* **设备差异**:从低端千元机到旗舰机,硬件性能差距明显
11+
* **系统多样**:Android 不同版本、iOS 不同版本差异大
12+
* **浏览器分化**:Chrome、Safari、UC、微信内置浏览器、抖音内置浏览器等,各自内核实现不一致
13+
* **API 支持度不一**:新特性支持情况不稳定,甚至存在同版本不同设备差异
14+
15+
本文将从实际开发经验出发,分享移动端 Web 兼容性的方法
16+
17+
## API 兼容性查询
18+
19+
了解目标 API 在各浏览器的支持情况
20+
21+
+ **[MDN Browser Compatibility](https://developer.mozilla.org/)**
22+
23+
+ **[Can I Use](https://caniuse.com/)**
24+
25+
> 建议在引入新 API 前,先查一遍兼容性
26+
27+
---
28+
29+
## 开发与构建工具配置
30+
31+
### 打包工具配置
32+
33+
**Vite** 为例:
34+
35+
* `build.target`:决定最终构建输出 JS 的版本(如 `es2015``esnext`
36+
* **Polyfill**:通过插件或构建时注入,实现低版本浏览器的 API 补丁(如 `core-js``polyfill.io`
37+
38+
### TypeScript 配置
39+
40+
`tsconfig.json` 中:
41+
42+
* **`target`**:控制编译输出的 ECMAScript 版本(影响箭头函数、class、async/await 等语法是否降级)
43+
* **`lib`**:声明可用 API(如 `"DOM.Iterable"`, `"ES2020"`),影响编译时类型检查
44+
45+
### CSS 兼容处理
46+
47+
* **PostCSS** + `autoprefixer`:自动添加浏览器前缀(`-webkit-`, `-moz-` 等)
48+
* **lightningcss**:更快的 CSS 转换工具,支持自动降级部分新特性
49+
50+
### Polyfill 策略
51+
52+
* 按需引入,避免无意义的包体积膨胀
53+
* 现代浏览器可使用 `dynamic import` 动态加载 polyfill
54+
55+
56+
## 调试与验证
57+
58+
### 模拟器调试
59+
60+
* **iOS**:Xcode 内置模拟器,可选择不同设备和系统版本
61+
* **Android**:Android Studio 模拟器,可模拟多种机型和分辨率
62+
63+
### 真机调试
64+
65+
* 必不可少,能发现模拟器无法复现的性能问题与兼容性 Bug
66+
* 可使用 **VConsole** 在移动端直接查看日志
67+
68+
### 远程调试
69+
70+
* Safari + USB 调试 iOS 设备
71+
* Chrome DevTools + USB 调试 Android 设备
72+
73+
## 问题排查
74+
75+
1. **错误捕获与上报**
76+
77+
*`window.onerror``window.addEventListener('unhandledrejection')` 中捕获错误
78+
* 上报信息包括:错误描述、脚本文件名、行列号、浏览器版本、当前 URL 等
79+
* 服务端聚合日志,便于后续分析
80+
81+
2. **远程调试模式**
82+
83+
* 通过账号或 URL 参数判断是否开启调试模式
84+
* 调试模式下可引入 **VConsole****page-spy-web** 等工具
85+
86+
---
87+
88+
## 性能优化与降级方案
89+
90+
* **图片优化**:WebP/AVIF 格式、懒加载
91+
* **资源按需加载**:路由拆分、组件懒加载
92+
* **降级处理**:在低性能设备上关闭动画、使用静态替代方案
93+
* **API 降级**:不支持的新特性可回退到旧实现(例如 `oklch` 回退到 `rgb`
94+
95+
96+
## 用户提示与反馈
97+
98+
1. **不支持浏览器提示**
99+
100+
* 检测浏览器内核及版本,如果不支持,弹框提示用户升级浏览器或更换设备
101+
102+
2. **用户反馈渠道**
103+
104+
* 应用内的“问题反馈”入口
105+
* 引导用户提交:问题描述、截图、设备信息、浏览器版本
106+
* 对频繁出现的兼容性问题建立 FAQ
107+
108+
109+
## 总结
110+
111+
移动端 Web 兼容性不是一次性的工作,而是一个持续迭代、动态优化的过程。
112+
113+
* 开发前:查兼容性,合理选用 API
114+
* 开发中:配置好构建工具与 Polyfill
115+
* 调试阶段:模拟器 + 真机 + 远程调试三管齐下
116+
* 上线后:监控、上报、降级,及时响应用户反馈
117+
118+
做到这些,才能让你的移动端 Web 在碎片化的设备环境中运行。
119+

package.json

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
"name": "astro-latest",
33
"type": "module",
44
"version": "0.0.1",
5-
"packageManager": "pnpm@10.0.0+sha512.b8fef5494bd3fe4cbd4edabd0745df2ee5be3e4b0b8b08fa643aa3e4c6702ccc0f00d68fa8a8c9858a735a0032485a44990ed2810526c875e416f001b17df12b",
5+
"packageManager": "pnpm@10.28.0+sha512.05df71d1421f21399e053fde567cea34d446fa02c76571441bfc1c7956e98e363088982d940465fd34480d4d90a0668bc12362f8aa88000a64e83d0b0e47be48",
66
"repository": "https://github.com/ckvv/ckvv.github.io",
77
"engines": {
8-
"node": "^22.x"
8+
"node": "^24.x"
99
},
1010
"scripts": {
1111
"gen": "node --experimental-strip-types ./scripts/gen.ts",
@@ -16,22 +16,22 @@
1616
"lint": "eslint . --fix"
1717
},
1818
"dependencies": {
19-
"@astrojs/mdx": "^4.3.1",
20-
"@astrojs/react": "^4.3.0",
21-
"@astrojs/rss": "^4.0.12",
22-
"@astrojs/vue": "^5.1.0",
23-
"@tailwindcss/vite": "^4.1.11",
24-
"astro": "^5.12.5",
25-
"react": "^19.1.1",
26-
"react-dom": "^19.1.1",
27-
"tailwindcss": "^4.1.11",
28-
"vue": "^3.5.18"
19+
"@astrojs/mdx": "^4.3.13",
20+
"@astrojs/react": "^4.4.2",
21+
"@astrojs/rss": "^4.0.15",
22+
"@astrojs/vue": "^5.1.4",
23+
"@tailwindcss/vite": "^4.1.18",
24+
"astro": "^5.16.11",
25+
"react": "^19.2.3",
26+
"react-dom": "^19.2.3",
27+
"tailwindcss": "^4.1.18",
28+
"vue": "^3.5.26"
2929
},
3030
"devDependencies": {
31-
"@antfu/eslint-config": "^5.0.0",
32-
"@types/react": "^19.1.9",
33-
"@types/react-dom": "^19.1.7",
34-
"eslint": "^9.32.0",
35-
"eslint-plugin-astro": "^1.3.1"
31+
"@antfu/eslint-config": "^7.0.1",
32+
"@types/react": "^19.2.8",
33+
"@types/react-dom": "^19.2.3",
34+
"eslint": "^9.39.2",
35+
"eslint-plugin-astro": "^1.5.0"
3636
}
3737
}

0 commit comments

Comments
 (0)