gpt4 book ai didi

javascript - DOM 与 javascript 是异步的吗?

转载 作者:行者123 更新时间:2023-11-28 01:54:12 26 4
gpt4 key购买 nike

我观察了在 Android 浏览器上运行 javascript 测试时在 cpu 上执行的指令计数。
测试js代码在html中很简单。这些文件在 android 本地目录中,而不是在网络服务器中。

在 HTML 中:

<html> 
<head>
<script type='text/javascript' src='test.js'>
</head>
<body>
<div id='content'> ... </div>
<span> .. </span>
<div id='logo'> ... </div>
...
</body>
</html>

在 test.js 中:

   for (i = 0; i < 1000 ; i++) {
...
$().append("<div id='content2'> ... </div>
var temp1 = $(span#content2)
var temp2 = $(#logo)
var temp3 = $(h3.id)
...
}

简而言之,在test.js中,使用了jQuery的.append()等简单方法。当我在 Android 浏览器上运行这个简单的测试代码时,我认为我应该有一致数量的指令,但实际上,我在每次运行中都有不同的指令计数。它可能在变化中有一些模式,但似乎不清楚。

我最初的猜测是在带有 javascript 的 html 中的 DOM 中的“异步”东西。所以,我像这样更改了 html:

<html> 
<head>

</head>
<body>
<div id='content'> ... </div>
<span> .. </span>
<div id=''> ... </div?
...
</body>
<script type='text/javascript' src='test.js'>
</html>

我也试过了

$(document).ready(function() { 
...
$().append("<div id='content2'> ... </div>
var temp1 = $(span#content2)
var temp2 = $(#logo)
...
});

但是,我还没有得到一致数量的指令。这是异步问题引起的?或者在 DOM 方面的 jQuery 方法在运行时有不确定的行为?或者,JS JIT 编译器在每次运行时都有非常不同的行为?谁能给我一些线索?

谢谢!

最佳答案

不仅仅是 JavaScript 不与 DOM 渲染同步运行,而且 HTML 解析本身是松散的,并且从未设计为确定性的。 “足够好”是让 JavaScript 和 HTML 达到每个设备及其同类产品都可以使用它们的原因,但为此付出的代价是某种程度的不可预测性。

一般来说,如果没有必要,不要使用 HTML 解析,特别是如果您想要一致的性能。 DOM 有一个完全可用的 createElement 方法,您可以将其发送到 jQuery 的 append 方法,这可能会让您获得更一致的结果。 (并且 insertBefore 并不是一种很难使用的方法。如果您花时间测量 CPU 周期,那么您所做的工作水平明显高于 jQuery 的目标模型。)

(如果 JIT 编译器没有在足够大的测试运行中给你不同的结果,我会感到非常惊讶。除非你每次都设法拥有完全相同的设备,否则我d 期望基于可用输入变量的一些变化,它必须使用它来判断要执行多少编译,例如内存分配和 CPU 负载。)

关于javascript - DOM 与 javascript 是异步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18008652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com