首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >setTimeout on KeyDown会影响性能吗?

setTimeout on KeyDown会影响性能吗?
EN

Stack Overflow用户
提问于 2021-09-09 04:06:51
回答 1查看 159关注 0票数 1

在同事Stack溢出成员的帮助下,我得到了使用Keydown的快捷方式的代码。

How to Check if jQuery .keydown() has any other keys pressed or not?

对于每个按键事件,代码都使用setTimeout函数。我在一个页面上使用它,用户通常输入超过1000个单词。(我想是4K-5k字符)

这意味着按键将在所有5k键上运行,新的超时将多次启动。

代码语言:javascript
运行
复制
    var NewKeys = {};
    var NewTimeout;
    jQuery(document).keydown(function (e) {
        if (NewTimeout) {
            clearTimeout(NewTimeout);
        }
        NewKeys[e.which] = true;
        NewTimeout  = setTimeout(function () {
            if (typeof NewKeys[17] !== "undefined"  && typeof NewKeys[83] !== "undefined"  && Object.keys(NewKeys).length === 2) { 
                e.preventDefault();
                if(!jQuery('.SearchCreations').hasClass('Show')){
                    e.preventDefault();
                    jQuery('.SaveCreation').click();
                }
            }
            if (typeof NewKeys[27] !== "undefined" && Object.keys(NewKeys).length === 1) { 
                jQuery('.Thumbnail.Close').click();
                jQuery('.Action').removeClass('Collapse');
            }
            if (typeof NewKeys[16] !== "undefined" && typeof NewKeys[17] !== "undefined"  && typeof NewKeys[83] !== "undefined"  && Object.keys(NewKeys).length === 3) {
                e.preventDefault();
                if(jQuery('.CreationEditor').hasClass('Autosaving')){
                    jQuery('.StopSave').click();
                }
                else{
                    jQuery('.AutoSave').click();
                }
            }
          }, 200);
    });

这会影响最终用户的性能/可靠性吗?

您最不想做的事情是创建一个资源密集型的网页,使用户的设备停止正常工作。

我在6-7岁的笔记本电脑(i5,4GB内存,Windows 10)上尝试了这段代码.我注意到,如果我继续使用这个页面,它就能正常工作。但是,如果我使用Alt + Tab将窗口切换到其他应用程序,然后在5-7秒内返回到浏览器,那么快捷键就会停止工作。

可以确认此行为是一致的,并且到目前为止,它可以在多台Windows 10机器上进行复制。

EN

回答 1

Stack Overflow用户

发布于 2021-09-09 06:11:36

这在很大程度上取决于超时值和输入的速度。例如,超时为3,第二次键入5个字母。然后,您将得到15个同时运行的函数。

这很好,但是当您使用更长的超时时间(比如10s,速度为10个字母/秒)时,您将有100个函数同时运行,这是不合适的。

特别是,如果您试图完成比更改类和一些DOM操作更重的任务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69112118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档