与SwingUtilities.invokeLater()等价的JavaScript
Javascript中是否有Java的invokeLater SwingUtilities方法的等价物 更新1 那么,具有零延迟的setTimeout是否与invokeLater完全相同 如果您想稍后异步运行某些东西,请尝试 JavaScript是单线程的。如果您想在事件处理程序之外运行一些耗时的CPU密集型任务,您可以使用上面的技术来完成,但是它仍然会消耗事件处理线程,从而导致UI冻结 在浏览器中运行CPU密集型任务通常不是一个好主意,这可能会改变这一点,因为它们与事件处理程序共享同一线程,使它们等待 另见 如果您想稍后异步运行某些东西,请尝试 JavaScript是单线程的。如果您想在事件处理程序之外运行一些耗时的CPU密集型任务,您可以使用上面的技术来完成,但是它仍然会消耗事件处理线程,从而导致UI冻结 在浏览器中运行CPU密集型任务通常不是一个好主意,这可能会改变这一点,因为它们与事件处理程序共享同一线程,使它们等待 另见 尝试设置超时时,它会让UI给人一种工作正常的印象,但不知何故它花费了很长时间。大概是这样的:与SwingUtilities.invokeLater()等价的JavaScript,java,javascript,equivalent,invokelater,Java,Javascript,Equivalent,Invokelater,Javascript中是否有Java的invokeLater SwingUtilities方法的等价物 更新1 那么,具有零延迟的setTimeout是否与invokeLater完全相同 如果您想稍后异步运行某些东西,请尝试 JavaScript是单线程的。如果您想在事件处理程序之外运行一些耗时的CPU密集型任务,您可以使用上面的技术来完成,但是它仍然会消耗事件处理线程,从而导致UI冻结 在浏览器中运行CPU密集型任务通常不是一个好主意,这可能会改变这一点,因为它们与事件处理程序共享同一线程,使
for (...) {
setTimeout(function() {
// show a loading icon
// AJAX call
// heavy DOM manipulation
});
}
for (...) {
var promise = new Promise(function() {
// show a loading icon
// AJAX call
// heavy DOM manipulation
});
}
我试着答应。结果只是更好更快。现在代码是这样的:
for (...) {
setTimeout(function() {
// show a loading icon
// AJAX call
// heavy DOM manipulation
});
}
for (...) {
var promise = new Promise(function() {
// show a loading icon
// AJAX call
// heavy DOM manipulation
});
}
尝试设置超时时,它会让UI给人一种工作正常的印象,但不知何故它花费了很长时间。大概是这样的:
for (...) {
setTimeout(function() {
// show a loading icon
// AJAX call
// heavy DOM manipulation
});
}
for (...) {
var promise = new Promise(function() {
// show a loading icon
// AJAX call
// heavy DOM manipulation
});
}
我试着答应。结果只是更好更快。现在代码是这样的:
for (...) {
setTimeout(function() {
// show a loading icon
// AJAX call
// heavy DOM manipulation
});
}
for (...) {
var promise = new Promise(function() {
// show a loading icon
// AJAX call
// heavy DOM manipulation
});
}
具有零延迟的setTimeout是否与invokeLater完全相同?@Dims,是的,它应该是我答案的一部分。具有零延迟的setTimeout是否与invokeLater完全相同?@Dims,是的,这应该是我答案的一部分。我认为你没有领会@Tomasz回答的要点:setTimeout永远不会像invokeLater那样做,因为它会在调用延迟函数时阻塞你的UI线程。我认为问题是它是否总是立即返回并直接从UI循环执行其函数参数,即使参数为零,有时也会立即执行该函数。@FrédéricHamidi Swing的调用程序也是如此。这也总是在UI线程上运行它的参数,但它保证总是立即返回并直接从事件循环执行。我认为您没有领会@Tomasz回答的要点:setTimeout永远不会像invokeLater那样做,因为它会在调用延迟函数时阻塞UI线程。我认为问题是它是否总是立即返回并直接从UI循环执行其函数参数,即使参数为零,或者有时会立即执行该函数。@FrédéricHamidi Swing的invokelator也是如此。它也总是在UI线程上运行它的参数,但它保证总是立即返回并直接从事件循环执行。