京喜跨端小程序开发实践
如果无法正常显示,请先停止浏览器的去广告插件。
        
                1. 京喜跨端小程序开发实践
沙冥冥
京东·凹凸实验室 高级前端开发工程师            
                        
                2.             
                        
                3. 沙冥冥
京东·凹凸实验室
负责京喜首⻚技术架构及核心开发            
                        
                4. 目录
• 项目背景
• 跨端实践
• 首⻚性能优化
• 代码体积优化
• 系统监控
• 总结            
                        
                5. 目录
• 项目背景
• 跨端实践
• 首⻚性能优化
• 代码体积优化
• 系统监控
• 总结            
                        
                6. 京喜社交电商平台
整包体积 20M
100+ 开发者
峰值近亿级请求量            
                        
                7. 京喜社交电商平台
微信小程序
QQ小程序
京东小程序
H5            
                        
                8. 京喜社交电商平台
• 高效的跨端实践
• 首⻚性能优化
• 代码体积优化
• 系统监控            
                        
                9. 目录
• 项目背景
• 跨端实践
• 首⻚性能优化
• 代码体积优化
• 系统监控
• 总结            
                        
                10. 跨端实践
X
Ta r o            
                        
                11. 跨端实践 | 项目结构
首⻚项目
• 多技术栈兼容
• 单⻚编译
•
同步的多端调试
完整小程序项目
多端适配
业务开发
其他业务
编译构建
目标代码            
                        
                12. 跨端实践 | 跨端语法
• 内置环境变量
• 条件编译
• 多端文件后缀
if(process.env.TARO_ENV === 'weapp'){ }
if(process.env.TARO_ENV === 'h5'){ }            
                        
                13. 跨端实践 | 跨端语法
• 内置环境变量
• 条件编译
•
多端文件后缀
/* #ifdef weapp
/* #endif */
/* #ifdef h5
/* #endif */
*/
*/            
                        
                14. 跨端实践 | 跨端语法
•
内置环境变量
login /
• 条件编译 ├── login.weapp.js
• 多端文件后缀 └── login.js
├── login.h5.js            
                        
                15. 目录
• 项目背景
• 跨端实践
• 首⻚性能优化
• 代码体积优化
• 系统监控
• 总结            
                        
                16. 首⻚性能优化 | 问题
• 虚拟列表
• 低端机降级
• 体验评分            
                        
                17. 首⻚性能优化 | 虚拟列表——组成
外层容器
onScroll()
+
update()            
                        
                18. 首⻚性能优化 | 虚拟列表——问题
• 结构改造
• 卡片高度计算
• 白屏优化            
                        
                19. 首⻚性能优化 | 虚拟列表——结构改造
⻚面容器
外层容器
onScroll()
update()
onScroll()
Event
update()            
                        
                20. 首⻚性能优化 | 虚拟列表——卡片高度计算
1
2
3
SelectorQuery
vs
compute
4
5
6
7            
                        
                21. 首⻚性能优化 | 虚拟列表——卡片高度计算            
                        
                22. 首⻚性能优化 | 虚拟列表——卡片高度计算
let sum = 345;
if(a){
if(b){
if(c){
if(d){
// sum
sum
sum
sum
sum
+=50;
+=50;
+=75;
+=50;
}
}
}
}            
                        
                23. 首⻚性能优化 | 虚拟列表——卡片高度计算            
                        
                24. 首⻚性能优化 | 虚拟列表——卡片高度计算
1rpx => 0.42px => 绘制
1rpx => 0.426667px => 计算            
                        
                25. 首⻚性能优化 | 虚拟列表——卡片高度计算
let sum = [345];
if
if
if
if
(a)
(b)
(c)
(d)
{
{
{
{
sum.push(50);
sum.push(50);
sum.push(75);
sum.push(50);
}
}
}
}
if (process.env.TARO_ENV === 'weapp') {
return sum.reduce((pre, next) => {
return pre + transformToRpx(Math.floor(transformFromRpx(next)))
}, 0)
} else {
return sum.reduce((pre, next) => pre + next, 0)
}            
                        
                26. 首⻚性能优化 | 虚拟列表——白屏优化
⻣架图
⻣架图
⻣架图            
                        
                27. 首⻚性能优化 | 虚拟列表——白屏优化            
                        
                28. 首⻚性能优化 | 虚拟列表——白屏优化
• 结构改造
• 卡片高度计算
• 白屏优化            
                        
                29. 首⻚性能优化 | 低端机降级
• 划分标准
• 优化内容            
                        
                30. 首⻚性能优化 | 低端机降级——标准
