小程序开发策略:用户信息流程获取授权、渲染性能优化
用户信息流程获取授权
- session_key 有有效期,有效期不通知开发者。他们所知道的是,用户使用该小部件的次数越多,session_key 的有效时间就越长。
- 调用wx.login时,会直接更新session_key,导致旧的session_key失效。
- 小程序中,首先调用wx.checkSession检查登录状态,确保过期的session_key不会被更新,然后调用wx.login检索。代码。用户然后授权小程序获取用户信息。小程序检索加密的用户数据并将加密的数据和代码传递给后端服务。后端通过代码获取session_key,解密数据,并将解密后的用户信息返回给小程序
面试题:如果先对用户信息进行授权,然后再登录,会发生什么情况?
- 当用户授权时,开放平台使用旧的session_key来加密用户的信息。再次调用wx.login登录会刷新session_key。目前后端服务从开放平台获取新的session_key,但无法解密旧session_key加密的数据。获取用户数据失败
- 授权用户数据前调用wx。 .checkSession 怎么样? wx.checkSession 检查登录状态,并确保wx.login 不会刷新session_key,以便后端服务能够正确解密数据。但问题就在这里。如果小程序长时间没有导致session_key过期,wx.login肯定会重新生成session_key,这样又会无法解密用户信息。
性能优化
我们知道view部分是在webview中实现的,所以前端box中的大部分优化方法都适用。
我们知道view部分是在webview中实现的,所以前端box中的大部分优化方法都适用。
我们知道view部分是在webview中实现的,所以前端box中的大部分优化方法都适用。
加载优化
代码包的大小是最直接影响小程序加载和运行速度的因素。代码包越大,不仅下载速度会变长,而且插入业务代码的时间也会变长。所以最好的优化方法就是减小代码包的大小。
呈现三个级别的小程序加载。
优化模式
- 代码压缩。
- 及时清理无用的代码和资源文件。
- 减少代码包中图片等资源文件的大小和数量。
- 加载分包。
优化首屏加载体验的建议
- 预请求:异步数据请求不需要等待页面渲染完成。
- 使用缓存:使用存储API缓存异步请求数据。在第二次运行期间,缓存的数据首先用于渲染页面,然后在后台更新。
- 避免白屏:首先显示骨架页面和基本内容。
- 及时反馈:对需要用户等待的交互操作提供即时反馈,防止用户认为小组件无响应。
使用子包加载优化
构建小程序分包商项目时,build会产生一个或多个功能子包。每个分包的小程序都必须包含一个主包,这个主包。这意味着所有子包都安装了默认的主页/标签页,并且需要一些公共JS资源/脚本,并且子包根据开发人员配置进行拆分。
小程序运行时,默认下载主包并启动主包中的页面。如果用户需要打开子包中的页面,客户端会下载相应的子包,下载完成后显示。
优点:
- 对于开发者来说,可以让小程序拥有更大的代码量,承载更多的功能和服务
- 对于用户来说,可以更快的打开小程序,同时使用更多的功能,而无需影响启动速度
限制:
- 整个程序所有子包大小不超过8M
- 单个子包/主包大小不得超过2M
原生加载配置分包?对于打包,子包配置路径之外的目录将被打包到应用程序(主包)中。
参考原理
- packageA 无法请求包 B 的 JS 文件,但可以请求其包中的应用程序和 JS 文件
- packageA 无法导入 packageB 的模板,但可以请求其包中的应用程序和模板自己的包
- packageA不能使用packageB的资源,但可以使用应用程序和自己的包的资源
即将正式上线正在加载
外包给独立承包商
渲染性能优化
- 每次调用setData都是一个进程间通信过程,通信成本与setData中的数据量正相关,
- setData会导致页面与视图层的内容被更新,这个耗时的操作会在一段时间内阻塞用户交互。
- setData 最常用于小程序开发,也最容易造成性能问题。
避免setData使用不当
- 在方法之间使用数据共享数据,可以增加setData传递的数据量。 。数据应该只包含与页面渲染相关的数据。
- 使用setData传输大量数据, ** 通信时间与数据、页面更新正相关。延迟可能会导致页面更新成本增加。**仅传递页面上已更改的数据,并使用特殊的 setData 键来执行本地更新。
- 频繁调用setData会导致短时间内操作延迟、交互延迟、通信阻塞、页面渲染延迟。 **避免不必要的 setData 并组合连续的 setData 调用。
- 在后台页面实现setData,接管前台页面的渲染资源。 **页面进入后台后调用 setData 将被延迟,直到页面重新显示。
避免误用onPageScroll
- 仅在必要时监听pageScroll事件。如果不受控制,则不会发货。
- 避免在onPageScroll中执行复杂的逻辑
- 避免在onPageScroll中频繁调用setData
- 避免在滚动判断是否显示时频繁查询节点信息(SelectQuery)。部分场景建议使用橡胶节点布局状态控制(inersectionObserver) )替换
使用自定义组件
在需要频繁更新的场景中,自定义组件更新仅在组件内部完成,不受内容复杂度影响在页面的其他部分。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。