David.Zhong 发表于 2022-11-4 14:17:00

干货必读提升性能:十一、流程缓慢可能的罪魁祸首——服务端命令

本帖最后由 David.Zhong 于 2022-11-4 14:17 编辑

各位看官老爷万福金安~


今天给大家单独再说一说服务端命令对流程性能的影响。

咱们先来做一个测试哈,假设我们有一个请假的流程,当我们提交请假的时候,可能会有一系列的业务逻辑需要执行,比如说发送邮件等哈,再假设这些业务逻辑需要执行较长的时间,比如说10秒,我写了一个服务端命令来模拟一下~

我们需要在提交请假的时候去执行这部分业务逻辑,在提交节点任务完成时去调用一下这个服务端命令,

可以看到设置服务端命令时有一个异步发送请求的选项,默认是关闭的哈~

我们运行起来看下效果:


可以看到我们在提交了请假单之后,等了有足足的十秒。
原因呢也很简单,活字格默认的逻辑是同步的,意思就是一个萝卜一个坑,我们会在执行完上一步所有的操作之后才会去执行下一个操作。
当我们的流程事件调用了服务端命令的时候,触发这个事件的时候就会去调用服务端命令,等服务端命令执行完之后,才会把结果通知到页面上,执行下一步操作。
当我们服务端命令需要执行需要的时间比较长的时候,页面上就会有类似于卡顿的现象。

那么如果避免这个现象呢?
也很简单,既然是因为我们要等上一个操作执行完,才会执行下一个操作导致的类似于卡顿的现象,并且,如果上一个操作的结果对下一个操作完全不会产生影响或者下一个操作不依赖上一个操作的结果,那么我们不等就是了呗~



实现的方法也很简单,在流程事件中调用服务端命令的时候,把异步发送请求勾选上就搞定啦~

此时,我们再来看一下运行的效果:

可以看到我们只用了0.1秒就搞定了之前需要10秒+才能完成的流程~
有demo有真相。


怎么样,此时,你的是不是内心受到了巨大的震撼呢?

既然异步请求效果这么显著,那么我们是不是可以无脑把所有调用服务端命令的地方都修改为异步请求呢?
当然不是啦,只有当调用的服务端命令或者说业务逻辑满足一定的条件才行,那就是需要执行的逻辑不会影响接下来的流程或者接下来的流程不需要依赖其执行后的结果,那么就可以设置为异步请求了。
比如说请假流程,我提交请假单之后,只需要给领导发一封邮件,至于发送是否发送给领导这个结果,我并不关心,那么此时可以设置为异步;
又比如说一个生产的流程,下一个流程会依赖上一个流程的处理结果,那么我在执行相应流程的时候,一定是需要等上一步流程完全处理介绍的,此时万万不可设置为异步。

PS:在页面上调用服务端命令的时候,也是可以设置异步的,如果有满足异步请求的场景,也是可以考虑设置为异步发送请求哟~


更多的关于同步异步的概念,大佬们可以百度了解一下~
同步和异步的区别 - 知乎 (zhihu.com)

页: [1]
查看完整版本: 干货必读提升性能:十一、流程缓慢可能的罪魁祸首——服务端命令