•
未知+低端:8%;高端机:92%            
                        
                31. 首⻚性能优化 | 低端机降级——标准
• 部分被划分为高端机的机型体验卡顿
• 与产品渠道的用户划分比例不符            
                        
                32. 首⻚性能优化 | 低端机降级——标准
样机校验 + 参数调整
未知+低端:33% ; 高端机:67%            
                        
                33. 首⻚性能优化 | 低端机降级——改造内容
• 轮播图改单图
• 动图改静图
• 大图改小图
• 去除跨模块关联
• 去除时间关联            
                        
                34. 首⻚性能优化 | 体验评分
• 首屏dom数
• 图片大小
• setData调用频率、内容大小            
                        
                35. 首⻚性能优化 | 总结
• 虚拟列表 ——结构改造/卡片高度计算/白屏优化
• 低端机降级 ——划分标准/优化内容
• 体验评分            
                        
                36. 目录
• 项目背景
• 跨端实践
• 首⻚性能优化
• 代码体积优化
• 系统监控
• 总结            
                        
                37. 代码体积优化 | 背景            
                        
                38. 代码体积优化 | 问题
瘦身体积 === 小程序代码包文件体积 ?            
                        
                39. 代码体积优化 | 标准
•
详情 -> 基本信息 -> 上次预览/上传            
                        
                40. 代码体积优化 | 常⻅且收益大
• 代码分包
• 依赖分析:移除未使用内容
• 避免使用本地资源(图片)
• 所有类型都进行压缩和注释清理            
                        
                41. 代码体积优化 | 目录
• 继承属性
• 样式补全
• 样式命名优化            
                        
                42. 代码体积优化 | 继承属性
border-collapse
border-spacing
caption-side
color
cursor
direction
empty-cells
font-family
font-size
font-weight
font-style
font-variant
font
letter-spacing
list-style-type
list-style-position
list-style-image
list-style
line-height
orphans
page-break-inside
quotes
text-align
text-indent
text-transform
visibility
white-space
widows
word-spacing
@font-face
减少10KB,占项目总量630KB的1.6%            
                        
                43. 代码体积优化 | 样式补全
.box {
display: flex;
display: -webkit-flex;
}            
                        
                44. 代码体积优化 | 样式补全
样式补全
项目代码
代码上传
样式补全
项目代码            
                        
                45. 代码体积优化 | 样式补全
开发者自己补全
开启编译补全
减少58KB,占项目总量630KB的9%            
                        
                46. 代码体积优化 | 样式命名优化
UglifyJs
function a(){}; function b(){}; function c(){};            
                        
                47. 代码体积优化 | 样式命名优化
<view className="banner">模板</view> <view className="a">模板</view>
.banner { /* 样式定义 */ } .a { /* 样式定义 */ }            
                        
                48. 代码体积优化 | 样式命名优化——CssModule
.banner { /* 样式定义 */ }
export default { banner : 'a' } /* 编译生成 */
import styles from ‘./index.module.scss.map.js'
<view className=“{{styles.banner}}“>模板</view>            
                        
                49. 代码体积优化 | 样式命名优化
weapp-css-modules
单字⺟编排
<view className="a">模板</view>
.a { /* 样式定义 */ }
移除map文件
减少50KB,占项目总量630KB的7.9%            
                        
                50. 代码体积优化 | 效果
631KB
•
继承属性
• 样式补全
• 样式命名优化
wxs
json
465KB
wxml
wxs
wxss
json
wxml
wxss
js
js
瘦身前
瘦身后            
                        
                51. 目录
• 项目背景
• 跨端实践
• 首⻚性能优化
• 代码体积优化
• 系统监控
• 总结            
                        
                52. 系统监控 | Badjs监控
Kibanna
• 数量大
• 模块划分不明显
• 实时反馈信息少            
                        
                53. 系统监控 | Badjs监控
内容平台
上报
告警
监控平台            
                        
                54. 系统监控 | 可用率监控
• 正确/错误/总数
• 周期性            
                        
                55. 目录
• 项目背景
• 跨端实践
• 首⻚性能优化
• 代码体积优化
• 系统稳定性提升
• 总结            
                        
                56. 总结
性能优化
虚拟列表
跨端实践 低端机降级
项目结构 体验评分
跨端语法
体积优化 系统监控
继承属性 BadJS监控
样式补全 可用率监控
样式命名优化            
                        
                57. 总结
在因地制宜和极限优化里探索,
论怎么戴上小程序的镣铐⻜起            
                        
                58.             
                        
                59.