blog.Ring.idv.tw

「Number()」vs.「parseInt()」(一)-效率測試

「Number()」vs.「parseInt()」(一)-效率測試


基本上我們欲將字串轉成數值來加以處理的方式,大致上有:「Number()」、「parseInt()」和「Number Object」等方式,由於使用字串轉成數值的機會相當多,例如:從「TextField」取值來處理、利用「loadVariables()」來載入外部的資料等…,究竟那種方式是最有效率的呢?

善用「Number()」來加以轉換

我們直接寫入下列程式來加以檢測:

「Number()」:

function test()
{
	for(var j = 0 ; j < 100000; j++)
	{
		Number("10000");
	}
}
var start = getTimer();
test();
trace(getTimer()-start);

結果:(取決於電腦速度而有所不一)

202

「parseInt()」:

function test()
{
	for(var j = 0 ; j < 100000; j++)
	{
		parseInt("10000");
	}
}
var start = getTimer();
test();
trace(getTimer()-start);

結果:(取決於電腦速度而有所不一)

314

從結果中我們不難發現,「Number()」在字串轉成數值的處理速度,的確比「parseInt()」較為快速~究竟是如何造成的呢?兩者不是都為「Global Function」?我們可從bytecode來觀察一下兩者究竟是如何處理的。

為何「Number()」速度較快

我們直接寫入下述程式在Frame[1],以方便驗證:

var a_num = Number("1.5");
var b_num = parseInt("1.5");

從bytecode中可得知,「Number()」是利用ActionCode「0x4a」(ActionToNumber)來處理的,而「parseInt()」則是採用ActionCode「0x3d」(ActionCallFunction)來處理之,重點在於前者只需要一個指令(Instruction),而後者卻仍需仰賴呼叫AVM(ActionScript Virtual Machine)所內建的函數。

範例下載

本文若有任何謬誤,希望請不吝地賜教,若能指正不勝感激。

2007-07-06 18:04:15

Leave a Comment

Copyright (C) Ching-Shen Chen. All rights reserved.

::: 搜尋 :::

::: 分類 :::

::: Ads :::

::: 最新文章 :::

::: 最新回應 :::

::: 訂閱 :::

Atom feed
Atom Comment