Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DOM与javascript是异步的?_Javascript_Html_Asynchronous - Fatal编程技术网

DOM与javascript是异步的?

DOM与javascript是异步的?,javascript,html,asynchronous,Javascript,Html,Asynchronous,在Android浏览器上运行javascript测试时,我观察到cpu上执行的指令数。 测试js代码在html中很简单。这些文件位于android本地目录中,而不是Web服务器中 在html中: <html> <head> <script type='text/javascript' src='test.js'> </head> <body> <div id='conten

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

在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)
        ...
    }
(i=0;i<1000;i++)的
{
... 
$().append(“。。。
var temp1=$(span#content2)
var temp2=$(#徽标)
var temp3=$(h3.id)
...
}
简而言之,在test.js中,使用了简单的方法,例如使用jQuery的.append()。 当我在Android浏览器上运行这个简单的测试代码时,我认为应该有一致数量的指令,但实际上,每次运行时我都有不同的指令计数。 它可能在变化中有一些模式,但似乎不清楚

我最初的猜测是,DOM中的html和javascript是“异步”的。 因此,我对html进行了如下更改:

<html> 
    <head>

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

... 
.. 

这不仅仅是因为JavaScript不能与DOM呈现同步运行,还因为HTML解析本身本身就很松散,从来没有被设计成确定性的。“足够好”是JavaScript和HTML被每个设备及其兄弟都可以使用的原因,但为此付出的代价是某种程度的不可预测性

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


(如果JIT编译器在一个足够大的测试运行中没有给出不同的结果,我会非常惊讶。除非每次都能使用完全相同的设备,否则我会根据它用来判断编译量的可用输入变量(如内存分配和CPU负载)来预期一些变化。)

实际上,我对CPU工作负载和性能感兴趣。如果HTML解析器是松散的和不确定的,正如您所提到的,我很可能在libdvm中有更大的差异。因此,这就是dalvik库(假设HTML解析器是用Java实现的)而不是libwebcore.so。让我通过实验获得更多数据,并详细查看配置文件,然后我将发布它。顺便说一句,我对html解析不太熟悉。那么,你能解释一下为什么它天生松散且不可预测吗?再次感谢!html解析松散是因为标记汤。在内存中构建DOM文档时,parser必须允许任何随机标记成为下一个读取的字节。我不确定是否会将其称为“不可预测”,但它肯定是不确定的。
$(document).ready(function() { 
   ... 
       $().append("<div id='content2'> ... </div> 
       var temp1 = $(span#content2)
       var temp2 = $(#logo) 
    ...
});