webview是什么:APP内嵌的简易浏览器渲染载体
之前帮公司做移动端APP内嵌活动页面开发时,彻底摸清webview是什么,它是嵌套在原生手机APP内部、专门用来加载展示网页内容的核心组件,也是绝大多数APP内嵌H5页面的底层支撑。很多入行不久的开发和运营都分不清它和普通浏览器的区别,我当初就是因为认知模糊,踩了一堆没必要的适配坑。
最开始的认知,单纯以为webview就是缩小版手机浏览器。
那时候接手品牌节日营销的内嵌活动页,熬夜写完整套H5代码,在安卓、苹果手机的自带浏览器里反复测试,适配、交互、动画效果全部正常,没有任何卡顿和错乱的问题。可把页面嵌入APP打包测试后,各种问题接踵而至,图片比例完全失调,弹窗按钮点击失灵,部分机型直接出现白屏加载失败的情况。反复核对代码、调整样式参数,折腾了大半天都没找到症结,完全没意识到普通浏览器和APP内置webview的运行内核压根不一样,手机自带浏览器会持续更新内核版本,兼容最新的网页语法和特效,而很多存量APP的webview内核版本老旧,大量新式代码都无法正常解析。
折腾好久才搞明白,webview砍掉了普通浏览器所有的附加功能,没有地址栏、没有收藏功能、没有网页跳转权限,只保留了最基础的网页渲染和运行能力。它不能独立运行,必须依托原生APP的程序框架启动,这也是它和常规浏览器最本质的区别。
很多人日常用APP感知不到它的存在,其实我们刷到的APP内嵌活动页、资讯详情页、第三方服务页面,差不多九成都是通过webview渲染出来的。
之前还犯过一个特别低效的错误,开发时完全忽略webview的权限局限性,照搬外网网页的开发逻辑,在代码里加了很多弹窗跳转、自动下载的功能。结果上线之后,所有带跳转逻辑的按钮全部失效,后台收到大量用户反馈页面功能异常。后来才知道,原生开发可以直接管控webview的所有权限,能随意拦截跳转、屏蔽弹窗、限制文件下载,这些权限都是普通浏览器不具备的。
慢慢实操多了才发现,webview最大的作用就是降低APP的开发和更新成本。不用每次新增活动、更新资讯内容都打包升级APP版本,只需要更新云端的H5网页代码,通过webview加载就能完成内容迭代,这也是为什么各类APP的临时活动页面基本都用这种方式实现。
它的短板也特别明显,受制于内核和权限限制,webview的运行流畅度、交互响应速度远不如原生开发页面,复杂的动画、手势交互很容易出现卡顿掉帧,这也是核心功能页面都会用原生开发,而非webview渲染的原因。
改完最后一处机型适配的bug,提交完测试版本,窗外的天色已经彻底暗了下来。