我正在为智能无线照明系统设计基本软件。该软件是基于GUI的,我有一个滑块的亮度设置在我的GUI。照明系统有一个HTTP,因此我可以监听滑块值上的更改,并向系统发出带有RESTful值的HTTP请求。问题是,在每次改变值的情况下,提出新的HTTP请求似乎是非常幼稚的。
例如,如果用户将滑块值从70更改为20,软件将发出50个HTTP请求。
人们是如何处理这种问题的?我是否在每个请求之后等待一个定义的持续时间?什么是克服几乎100次请求的最佳做法?
发布于 2017-09-07 17:11:23
这取决于您打算如何提供反馈,以及硬件控制器的响应速度。处理这个问题的方法不止一种,解决方案的正确性实际上取决于用户的期望。事实上,潜在的解决方案并不是相互排斥的。
对于名义上的情况,对大多数用户来说,100 to感觉是即时的。然而,如果你的光控制器需要250毫秒的响应,这确实是你的限制因素。这一时间框架不算太糟糕,而且仍然让人有反应。
你所面临的问题实际上是滑块普遍存在的问题。因为它们会导致大量事件被发送,所以你的UI可能会陷入听它们的状态--特别是如果屏幕上还有其他的更新。
既然你控制着一个照明系统,我会做一些测量:
考虑到这些信息,你可以想出一个足够的计划,这样照明系统就会有响应的感觉,但是你不会用请求轰炸你的设备,因为它的响应速度超过了它的速度。
我之所以说这取决于您打算如何提供反馈,是因为不同的解决方案对您的软件的感知有一定的影响:
如果将这三个选项结合在一起,它的工作方式如下:
同样重要的是,现在要知道不同的选项会影响到您的用户以及他们期望的是什么。
发布于 2017-09-07 17:11:34
你想到的这个词是“脱欧”。也就是说,只在一个时间框架内执行一次操作,或者在某个不活动的时间之后执行一次操作,其中该操作被多次请求。
在Javascript中,在没有活动的情况下执行操作如下:
var timer = null;
var action = () =>
{
clearTimeout(timer);
timer = setTimeout(() =>
{
// Do http request with current value
}, 500);
};
action();
setTimeout(action, 300);
setTimeout(action, 600);所以你会看到一个http请求。在滑块的例子中,用户可以拖一段时间,直到暂停500 ms才能看到更新。如果您转而启动超时,如下所示:
var timer = null;
var action = () =>
{
if (timer == null)
{
timer = setTimeout(() =>
{
// Do http request with current value
timer = null;
}, 500);
}
};
action();
setTimeout(action, 300);
setTimeout(action, 600);您将看到两个http请求,因为假设用户拖了一点,超时等待500 ms才能启动http请求。
https://softwareengineering.stackexchange.com/questions/356995
复制相似问题