2010-12-26 8 views
2

BBC Newsから統計情報のJavaScriptを複製する予定ですが、(スタートボタンを押した後の)そのスクリプトのCPU使用量には興味があります。高価なスクリプトを追加することはできますか?CPU高価なjavascript

なぜこのスクリプトはCPUの高価なのか教えていただけますか?私はjavascriptには新しかったが、私は単純な算術演算があまりにも多くのクライアントCPUを消費していると思う。それは大丈夫ですか?

+1

これは非常に高価な算術演算であることは間違いありません。通常は複雑なDOM演算とCSS演算がコストがかかります。あなたは問題のスクリプトを測定し、高いCPU使用率を見たことがありますか? –

+0

間隔関数に10msのデルタがあり、内部に多くの計算を入れたら、JavaScriptがCPUに高価になる可能性があります。 –

+0

Chrome(8点)8%、IE(9点):14-18%、Firefox 3.6点):ページが文字化けし、開始ボタンが見つかりません。教育上の推測(私の経験)は、スクリーンリライト/再描画がCPU時間の大部分を占めているということです。算術演算ではありません。 – KooiInc

答えて

6

数値が増えているため、CPU使用率が高くなります。私のAMD Phenom II X2では、実行時にFirefox上で約19%のCPUを消費します。そのページのソースは実際にはhttp://www.realtimestatistics.org/であり、javascriptを見ると難読化されていますが、一定時間ごとに数値を増やすsetTimeout()/ setInterval関数があると思われます。速度が上がると、おそらく1秒間に1000個のスロットをすべて使い切ってしまったり、少なくとも100個のスロットが使用されていて、数字がどれほど滑らかであるかがわかります。次に、おそらくdocument.getElementById()関数を使用してページを更新する必要があります。数値もフォーマットされていて、素敵な青色で、負荷をさらに増やします。

単純な算術演算はCPUを消費しますが、my 3.4 gHzデュアルコアのような最新のプロセッサーはすぐにCPUを消費することができず、タスクマネージャーでCPU使用率が急上昇することはありません。しかし、BBC NewsのそのスクリプトのCPU使用率はほぼ一定の流れであり、これはタスクマネージャをチェックすると表示されます。算術演算は、実行に時間がかからず、ページをフリーズ/ハングしたり、繰り返したりしない限り、クライアント上では問題ありません。

EDIT:あなたがそれを見れば 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%の平均を燃やしているなら、古いラップトップのようなもので動いていると想像してください。これにより、プロセッサを最大限に使いこなすことができ、ページがハングアップしてフリーズする可能性があります。 Firefoxのx64版では、x64プロセッサのCPU使用率が低下しています。私の長年のAdobeとFirefoxのx64への懇願のもう一つの理由。 Firefox 4.0のために指を渡した。

+0

あなたの貴重で精巧な答えに感謝します。簡単な方法(arithmethicsとsetTimeout)に進むと、jQueryフレームワークの使用には意味があると思いますか? – dole

+0

@doleの場合、jQueryはプログラミング時に多くの時間を節約し、さらに簡単にしますが、算術演算とsetTimeoutには影響しません。これは、トラバース、AJAX、イベントハンドリング、アニメーションに合わせて作られています。私はあなたが基本に精通していない限り、あなたがそれを使い始めないよう助言します。 jQueryを簡潔で便利なフレームワークと考えると、実行する前に歩くことを学ぶ必要があります。 – LostInTheCode

+0

ty LostInTheCode。私はこの質問についてあなたの意見を聞きたいと思います:http://stackoverflow.com/questions/4578185/server-side-of-adsense – dole