- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
简单的问题。
DOM 有什么特别之处,以至于在 DOM 操作调用之后调用的长时间运行的 javascript 函数会阻止对 DOM 的操作?这是一个例子:
function notify(msg) {
var div = document.createElement("div");
div.textContent = msg;
document.body.appendChild(div);
}
// long-running func
function block() {
var iter = 3e8;
while (iter--)
Math.sqrt(iter);
notify("block() done!");
}
document.body.onclick = function(){
notify("click event!");
block();
};
click 事件! 和 block() did! 在长时间运行的函数退出后同时出现,而不是 click 事件! 触发立即并 block() 完成! 稍后出现。
这是一个演示:http://jsfiddle.net/bxuNb/1/
如果notify("click event!");替换为alert("click event!");,那么它会立即响应。这是怎么回事?
谢谢!
最佳答案
What's so special about the DOM that manipulating it is blocked by javascript functions
已优化。每次与 DOM 交互后,您的屏幕都不会重新绘制。
…invoked after the DOM manipulation calls
我们无法知道执行过程中没有进一步的 DOM 操作 - 因此它不会立即更新您的屏幕。即使通过静态代码分析可以实现这一点,但您的示例中还有另一种 DOM 操作。解释器只是不知道中间的几行代码将花费那么长时间来执行。
如果您想让屏幕在其间更新,请在第一次输出后启动长时间运行的 block 并设置超时:
document.body.onclick = function(){
notify("click event!");
setTimeout(block, 0);
};
关于javascript - DOM manip 被*之后*调用的长时间运行的函数阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17730360/
我在尝试安装 Date::Manip 时不断收到错误消息模块。任何 Perl 专家都知道我可以尝试什么? 我正在尝试的命令是 perl -MCPAN -e "install Date::Manip"
我有这个子Formatting Date::Manip's Delta to days在我使用答案中的帮助后效果很好。今天我再次运行我的代码,我得到 Can't call method "value"
标题几乎描述了我想要的: 代替: filter(mtcars, cyl == 8) 我想使用: var % do(filter(., .[[var]] == 8)) 关于r - dplyr::mani
我不是 JS 专家,所以我有点在黑暗中跌跌撞撞。基本上,我想要一些东西,可以在特定用户的页面上添加指向 Twitter 搜索 @replies 的链接。 我想弄清楚的两件事: 如何从页面中提取用户名以
简单的问题。 DOM 有什么特别之处,以至于在 DOM 操作调用之后调用的长时间运行的 javascript 函数会阻止对 DOM 的操作?这是一个例子: function notify(msg) {
IE9(标准模式)根本不允许您在 DOM 中操作 iframe。如果您使用 jQueryUI 对话框或 jQuery 的 .wrap() 函数来包装恰好包含 iframe 的内容,IE9 将会崩溃。事
这让我很困惑。此代码在另一台服务器上工作,但在 Perl v5.8.8 上失败,Date::Manip今天从 CPAN 加载。 Warning: Use of uninitialized value
我是一名优秀的程序员,十分优秀!