javascript - javascript中测试当前线程是否为主线程

标签 javascript multithreading saxon

在javascript中,如果当前线程已经是非主线程,我想执行一个操作,或者如果当前线程是主线程,则将其传递给非主线程。

为此,如何测试当前线程是主线程还是非主线程?

如果我调用 jquery 方法 $.get() OnSuccess 事件将在非主线程上运行。我只需在不执行任何操作的 URL 上调用 $.get() 即可实现假冒。

为什么我需要这样做?有一些 javascript 调用如果在主线程上调用会导致丑陋的警告。我想避免这个警告。警告是...

[Deprecation] Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience. For more help, check https://xhr.spec.whatwg.org/.

到目前为止我已经尝试过

function doOnNonMainThread( action) {
  if (thisIsANonMainThread()) {
      $.get( 'some-url', action, 'xml');
    } else {
      action();
    }
  }

更新 1

我正在调用 Saxon-JS 库(XPath 评估函数)。该库依次调用同步 XMLHttpRequest。我无法修改 XPath 库,我必须按原样使用它。我在某些地方从 Ajax 成功事件中调用 XPath。在这种情况下,我没有收到任何警告 - 到目前为止一切都很好。有些地方我不在 Ajax 响应事件中调用 XPath。在这些情况下,我会收到警告。

一些回答者建议我不要调用同步 XMLHttpRequest。这不是一个可行的解决方案,因为我不控制 Saxon-JS 库。我所能控制的只是我调用 Saxon-JS 库的上下文。

最佳答案

如果您的 XSLT 样式表(或动态计算的 XPath 表达式)调用 doc() 或 document() 等函数,Saxon-JS 将仅对 XMLHttpRequest 使用同步调用。 Saxon-JS 通过使用 ixsl:schedule-action 指令发出异步请求,提供了这些构造的替代方案。不幸的是,您没有使用触发同步请求的函数这一事实并不能阻止浏览器发出此警告。我不知道有什么方法可以防止出现警告,但您应该能够安全地忽略它。

PS:刚刚和我的同事讨论过这个问题。在某些情况下,Saxon-JS 可能仍然会同步请求其他资源,例如用于计算某些正则表达式的 Unicode 字符表。我们将进一步调查。请在 saxonica.plan.io 上提出有关 Saxon-JS 项目的问题,以便我们跟踪解决该问题。

关于javascript - javascript中测试当前线程是否为主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44792813/

相关文章:

java - Java 中的撒克逊语 : Specify SAX Parser

javascript - 增加圆圈大小取决于 SVG 中的文本

java - volatile 变量的更新值对其他线程不可见

c++ - 使这个 UDP 监听套接字成为非阻塞的,我是否有可能搬起石头砸自己的脚?

multithreading - Rust 单线程持久 TCP 服务器

xquery - 我如何编写一个 XQuery 来测试正在使用的 XQuery 版本?

java - 使用 S9API 序列化器序列化 DOM 文档的惯用方法是什么

javascript - 查找元素是否存在于整个html页面中

javascript - 如何通过在javascript中搜索多个属性值来逐个筛选?

javascript - 有没有办法覆盖输入类型数字的递增/递减处理?