Thread Tools Display Modes
07-07-19, 01:13 AM   #1
Lybrial
A Flamescale Wyrmkin
AddOn Compiler - Click to view compilations
Join Date: Jan 2010
Posts: 120
General question about performance

Hi!

In many AddOns I see people doing stuff like that:

Lua Code:
  1. local _G = _G;
  2. local wipe = table.wipe;
  3. local remove = table.remove;
  4. ....

Whats the big advantage of that? Is it affecting the performance? The memory usage?
Is it for better readability? Just generally: Whats the reason for that?

This would all just create references, right?
  Reply With Quote
07-07-19, 02:23 AM   #2
SDPhantom
A Pyroguard Emberseer
 
SDPhantom's Avatar
AddOn Author - Click to view addons
Join Date: Jul 2006
Posts: 2,313
The global environment is basically stored in a big table. Every time you want to read from this table you perform a table indexing operation, which takes a small amount of time. However, if code is run very often (think combat log events or every frame render), you may want to shave off as much time as possible. Local variables are stored as Lua registers, which are much quicker to access than the global environment.

Note: table.wipe and others like this cause more than one indexing operation as denoted by the dot. The first is retrieving table from the global environment and the second is to index wipe from table. Creating a local reference of this saves 2 indexing operations as a result.
__________________
WoWInterface AddOns
"All I want is a pretty girl, a decent meal, and the right to shoot lightning at fools."
-Anders (Dragon Age: Origins - Awakening)

Last edited by SDPhantom : 07-07-19 at 02:27 AM.
  Reply With Quote
07-07-19, 02:40 AM   #3
Lybrial
A Flamescale Wyrmkin
AddOn Compiler - Click to view compilations
Join Date: Jan 2010
Posts: 120
Originally Posted by SDPhantom View Post
The global environment is basically stored in a big table. Every time you want to read from this table you perform a table indexing operation, which takes a small amount of time. However, if code is run very often (think combat log events or every frame render), you may want to shave off as much time as possible. Local variables are stored as Lua registers, which are much quicker to access than the global environment.

Note: table.wipe and others like this cause more than one indexing operation as denoted by the dot. The first is retrieving table from the global environment and the second is to index wipe from table. Creating a local reference of this saves 2 indexing operations as a result.
Thx for that explanation!
  Reply With Quote

WoWInterface » Developer Discussions » Lua/XML Help » General question about performance

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off