第23/90步《前端篇》第5章 平台功能优化 第14课

简介: 今天学习第5章平台功能优化的第14课,绘制微信用户头像。

image.png

今天学习第5章平台功能优化的第14课,绘制微信用户头像。


学习目标


  • 了解小游戏的授权范围;
  • 使用 UserInfoButton 拉取用户信息;
  • 了解为什么使用全等运算符而不是等号运算符;
  • 在画布上绘制用户头像;
  • 学习使用箭头函数及判定this对象;
  • 主动销毁原生按钮;
  • 主动查询用户的授权情况;
  • 在测试中清理缓存。

主要知识点/技能点


  • 当开发者需要获取用户的私隐信息时,例如获取用户头像、昵称、地理位置、手机号、收货地址等,则必须先获得用户的授权。

  • 小游戏的授权接口 wx.authorize,可用于向用户发起授权请求,成功调用这个接口后会立刻弹窗,询问用户是否同意授权程序使用某项功能或获取某些数据;如果用户在此之前已经授权,则不会出现弹窗,而是直接返回已有的授权成果。

  • 小游戏授权主要有8类:

image.png

  • scope.userInfo 权限并不能直接通过wx.authorize接口查询,必须在用户与界面有交互行为之后才能拉取。

  • 单击UserInfoButton组件返回的对象,与以前直接调用wx.getUserInfo接口返回的对象是相同的(在小程序刚上线时wx.getUserInfo接口是充许直接调用的)。单击UserInfoButton时,我们可以将其理解为是小游戏/小程序环境帮助我们调用了wx.getUserInfo接口,然后将调用结果通过Tap事件的回调函数返回给了我们。

  • 小游戏加密信息的解密步骤:(1)开发者在后端拿到加密数据以后,如果想解密数据,需要先获得session_key;(2)取得session_key以后,先以sha1( rawData + session_key)计算出signature1,然后判断signature1是否等于微信服务器传来的signature;(3)如果signature1与signature两者相等,视为签名验证通过,然后再以名称为AES-128-CBC的解密算法,以session_key和微信服务器传来的初始向量iv为条件,将加密的encryptedData最终解密,拿到所有信息。

  • userInfo这个对象,它的类型是 UserInfo,包含这些属性:nickName用户昵称、avatarUrl用户头像图片的URL等。

  • 示例中使用wx.createUserInfoButton接口创建的UserInfoButton组件是一个文本按钮,是基于文本绘制和带圆角效果的矩形绘制实现的。

  • 为什么使用全等运算符而不是等号运算符?全等运算符会同时检查两边表达式的值与类型,只有两项都相同时才返回true,而等于运算符不要求类型相同,只要求值相同;等于运算符可能会伴随着类型的隐式转换,这可能是一个隐患。

  • 箭头函数由3部分组成:参数、箭头符号(=>)和函数体,它没有原型(prototype),没有自己的this,也没有arguments参数。


  • 箭头函数内部的 this 关键字所指向的对象是由箭头函数所在的父作用域决定的,并不是箭头函数本身,这是箭头函数除了格式简洁之外最大的用途之一。

  • 箭头函数没有自己的this,箭头函数中的this指向运行时父级作用域下的this对象。考察代码中的this具体指向哪个对象,我们要看三个问题,而这其中又涉及三条规则:

  • (1)是不是顶级函数?这要看函数是不是全局作用域下的顶级函数,如果是,this等于全局对象;
    (2)是不是箭头函数?这要看是不是箭头函数,如果是,将箭头函数看成lamda表达式,以其父函数重新作为考察对象,回到第1条规则继续;
    (3)有没有执行者?如果不是箭头函数,看被执行的函数有没有执行者,如果有,this等于执行者;如果没有执行者,this等于全局对象。

image.png

  • 箭头函数与普通函数的4个区别:

  • (1)箭头函数中没有 arguments 对象;(2)箭头函数不能用作构造器,不能使用 new 关键字实例化;(3)使用 call或 apply调用时,对 this 没有影响;(4)没有 prototype 原型。

  • 使用wx.createUserInfoButton创建的UserInfoButton对象,有一个方法 destroy,可用于销毁按钮。

