转眼间已经参与过我厂好几个小程序的开发了,下面本妹子将开发中的那些注意点和各位小伙伴们分享下,妥妥的干货一枚。javascript
微信开发者工具不会对代码进行trim操做,若是代码中换行,页面也直接换行。css
通常来讲,wx:if 有更高的切换消耗而 hidden 有更高的初始渲染消耗。所以,若是须要频繁切换的情景下,用 hidden 更好,若是在运行时条件不大可能改变则 wx:if 较好。html
1.大图片也会形成页面切换的卡顿 有一部分小程序会在页面中引用大图片,在页面后退切换中会出现掉帧卡顿的状况。 2.图片占容量 代码包限制是2MB,图片占用空间较大,建议都上传到CDN
上,代码里直接引用连接。 3.大图片小点击位 小程序主要在手机端运行,手机屏幕大小有限,因此尽可能点击位大点。 4.图片截取 存在图片没有按原图宽高比例显示,能够设置image
组件的mode
属性,来保持原图宽高比。 5.CSSSprites 全部零星图片都包含到一张大图中,减小请求数vue
每一个 wxs 模块均有一个内置的 module 对象。 直接在wxml中引入,能够将写须要转化数据的写进去,防止给setData加负担java
一个太大的WXML节点树会增长内存的使用,样式重排时间也会更长,建议一个页面使用少于1000
个WXML的节点,节点树深度少于30
层,子节点数不大于60
个git
在微信开发者工具中,Styles
不会显示Css
伪类,喜欢写::before或:first-child的小伙伴们请注意了,你的伪类在控制台是看不到的,因此本妹子不建议在小程序里用Css
伪类,以防找不到问题点很差修复bug。github
小程序button
自带给after
伪类添加了边框,经过开发者工具是看不到after
,咱们须要自行去掉边框。web
button::after {
border: none;
}
复制代码
hover
伪类则能够用小程序自带的属性hover-class
代替。json
不是因此颜色配置都能为所欲为,好比导航栏标题颜色,仅支持 black / white;下拉 loading 的样式,仅支持 dark / light。因此出视觉图关注下。小程序
当加了overflow: scroll时,IOS
下须要额外设置: -webkit-overflow-scrolling: touch,来开启惯性滚动。
若是须要支持到IOS8
话,建议下面js
方法都不使用。
若是你想自定义分享图片,则在生命周期onShareAppMessage中编写以下所示:
Page({
onShareAppMessage: function (res) {
return {
title: '自定义转发标题',
imageUrl: 'https://blog.frontendx.cn/images/logo.png'
}
}
})
复制代码
可是onShareAppMessage
不能支持异步,若是你想从接口里获取分享图片URL,必须在onLoad
提早读取并放入Data中
wx.request、wx.uploadFile、wx.downloadFile 的最大并发限制是 10 个。
全部为了保险起见,须要写个请求队列,若是并发量大于10,则等待请求。
编写公共方法和组件,能够避免重复造轮子。 1.公共埋点方法 2.各类处理js的方法(转https,throttle,formatTime等) 3.公共组件(iphonex兼容组件,倒计时组件等)
好比catchtouchmove
弹框禁止滑动 bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定能够阻止冒泡事件向上冒泡。
对于常常要更新的列表须要加上key
值,key值至关于索引,可是key
值不要用index
,由于index
在增长删除的时候可能不变产生混乱,推荐用惟一标示id
,对数据改变以后的diff更新比较有很大的性能提高。 PS:若是是单纯只显示的列表,不须要操做更新,那不须要加key
。
小程序和vue写法比较类似,也有nextTick
,在当前同步流程结束后,下一个时间片执行 。 好比有些取视图层的数据,能够等页面上流程结束后再取比较准确
wx.nextTick(() => {
query.select('.percent-line-toast').boundingClientRect()
})
复制代码
setTimeout必定伴随着clearTimeout setInterval必定伴随着clearInterval 这些咱们常常会滚动算高度,倒计时,动画中用到。当我跳到了另一个页面还在运行,当心后台页面的js
两个都是基于同一个原生toast实例实现的,wx.showLoading()与wx.showToast(), 同时只能显示一个, wx.hideLoading()也会隐藏Toast ; wx.hideToast()也会隐藏Loading, 失败的提示toast会一闪而过的问题,可能时由于调用了wx.hideLoading()。
HTTP是明文传输有篡改内容的风险,并且有些安卓机会不兼容。因此咱们须要使用https。 因此开需求评审的时候,要注意后端要写成https,若是是运营配的数据,后端最好有个转https方法,输入了url自动转成https连接。
在微信开发者工具中,可勾选"不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书"规则便可用http,可是在实体里并无这个选项,因此建议开发时就用https路径。
埋点用公共方法,页面曝光pv
埋点放入onshow
生命周期中更加准确。
1.数据预加载 上个页面就将接口请求好,存到对象中,下个页面直接从对象中拿,有利有弊,从业务角度出发看是否须要预加载数据 storage也能够存储数据,同一个微信用户,同一个小程序 storage 上限为 10MB。 2. 分包预加载preloadRule preloadRule
预下载分包行为在进入某个页面时触发,享有共同的预下载大小限额 2M。
"preloadRule": {
"sub1/index": {
"packages": ["important"]
}
}
复制代码
3.图片预加载 对视觉效果要求愈来愈高,多张图片若是想动画显示流畅,能够先加载图片,直接用request先请求图片下来。
1. 频繁的去 setData 存在将未绑定在 WXML 的变量都不须要传入 setData。 2. 每次 setData 都传递大量新数据,可局部更新
this.setData({
list[index] = newList[index]
})
复制代码
3. 后台态页面进行 setData
当页面进入后台态(用户不可见),不该该继续去进行setData
,后台态页面的渲染用户是没法感觉的,另外后台态页面去setData
也会抢占前台页面的执行。也就是上文提到的不要忘了clearTimeout
、clearInterval
。
因为小程序包大小有限制,整个小程序全部分包(包括独立分包和普通分包)大小不超过 8M,单个分包/主包大小不能超过 2M,建议把首屏不须要展现的都放入分包中,分包就像H5打出的chunk包同样,能够按需加载。
在平常开发的时候,咱们可能引入了一些新的库文件,而过了一段时间后,因为各类缘由又再也不使用这个库了,咱们经常会只是去掉了代码里的引用,而忘记删掉这类库文件了。目前小程序打包是会将工程下全部文件都打入代码包内,也就是说,这些没有被实际使用到的库文件和资源也会被打入到代码包里,从而影响到总体代码包的大小。
小程序根目录下的 sitemap.json文件用于配置小程序及其页面是否容许被微信索引,文件内容为一个 JSON 对象,若是没有 sitemap.json ,则默认为全部页面都容许被索引.
模拟 touch 事件、自定义事件触发 选取子节点 更新自定义组件数据 触发生命周期
开发者工具自带检测评分页面,能够分析页面存在的问题。
@keyframes
是检测不到的。
以及能够经过性能面板查看页面性能。
其中培训视频以上传到B站中,欢迎小伙伴们来围观评论^ ^ www.bilibili.com/video/av560…
Happy coding .. :)