最后
除了简历做到位,面试题也必不可少,整理了些题目,前面有117道汇总的面试到的题目,后面包括了HTML、CSS、JS、ES6、vue、微信小程序、项目类问题、笔试编程类题等专题。
+ [四、拓展阅读](#_246)
一、前言
应用uni-app
框架开发好APP上架使用过程中,发现应用经过长时间由后台切换至前台时,通过webview
方式嵌套的H5页面发生白屏现象。
二、问题分析
任何手机设备上,当手机内存不足时,os都会回收资源。一般是先回收后台打开的资源。如果当前应用占用的资源过高,当前应用也有可能崩溃。尤其是在调用摄像头点击拍照时,手机内存占用会达到一个峰值,此时较容易出问题。
有关内存管理,详参博文《安全生产:内存溢出和内存泄漏》。
在iOS上,当内存不足时,根据uiwebview
和wkwebview
的不同,它自身有不同的回收策略。
如果是uiwebview
的app(常见于5+app),内存不足时整个app会崩溃,即闪退。
如果是wkwebview
的app(uni-app和wap2app在iOS上默认就是wkwebview
),内存不足时,单个wkwebview
会崩溃。也就是所谓的应用还在,而页面白屏。
这个问题在所有使用wkwebview
的应用都会出现,比如微信的公众号网页里也存在。在微信小程序里,它做了一个自动恢复手段,可以让jscore
存储数据状态,崩溃的wkwebview
自动恢复。所以在遇到问题时,会白一下然后恢复渲染。
三、解决方案
uni-app
因为引入了独立的jscore
处理数据状态,jscore
不会崩溃,所以官方采用了和微信小程序一致的策略,补充自动的白屏恢复能力。亲测使用HBuilder 3.6.4.20220922
并无白屏自动恢复功能,怀疑是HBuilder版本问题!uni-app
中也可以使用nvue
来避免这个问题,nvue
页面不会出现内存不足引发的白屏崩溃。
3.1 nvue 页面替代 vue 页面
nvue
文件webview
使用方式如下:
//nvue 中的webview需要自行设置宽高否则无法展示<template>
<view>
<web-view ref="webview" src="/hybrid/html/local.html" style="width: 500px;height: 600px;" @onPostMessage="getMessage"></web-view>
</view>
</template>
<script>
export default {
data(){
return {
}
},
onLoad() {
setTimeout(()=>{
this.handlePostMessage('测试传参')
},200)
},
methods: {
handlePostMessage(res) {
this.$refs.webview.evalJs(`handleMessage()`);
},
getMessage(e) {
uni.showModal({
content: JSON.stringify(e.detail),
showCancel: false
})
}
}
}
</script>
h5页面内容如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>本地网页</title>
<style type="text/css">
.btn {
display: block;
margin: 20px auto;
padding: 5px;
background-color: #007aff;
border: 0;
color: #ffffff;
height: 40px;
width: 200px;
}
.btn-red {
background-color: #dd524d;
}
.btn-yellow {
background-color: #f0ad4e;
}
.desc {
padding: 10px;
color: #999999;
}
</style>
</head>
<body>
<p class="desc">web-view 组件加载本地 html 示例,仅在 App 环境下生效。点击下列按钮,跳转至其它页面。</p>
<div class="btn-list">
<button class="btn" type="button" data-action="navigateTo">navigateTo</button>
<button class="btn" type="button" data-action="redirectTo">redirectTo</button>
<button class="btn" type="button" data-action="navigateBack">navigateBack</button>
<button class="btn" type="button" data-action="reLaunch">reLaunch</button>
<button class="btn" type="button" data-action="switchTab">switchTab</button>
</div>
<p class="desc" id="lizhao">网页向应用发送消息。注意:小程序端应用会在此页面后退时接收到消息。</p>
<div class="btn-list">
<button class="btn btn-red" type="button" id="postMessage">postMessage</button>
</div>
<!-- uni 的 SDK -->
<script type="text/javascript" src="https://unpkg.com/@dcloudio/uni-webview-js@0.0.1/index.js"></script>
<script type="text/javascript">
window.handleMessage=function(data){
alert('传来的参数'+data)
}
document.addEventListener('UniAppJSBridgeReady', function() {
document.querySelector('.btn-list').addEventListener('click', function(evt) {
var target = evt.target;
if (target.tagName === 'BUTTON') {
var action = target.getAttribute('data-action');
switch (action) {
case 'switchTab':
uni.switchTab({
url: '/pages/tabBar/API/API'
});
break;
case 'reLaunch':
uni.reLaunch({
url: '/pages/tabBar/API/API'
});
break;
case 'navigateBack':
uni.navigateBack({
delta: 1
});
break;
default:
uni[action]({
url: '/pages/component/button/button'
});
break;
}
}
});
document.querySelector("#postMessage").addEventListener('click', function() {
uni.postMessage({
data: {
action: 'message888888'
}
});
})
});
</script>
</body>
</html>
注意⚠️:uni-app
中的 nvue
页面问题
nvue
页面不使用 webview
渲染,但其中的web-view
组件说明如下:
nvue
的weex 组件模式
:weex
模式下的web-view
组件是weex
自己实现的,它目前仍然使用UIWebview
。官方会追踪weex
的升级。nvue
的uni-app组件模式
:web-view
组件使用WKWebview
,不可修改为uiWebview
。
3.2 白屏检测刷新
3.2.1 自动刷新
- 需要一个全局挂载的工具类,
Vue.prototype.$utils = utils
- 在需要使用的页面(一般为tab页)最外层需要设置为同一个class名称;
最后:
总结来说,面试成功=基础知识+项目经验+表达技巧+运气。我们无法控制运气,但是我们可以在别的地方花更多时间,每个环节都提前做好准备。
面试一方面是为了找到工作,升职加薪,另一方面也是对于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
于自我能力的考察。能够面试成功不仅仅是来自面试前的临时抱佛脚,更重要的是在平时学习和工作中不断积累和坚持,把每个知识点、每一次项目开发、每次遇到的难点知识,做好积累,实践和总结。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
[外链图片转存中…(img-ttm1UHQp-1715276400914)]