vscode 插件开发,做一个延迟操作。如何保证这个延迟尽可能精准? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
auh
V2EX    Visual Studio Code

vscode 插件开发,做一个延迟操作。如何保证这个延迟尽可能精准?

  •  
  •   auh 2022-01-22 20:53:41 +08:00 2844 次点击
    这是一个创建于 1438 天前的主题,其中的信息可已经有所发展或是发生改变。

    vscode 插件开发,做一个延迟操作。如何保证这个延迟尽可能精准?

    settimeout 能够延迟,但是延迟只是阈值。不是太准。

    无意间发现,在注册 vscode 命令的时候,调用了 inputbox 。整个过程莫名其妙加速了。

    貌似是其中各种调度处理机制自己调整的。

    想问下大佬,如何解决?

    9 条回复    2022-01-23 08:24:12 +08:00
    cvooc
        1
    cvooc  
       2022-01-22 21:13:24 +08:00
    任何延迟操作都不可能把时间控制的太精准吧,
    我能想到的办法也就是是 settimeout 函数调用次数加快,然后执行的时候自己在根据时间戳二次判断了
    sneezry
        2
    sneezry  
       2022-01-23 00:53:21 +08:00
    requestAnimationFrame?
    wzzzx
        3
    wzzzx  
       2022-01-23 00:59:40 +08:00
    或者你应该直接说一下你的需求?
    auh
        4
    auh  
    OP
       2022-01-23 06:03:56 +08:00
    @wzzzx 功能就是通过 vscode 快捷键触发,git 命令执行。但是要求不是立刻执行。而是等一会再执行。
    https://github1s.com/fanlushuai/vscode-note-sync/blob/HEAD/src/extension.ts#L39-L40

    https://github.com/fanlushuai/vscode-note-sync/blob/37dc236c5ab069e5c104e8bcc82b62a51c56e34f/src/extension.ts#L45

    这两条 vscode 注册命令内部执行了相同的操作。但是执行速度表现快的,调用了 inputbox 。

    发现这个现象之后,因为这种快导致了延迟更低了。所以,我想获得一个稳定的快。但是不期望调用 inputbox 。

    看看有没有什么方式,加上一些触发代码。使得其稳定存在。

    或者有其他在 vscode 中更加精准的延迟方式。
    enki0423
        5
    enki0423  
       2022-01-23 06:12:11 +08:00 via iPhone
    @auh 所以为什么你需要等一会执行?任何依赖 timer 精度的设计都不合理
    img src="https://cdn.v2ex.com/gravatar/04734ff050851ada83a5179e09503c59?s=48&d=retro" class="avatar" border="0" align="default" alt="auh" data-uid="321664" />
        6
    auh  
    OP
       2022-01-23 06:12:23 +08:00
    复现方式:修改函数,返回 true.开启状态。https://github1s.com/fanlushuai/vscode-note-sync/blob/HEAD/src/note-sync.ts#L31-L32
    f5 直接运行调试。
    在调试窗口。打开输出日志,sync-note 那个。查看输出。
    调用命令,syncQuickly 和 requireAction (呼出 inputbox 之后,可以直接回车)。查看日志输出表现。反应出来速度差异。
    auh
        7
    auh  
    OP
       2022-01-23 06:15:30 +08:00
    @enki0423 没有为什么,因为宝宝想要。一共绑定了两个命令用于外部触发。但是也有 onsave 事件触发的逻辑。
    onDidSaveTextDocument 触发,依赖于自己保存文件的操作。这个操作频率很高。想要降频。
    kkocdko
        8
    kkocdko  
       2022-01-23 07:21:52 +08:00
    一种思路:settings.json "files.autoSave": "afterDelay"
    然后就不用自己防抖 /节流了,依赖 vscode 的 delay 就行
    auh
        9
    auh  
    OP
       2022-01-23 08:24:12 +08:00
    @kkocdko 不过这样就和 autosave 绑定了。虽然想要绑定 save ,但是不期望绑定 auto 。

    基于 vscode 自动延迟保存的方式,固定了频率,但是也出现一定会触发的频率。

    想要一种既可以保持最低频率,但是不想要固定周期的效果。(因为固定周期会触发很多次 git 命令。)
    目前的逻辑设计为,通过 ctrl+s 引发保存操作,且不会因为人为的高频 ctrl+s 操作,导致后续命令高频触发。同时延迟控制,需要两种模式,一种低速模式,在日常的编写过程中,一种是快速模式,当我想要关闭编辑器的时候,以及当我想要主动快速触发,push ,联动 github 上面的 workflow 。

    目前的这个代码实现,已经满足这种逻辑。只是,在延迟上,遇到不精准的问题。能用但难受。

    无意中发现 inputbox 的调用产生了缩小延迟的效果。使得我有了点优化延迟的期待。

    目前,我的思路就是,搞清楚 inputbox 的加速核心关键。找找有没有哪些具备加速核心,并且是在后台执行的,并且没有啥影响的。方法调用存在。

    这个加速关键个人猜测就是使得 nodejs 将 io 操作甩给了线程池了。无力研究。求教一下。

    感谢老哥的思路。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3241 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 10:15 PVG 18:15 LAX 02:15 JFK 05:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86