嗨,我正在开发一个我希望提高性能的应用程序。(我知道这个问题有点冗长 - 我道歉。)
我将详细解释一个仅使用qtscript / qscript(有点javascript)而不使用html的出价应用程序。
当用户点击按钮时,我想指向一个文本字段(对于普通用户来说,它可以是每秒-1或2次点击)。但是用户疯狂地点击按钮(每秒5-10次点击 - 是的,有些人点击这样),它会降低性能,例如显示的延迟时间,因为每次点击它都会指向文本字段。
我正在考虑一些解决方法,如果用户在1秒内点击超过3次,我们只在最后一次点击后调用焦点功能 - 如果你们知道更好的话,我不知道这是一个正确的解决方案请建议。另一个问题是我不能使用setInterval()和clearInterval()。
非常感谢任何帮助。
答案 0 :(得分:1)
example.xhtml - 没有框架,正文中没有脚本元素,只计算左右点击。
此外,您可以在匿名e.preventDefault();
事件功能的末尾添加onclick
。请记住,如果你试图保护内容,你最终会遇到任何聪明的人,如果它已经在他们的计算机上(内存,缓存等),他们已经拥有了它。如果您尝试保护图像,则必须使用水印。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Click Counter</title>
<script type="application/javascript">
//<![CDATA[
var click_left = 0;
var click_right = 0;
window.onclick = function(e)
{
if (e.which==1) {click_left++;}
else if (e.which==3) {click_right++;}
alert('Left clicks: '+click_left+'\n\nRight Clicks: '+click_right);
}
//]]>
</script>
</head>
<body>
<div><p>Left or right click</p></div>
</body>
</html>
答案 1 :(得分:1)
我会看一下Underscore.js的_.throttle
函数。
_.throttle = function(func, wait, options) {
var context, args, result;
var timeout = null;
var previous = 0;
options || (options = {});
var later = function() {
previous = options.leading === false ? 0 : new Date;
timeout = null;
result = func.apply(context, args);
};
return function() {
var now = new Date;
if (!previous && options.leading === false) previous = now;
var remaining = wait - (now - previous);
context = this;
args = arguments;
if (remaining <= 0) {
clearTimeout(timeout);
timeout = null;
previous = now;
result = func.apply(context, args);
} else if (!timeout && options.trailing !== false) {
timeout = setTimeout(later, remaining);
}
return result;
};
};
看起来很复杂,但一个基本的例子是:
var func = function(){alert("Only do this once every second");},
throttled = _.throttle(func, 1000);
// Call func() three times in under a second, and
// you get 3 message boxes
func(); // alerts
func(); // alerts
func(); // alerts
// Call throttled() three times in under a second, and
// you only get a message box the first time
func(); // alerts
throttled(); // does nothing
throttled(); // does nothing
// ... wait >1 second ...
func(); // alerts
throttled(); // does nothing
throttled(); // does nothing
答案 2 :(得分:1)
首先,您应该添加检查,在用户点击某个按钮已经具有焦点后,您要选择的文本编辑。这将大大减少事件队列的负载。
其次,您可以实现自己的按钮(通过子类化)并使用选项,例如,忽略在特定(小)间隔内的点击。如果用户开始非常快速地产生点击,您还可以以某种方式在按钮上“显示”它,向用户显示您的应用程序对用户输入有限制反应,在指定超时后将其关闭。