在面板使用过程中,用户在 App 上产生交互操作,比如点击开关按钮时,会发送请求到云端,再由云端下发到智能设备上,智能设备执行指令后,再将执行结果同步回云端,最后才响应到用户App上的设备面板上。
这样一个来回需要时间,那如果时间过长,就会造成卡顿的错觉,比如用户点击了开关,等1s后,开关组件的状态才发生变化,造成体验下降。
当然,我们可以通过添加 loading态来缓解,但是由于设备面板的特殊场景,几乎所有的交互都是需要和设备交互的,那满屏的菊花也是不太好看的 。
什么是乐观更新?
乐观更新也叫积极响应UI(Optimistic UI),是一种前端界面快速响应用户交互的概念。
简单来说,就是不等到服务器返回结果,我们直接更新界面状态。
这样做的好处就显而易见了:对用户操作来说,界面操作更加快捷,更加流畅。
用乐观更新提升控制体验
使用 dp-kit
dp-kit 是智能设备模型(SDM)的一个功能。在面板小程序中,SDM作为一个react 的工具库,对设备的状态控制,命令下发以及结果监听做了统一的封装,能更加快捷的进行设备控制。比如:
Code: Select all
import React from 'react';
import { Button, View } from '@ray-js/ray';
import { useActions, useProps } from '@ray-js/panel-sdk';
export default function () {
const power = useProps(props => props.power);
const actions = useActions();
return (
<Button
onClick={() => {
actions.power.toggle()
}}
>
{`开关状态${power}`}
</Button>
);
}
该代码的作用是点击按钮下发指令,然后等待结果返回后在更新状态 power
如果想要立即更新UI可以添加 immediate, 当执行后,我们的 power 将会立即更新。
Code: Select all
actions.power.toggle({ immediate: true });
更多具体用法参考:
https://developer.tuya.com/cn/miniapp/d ... tors/dpkit
为什么设备面板适合乐观更新呢?
1. 大量的设备控制交互
设备面板的主要功能就是控制设备,所以合理的使用乐观更新,能大大提升体验。2. 成功率高
设备控制指令的下发虽然数据类型不同,但是链路是相对可控的,再加上作为涂鸦云的核心链路,在成功率上可以得到保障。3. 细粒度控制
交互的数据就是 DP (涂鸦定义的设备状态数据格式),我们统一通过 action
来下发数据,可以通过 immediate
来细粒度的控制每次操作是否启用乐观更新。也可以全局启用。
什么场景下建议使用乐观更新呢?
1.低功耗设备控制:
对于低功耗设备,设备的操作通常会先暂存于云端,然后在设备上线之后主动拉取并更新本地状态。对于这种设备,我们在改变设备状态的界面操作时,可以采用乐观更新先预测更新会成功,直接在 UI 上显示预期的状态。这样可以提升用户体验2. 实时控制功能:
以控制照明设备为例,这类设备通常具备实时控制功能,例如手势滑动调节灯光明暗。在这种操作中,我们需要在毫秒级的时间内快速反馈用户操作结果,乐观更新在这里就显得尤为合适。通过乐观更新,我们可以立刻在 UI 上显示预期的设备状态,尤其是在控制频率极快的情况下,这样的实时反馈能极大地提升用户体验。
其他体验优化
https://developer.tuya.com/cn/miniapp/d ... e/optimize
面板小程序创新大赛
现在,涂鸦举办的面板小程序创新大赛正在进行中,欢迎参与