测试当前线程是否是 javascript 中的主线程
Test if the current thread is the main thread in javascript
在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 库的上下文。
To this end, how can I test if the current thread is the main thread or a non-main thread?
除非您明确使用网络工作者,否则您可以(并且应该)假设您的代码始终 运行 在主线程中。
不要使用同步 XMLHttpRequest
s。
如果您的 XSLT 样式表(或动态计算的 XPath 表达式)调用 doc() 或 document() 等函数,Saxon-JS 将仅对 XMLHttpRequest 使用同步调用。 Saxon-JS 通过使用 ixsl:schedule-action 指令发出异步请求,为这些构造提供了替代方案。不幸的是,您没有使用触发同步请求的功能这一事实并不能阻止浏览器发出此警告。我不知道有什么方法可以防止警告,但你应该能够安全地忽略它。
PS:刚刚和我的同事们讨论过这个问题。在某些情况下,Saxon-JS 可能还会对其他资源进行同步请求,例如用于评估某些正则表达式的 Unicode 字符表。我们将进一步调查。请在 saxonica.plan.io 提出有关 Saxon-JS 项目的问题,以便我们跟踪解决方案。
在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 库的上下文。
To this end, how can I test if the current thread is the main thread or a non-main thread?
除非您明确使用网络工作者,否则您可以(并且应该)假设您的代码始终 运行 在主线程中。
不要使用同步 XMLHttpRequest
s。
如果您的 XSLT 样式表(或动态计算的 XPath 表达式)调用 doc() 或 document() 等函数,Saxon-JS 将仅对 XMLHttpRequest 使用同步调用。 Saxon-JS 通过使用 ixsl:schedule-action 指令发出异步请求,为这些构造提供了替代方案。不幸的是,您没有使用触发同步请求的功能这一事实并不能阻止浏览器发出此警告。我不知道有什么方法可以防止警告,但你应该能够安全地忽略它。
PS:刚刚和我的同事们讨论过这个问题。在某些情况下,Saxon-JS 可能还会对其他资源进行同步请求,例如用于评估某些正则表达式的 Unicode 字符表。我们将进一步调查。请在 saxonica.plan.io 提出有关 Saxon-JS 项目的问题,以便我们跟踪解决方案。