目前正在写的一款小程序功能比较多(长列表、富文本、群聊、视频播放),5个tab页面再加两个swiper子页面,标题栏也是用custom自定义的。在ios上测试还可以接受,但是在安卓上性能就有点差了,测试过小米、酷派、华为、魅族这几个机型(比较卡顿,但还可以将就使用),但是在三星手机上,5个tab页全部点开就会出现黑屏闪退问题(必现),调试基本确认是内存太高导致,每次闪退内存都在450M左右。从业务代码上看,已经没有太大的优化提升空间(交互复杂的地方挺多的)。目前能想到的方案就是对已使用过的页面进行内存回收,测试过如下方式:
onShow() {
let homePageData = wx.getStorageSync('homePageData');
console.log('----onshow----', homePageData);
if (homePageData) {
for(let key in homePageData) {
this[key] = homePageData[key];
}
console.log('重新设置Data');
}
setTimeout(() => {
wx.removeStorageSync('homePageData');
}, 50)
}
onHide() {
console.log('---onhide----', this.$data);
let that = this;
wx.setStorage({
key: "homePageData",
data: that.$data,
success: () => {
for(let key in that.$data) {
that[key] = '';
that.$apply();
}
console.log('清理页面缓存');
}
})
}
对总内存的影响并不大,想请教下有没有主动销毁页面的办法?
或者有其它更好的优化办法也请告知,谢谢~~
请问楼主最后怎么解决的,三星机型上的表现目前如何,黑屏的几率?
楼主解决了吗,我的情况和你很类似,安卓手机达到500m的时候部分黑屏部分闪退
非常感谢,wx.reLaunch()应该可以,我试试
wx.reLaunch()或者wx.redirectTo可以根据适当情况使用哦
我现在的情况是第一次切换满五个tab的时候在三星手机上内存就已经超过450M了,请教下大家还有其它方案不?有没有办法我直接把page的实例置为空?
不要想着把实例怎么样,可以试着看看是什么原因导致内存占用那么大
我目前的代码总量1.4M,有几个protobuf文件需要动态获取加起来也才2M多,首屏所有的图片资源加起来(未针对性压缩)才14.5M,所有的API数据没有具体统计,但我所有的api都存storage肯定是绰绰有余(也即不超过10M),这样算起来总共也才不超过30M的内存,我自己感觉还是小程序数据控制层和视图层数据交互对内存耗用太大,三星手机太吃内存(同样的情况下,不跟ios比,跟魅族前年的一款低端机比,内存都要高出50%)。
所有的资源文件我就算再优化,不考虑代价成本(后台修改接口,UI定制图片),所能提升也是有限(三星手机tab页全开450M内存),测试过屏蔽资源前后对比。交互方面,我基本上不可能再缩减。重构一遍,所得甚少,工期也不等人。
那么,我不用原生tab,每个tab页都用单独页面来写(销毁旧有页面),不考虑用户切换tab的体验感,或许可以达到要求(就算我单个页面的内存占用高了些,但是总内存可以降下去)。
那么,再进一步,我还是想用tabBar,减少点工作量,提升点体验感,找找看有没有直接销毁实例的办法。
我也想找主动销毁页面的实例