翻译排队执行

当网页中执行 translate.execute(); 时,会触发一次对当前页面的扫描并翻译。
但是为了避免有的开发者图省事以比较暴力的方式,比如弄个循环执行的定时器,每间隔1秒执行一次翻译; 又或者代码调用时有错误使用,导致非常频繁的去执行扫描及翻译的情况。
这种极其频繁的执行 translate.execute(); 会造成以下影响:

  1. 极大占用浏览器本身的计算资源,如果你页面非常大,可能会使页面出现稍微卡顿情况。
  2. 频繁调用后端的翻译接口,如果使用我们开源的翻译接口,会容易触发流控策略被拦截(我们会以为你在非法使用),禁止你使用。

上面两个中,主要是第二个,一旦触发流控,那用户使用时,访问页面,直观的感受就是,页面的文字不翻译了。为了保护我们的开源后端翻译服务接口,也为了更好的兼容你的各种花样的使用方式,所以默认内置了翻译执行的排队能力。
当你同一时间多次触发 translate.execute(); 时,第一次会立即执行扫描并翻译,第二次时会先看看上一次是否执行完毕,如果还未执行完毕,那么第二次并不会立即触发,而是进入一个队列等待阶段,包括第三次、第四次,都会进入排队阶段。 当第一次的执行完毕后,第二次的才会进行扫描并翻译,完事后,第三次、第四次 才会依次触发执行。
这样极大保护了后端翻译接口,同时也能保障你不会被翻译接口的流量控制策略命中被封禁使用,保障使用的稳定。

但是还有一种情况,你私有部署了 translate.service 并且你也设置了 访问控制策略 的并发数很大,比如 1秒 100次,完全不用考虑并发太快的情况,而且也只是你自己用,不用担心别人恶意使用,你完全可以将 translate.js 中这个排队等待的策略禁用,只要执行 translate.execute(); 就立即进行翻译,会更好的提高用户体验。

设置方式

  1. translate.waitingExecute.use = false;

默认是true, 当你设置为false时,则是禁用排队等待的能力,触发translate.execute();时会立即进行翻译。即使你同一时间连续触发了三次,也会立即执行三次。
注意,此种能力仅仅只是你私有部署,或者你朋友私有部署后给你用时,你可以禁用排队翻译的能力。不然你很容易触发别人的翻译API的访问控制规则,把你给禁止使用。

版本

仅限 v3.16 及以上版本