E D R S I H C RSS
ID
Password
Join
자기가 컨트롤할 수 있는 범위의 금전은 자기 자신에게 자유를 보장한다. -- 은하영웅전설중 얀웬리의 아버지의 말

전역변수들을 지역변수화 하기 #

지역변수들은 상당히 빠른데, 이것은 지역변수가 인덱스를 사용하여 억세스되기 때문이다. 만약 가능하다면 전역변수들을 지역변수로 만들어라. (무시무시하지않은가?) 농담이 아니라, 그것은 엄청나게 잘 동작하며, 인덱스를 사용한 억세스는 언제나 해쉬 룩업을 사용한 검색보다 더 빨라지고 있다. 만약 하나의 변수 - GameState를 말하는 것임 - 가 C로부터의 억세스를 위한 전역변수가 될 필요가 있다면, 'local GSLocal = GameState'과 같은 부가적인 변수를 만들고 모듈안에 GSLocal를 사용해라. 이 테크닉은 또한 반복적으로 호출되는 함수들을 위해 사용될 수도 있다. 예를 들면,
x = { a=1,b=2 }
function foo()
  local y=x
  print( x.a )
  print( y.b )  -- y가 지역 테이블이기 때문에 바로 이전의 print보다 더 빠르다
end


명심! 이것은 또한 전역함수들에게도 동작한다. (표준 라이브러리 함수도 포함) 예를 들면,

(Steve Dekorte) I just got around to playing with this and it works great. For example this code:

local i, v = next(t, nil)
while i do i, v = next(t, i) end


만약 next을 지역화 하면 10%정도 더 빨라진다 :

local next = next
local i, v = next(t, nil)
while i do i, v = next(t, i) end


나는 몇가지 시험을 해본 후 foreach()가 동일한 while()문보다 약 20%정도 더 빠르다는 것과 foreachi()는 도리어 약 20%정도 더 느리다는 것을 알 수 있었다.
for i, v in t do end   -- while문일때 보다 5배 빠르다


Keep in mind that what Steve is measuring in his tests is loop overhead (the loop body is empty). In reality there are some statments in the body so the overhead is not so significant. -- John Belmonte

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2010-10-28 12:42:52
Processing time 0.3544 sec