CPU昂贵的JavaScript

时间:2010-12-26 15:52:44

标签: javascript cpu

我计划从BBC News复制统计信息javascript,但我对该脚本的CPU使用情况感兴趣(按下“开始”按钮后)。可以添加脚本这么贵吗?

你能告诉我为什么那个脚本太昂贵了吗?我是javascript的新手,但我认为简单的算术运算会占用过多的客户端CPU。那可以吗?

1 个答案:

答案 0 :(得分:6)

增加的大量数字是高CPU使用率的来源。在我的AMD Phenom II X2上,它运行时在Firefox上运行大约19%的CPU。该页面的来源实际上是http://www.realtimestatistics.org/,如果您查看javascript,它会被混淆,但我怀疑有些setTimeout()/ setInterval函数会在每个时间段增加一个数量。按照目前的速度,我怀疑它可能会在一秒内耗尽所有1000个插槽,或至少一百个,看看数字是多么平滑。然后它必须更新您的页面,可能使用document.getElementById()函数,并且数字甚至被格式化,并且是一个可爱的蓝色,这增加了更多的负载。

简单的算法确实消耗CPU,但像我的3.4 gHz双核这样的现代处理器可以立即通过它们,你甚至看不到任务管理器中的CPU使用率高峰。但是,BBC新闻中该脚本的CPU使用率几乎是一个恒定的流,当您检查任务管理器时,它会显示出来。算术在客户端上没有问题,只要执行时间不长,不冻结/挂起页面,或者不再发生。

编辑:经过一些反编译和一些呃,从旧的逆向工程日开始,这里是在该页面上运行的脚本文件的来源: http://news.bbc.co.uk/nol/shared/spl/hi/sci_nat/10/the_internet/counters/js/internet_ticker.js

如果你看一下,这就是更新的行:

var currentValue = Math.floor(details.base + details.rate/1000 * differenceInMS(details.start, new Date()));
        glow.dom.get(details.div).html("<strong>"+commaFormatted(currentValue)+"</strong>");

它正在添加,然后划分和铺设地板,所有这些都非常耗费人力,甚至还必须创建一个新的Date()变量。跟踪differenceInMS()功能,您会发现您获得了更多的地板和时间功能。如果我这样做,我会用算术做一个简单的setTimeout(),并且可能需要更少的劳动密集来继续查找当前的日期和时间。哦,你有glow.dom.get()必须搜索并找到页面的那一部分,然后在更新之前将数字转换为逗号形式。整个脚本非常渴望处理能力。

获得的经验教训: 无论是劳动密集型还是短期,或简单而漫长。不要试图做他们正在做的事情,处理器密集和短时间间隔重复。这会迅速拖累你的CPU。如果我的双重固化3.4 gHz AMD Phenom的平均燃烧率为19%,那么想象它就像一台旧笔记本电脑那样运行。这可能很容易地最大化处理器并导致页面挂起和冻结。哦,作为补充说明,在x64版本的Firefox上运行会降低x64处理器的CPU使用率。我多年来乞求Adobe和Firefox去x64的另一个原因。手指越过Firefox 4.0。