1.小程序和 h5 架构上有什么不同
h5和小程序的核心都是webview
h5类似于传统web应用,先打开一个webview容器,然后正常的进行请求资源,加载数据,绘制页面等等,仍然采用单线程,所以渲染线程和js线程会互相阻塞
h5的通信流程由dom去驱动
小程序采用双线程,将渲染和逻辑分离到不同的线程中,去提高渲染的速度和效率
小程序的通信流程由事件传递给native,native传递给逻辑层,逻辑层处理完毕后返还给native,native传递给渲染层
2. prefetch与离线包
实现思路是利用H5浏览器自带的prefetch能力。通过将离线包资源聚合到单个HTML中,APP启动后使用WebView提前加载HTML,WebView会下载资源到设备中。同时可以直接复用WebView自带的离线缓存能力和差异化资源更新能力
- preload针对的资源是当前页面需要的资源,下载的优先级很高
- prefetch针对的资源是下个页面需要的资源,下载的优先级很低,有空的时候才下载
鉴权
1. session&cookie 方法
cookie保存在客户端,session保存在服务端。
账号密码登录后,服务端会生成一个sessionId返还给客户端,客户端拿到后存在cookie,后续客户端的所有请求,都会携带cookie = sessionId,服务端会校验session,成功过后返回正确数据
###2. JWT与token
账号密码登录后,服务端会生成一个加密的token令牌,客户端拿到后存在本地(如cookie),后续客户端的请求,会将token放在http的请求头header的authorization里,服务端会对token做解密和签名校验
jwt的组成: header,payload,signature
jwt的局限与解决:
xss攻击,客户端设备丢失或者私钥被破解会导致jwt被窃取的风险
应对办法: token的时效性,限制token只能在特定的ip或者设备上使用,对称加密算法下,使用强密钥对来确保 JWT token 的安全
###3. SSO(单点登录)
在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统。
###3. OAuth(第三方登录)