Статья [DF] Оптимизация кода

  • 213
  • 16
  • 69
Пишите код правильно

table.insert и tabl[ #tabl + 1 ]​


Lua:
-- медленне
local tabl = {}

table.insert( tabl, ... )

-- чем
local tabl = {}

tabl[ #tabl + 1 ] = ...

table.HasValue и tabl[ ... ]​


Lua:
-- медленне
local tabl = { 'яблоко' }

table.HasValue( tabl, 'яблоко' )

-- чем
local tabl = { 'яблоко' }

tabl[ 'яблоко' ]

Возведение в степень​


Lua:
-- медленне
local x = 2^5

-- чем
local x = 2*2*2*2*2

Кэширование​


Всегда сохраняйте в памяти постоянно возобновляемые параметры, иначе :durka:

Пример:
Lua:
-- цвет
local color_white = Color(255,255,255)

vgui_element.Paint = function( self, w, h )
    draw.RoundedBox( 0, 0, 0, w, h, color_white )
end

-- материал
local mat_icon_accept = Material( 'icon16/accept.png' )

-- и тп
Не стоит также забывать про кэширование математических функций: math.sin, math.cos и тп.

string и table concat​


Lua:
-- медленнее
local res = ''
local intab = {}

for k = 1, 50 do
    res = res .. intab[ k ]
end

-- чем
local res = {}
local intab = {}

for k = 1, 50 do
    res[ #res + 1 ] = intab[ k ]
end

res = table.concat( res )

Distance и DistToSqr​


DistToSqr быстрее, чем Distance

Цикл таблицы​


Lua:
local tabl = { 'красный', 'синий', 'розовый', 'белый' }

-- медленнее
for k, v in pairs( tabl ) do
    ...
end

-- чем
for k = 1, #tabl do
    ...
end

Функция Paint​


При попытке создать элемент с "никаким" визуалом, не создавайте нулёвую функцию

Пример:

Lua:
-- неправильно
vgui_element.Paint = function( self, w, h )
end

-- правильно
vgui_element.Paint = nil

Кэширование вызова Convar'а​


Зачем повторно ссылаться в скрипте? Просто используй

Пример:
Lua:
-- неправильно
CreateClientConVar( 'test', 1, true )

GetConVar( 'test' ):GetBool()

-- правильно
local test = CreateClientConVar( 'test', 1, true )

test:GetBool()

Дискорд для связи: DarkFated#2147
 
Последнее редактирование:
Сверху Снизу