实践疑难点


  • 在调用接口时注意进行结果合法性的判断。例如当使用UserInfoButton获取用户信息时,只有在接口调用成功时,才会返回UserInfo对象,因此我们在第2行将res.errMsg与"getUserInfo:ok"进行判断,如果相等,代表接口调用成功。

  • 第一次重新编译后,单击“拉取用户信息”,头像却不显示的原因是:头像在绘制过后,马上被擦除了。我们必须将图像绘制放在 render 函数内部,且每次渲染都要让其参与绘制。

  • 左挡板为什么默认没有显示?leftPanelY本应该是一个变量,代表左挡板的绘制起点Y坐标,但我们在代码中却将它声明为了一个对象,直到有鼠标移动事件后,才将它修改为了合法的值。这是由于JS的弱类型特征造成的,在开发中值得注意。

小结


在这一课中,关于this对象的判定是重点。


目录
相关文章
|
6天前
|
缓存 前端开发 JavaScript
cnblogs——从主题开发浅谈前端性能优化
cnblogs——从主题开发浅谈前端性能优化
15 0
|
2天前
|
缓存 前端开发 JavaScript
优化前端性能的十大最佳实践
在现代网页开发中,前端性能优化不仅仅是为了提升用户体验,还能显著提高网站的加载速度和响应时间。本文探讨了十大最佳实践,从优化资源加载到减少网络请求,再到提高页面渲染效率,每个实践都旨在解决常见的性能瓶颈。通过实现这些策略,开发者可以显著提升前端性能,提升用户满意度,并确保网站在各种设备上的流畅运行。
|
2天前
|
缓存 前端开发 JavaScript
深入探讨前端性能优化:从理论到实践
在现代Web开发中,前端性能优化已成为提升用户体验的关键因素。本文将探讨前端性能优化的基本理论,并结合实际案例,深入分析如何通过优化代码、资源管理和用户交互,显著提升网站和应用的响应速度。我们将介绍从理论到实践的多种方法,包括资源压缩、异步加载、缓存机制及工具的使用,帮助开发者构建更加高效和用户友好的前端应用。
|
2天前
|
缓存 编解码 前端开发
优化Web应用性能的前端技巧:从加载时间到用户体验
在现代Web开发中,提升前端性能不仅仅是为了缩短页面加载时间,更是为了提供更流畅的用户体验。本文将探讨几种有效的前端优化技术,包括懒加载、代码拆分、资源压缩以及浏览器缓存策略。通过具体实例和最佳实践,读者将能够掌握如何系统地提高Web应用的响应速度,减少资源消耗,并最终改善用户的整体体验。
|
5天前
|
缓存 前端开发 JavaScript
前端性能优化方案
【8月更文挑战第15天】前端性能优化方案
11 2
|
9天前
|
缓存 前端开发 API
优化前端性能的最佳实践
在构建高效的前端应用时,性能优化是不可忽视的关键因素。本文将探讨一些实用的前端性能优化策略,包括资源的懒加载、合理的缓存策略、代码分割以及异步数据加载等方法。通过实施这些最佳实践,可以显著提升应用的响应速度和用户体验。
|
5天前
|
前端开发 开发者
在前端开发中,webpack 作为模块打包工具,其 DefinePlugin 插件可在编译时动态定义全局变量,支持环境变量定义、配置参数动态化及条件编译等功能。
在前端开发中,webpack 作为模块打包工具,其 DefinePlugin 插件可在编译时动态定义全局变量,支持环境变量定义、配置参数动态化及条件编译等功能。本文阐述 DefinePlugin 的原理、用法及案例,包括安装配置、具体示例(如动态加载资源、配置接口地址)和注意事项,帮助开发者更好地利用此插件优化项目。
12 0
|
9天前
|
缓存 前端开发 JavaScript
优化前端性能:从渲染到加载的全方位策略
前端性能优化是提升用户体验的关键因素。本文探讨了从浏览器渲染到资源加载的各个方面,介绍了使用现代工具和技术的策略,包括减少关键渲染路径、优化资源加载和利用缓存。通过实施这些策略,可以显著提高页面响应速度,减少加载时间,提供更流畅的用户体验。
|
10天前
|
缓存 JavaScript 前端开发
前端10种火火火火的优化代码性能方法!避免代码跑起来像蜗牛!
前端10种火火火火的优化代码性能方法!避免代码跑起来像蜗牛!
|
16天前
|
缓存 前端开发 搜索推荐
前端性能优化(三)
前端性能优化(三)