1. 页面跳转的几种常用方式:
1.1 uni.navigateTo(OBJECT)
https://uniapp.dcloud.io/api/router.html#navigateto
会保留页面栈,能通过调用navigateBack返回。但是有页面栈溢出的问题,不能当作通用跳转方法。
1.2 uni.redirectTo(OBJECT)
https://uniapp.dcloud.io/api/router.html#redirectto
不会保留页面栈,不能返回上一页,返回默认page.json第一个页面。
1.3 uni.reLaunch(OBJECT)
https://uniapp.dcloud.io/api/router.html#relaunch
销毁页面栈并跳转到指定页面。通常用于退出登录返回首页。
1.4 uni.switchTab(OBJECT)
https://uniapp.dcloud.io/api/router.html#switchtab
切换选项卡用。
1.5 uni.navigateBack(OBJECT)
https://uniapp.dcloud.io/api/router.html#navigateback
配合navigateTo,返回页面使用,能有效避免页面栈溢出。可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层。
2 排查思路
1.根据具体业务场景,逻辑上控制页面跳转和返回,防止页面栈溢出。通过getCurrentPages()判断页面栈有多高;查看webview对象多少,来判断当前跳转方式是否合适。
2.排查代码逻辑,是否有长时间后台请求不返回的问题,可以在uni.request添加timeout来规避这种情况。
3.排查内存溢出,是否有创建定时器(setInterval),但是没清空的情况(clearInterval)。
4.uniapp本身问题,因为其跨平台性需要js调用native,性能肯定会有所损失,如果无法接受还是使用原生语言开发。
5.删除缓存时,如果是清空数据需要使用uni.clearStorageSync