0Pricing
Lua Academy · Урок

Измерение длительности

Измеряйте, сколько выполняется код.

«Измерение длительности» — бесплатный урок Lua Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.

Измерение времени работы кода

Иногда нужно узнать, сколько времени заняла задача: загрузка файла, выполнение цикла или создание уровня. Измерение продолжительности помогает находить медленные участки и улучшать их.

Lua предоставляет для этого два инструмента: os.time для приблизительного измерения времени и os.clock для точного.

Шаблон секундомера

Основная идея проста: зафиксируйте время перед выполнением работы, выполните работу, зафиксируйте время после неё, а затем вычтите первое значение из второго.

Разность — это прошедшая продолжительность. Этот шаблон с началом и остановкой лежит в основе любого таймера.

local start = os.time()
-- work happens here
local stop = os.time()
print("Elapsed:", stop - start)

os.time измеряет грубо

os.time считает целые секунды, поэтому не может увидеть ничего, что длится меньше секунды. Два быстрых последовательных вызова часто показывают разницу, равную нулю.

Для коротких задач нужны более точные часы — здесь и пригодится os.clock.

local a = os.time()
local b = os.time()
print(b - a)

Знакомство с os.clock

os.clock() возвращает количество секунд, но в виде десятичного числа с дробной частью. Он с высокой точностью измеряет процессорное время, использованное Вашей программой.

Поэтому он идеально подходит для измерения быстрых операций с точностью до долей секунды.

print(os.clock())

Измерение времени выполнения цикла

Поместите цикл между двумя вызовами os.clock, чтобы узнать, сколько времени заняло его выполнение. Разность — это прошедшее время в секундах.

Большие циклы выполняются дольше, поэтому это быстрый способ сравнивать разные подходы.

local t1 = os.clock()
local sum = 0
for i = 1, 1000000 do sum = sum + i end
local t2 = os.clock()
print("Took", t2 - t1, "seconds")

Форматирование результата

Длинное десятичное число трудно читать, поэтому используйте string.format, чтобы вывести аккуратное количество знаков.

Здесь %.3f выводит три цифры после точки, обеспечивая точность до миллисекунд.

local t1 = os.clock()
for i = 1, 500000 do end
local elapsed = os.clock() - t1
print(string.format("%.3f seconds", elapsed))

os.time и os.clock

Выбирайте подходящий инструмент. Используйте os.time для интервалов из реального мира, например чтобы узнать, «сколько секунд прошло с момента входа пользователя в систему».

Используйте os.clock для измерения производительности кода, поскольку он точен и отслеживает процессорное время, а не реальное время по часам.

Повторно используемая функция таймера

Можно обернуть этот шаблон в функцию. Она запускает переданную функцию, измеряет время её работы и выводит результат.

Так логика измерения времени хранится в одном месте и легко используется повторно.

local function timeIt(fn)
  local s = os.clock()
  fn()
  print(string.format("%.4f s", os.clock() - s))
end
timeIt(function() for i=1,100000 do end end)

Разница в часах

Для длительных интервалов из реального мира понятнее всего использовать os.difftime с двумя значениями os.time. Эта функция возвращает интервал в секундах.

Разделите результат на 60, чтобы получить минуты, или на 3600, чтобы получить часы и вывести интервал в удобном виде.

local started = os.time({year=2025, month=1, day=1, hour=9})
local ended = os.time({year=2025, month=1, day=1, hour=17})
local hours = os.difftime(ended, started) / 3600
print(hours, "hours")

Отображение минут и секунд

Чтобы представить продолжительность в минутах и секундах, используйте целочисленное деление и оператор остатка от деления.

// даёт целое число минут, а % — оставшиеся секунды.

local total = 145
local mins = total // 60
local secs = total % 60
print(string.format("%d:%02d", mins, secs))

Простой расчёт обратного отсчёта

Объедините эти идеи, чтобы вывести оставшееся время. Вычтите текущий момент из целевого, затем преобразуйте секунды в минуты и секунды.

Так Вы получите аккуратное отображение обратного отсчёта.

local target = os.time() + 90
local left = os.difftime(target, os.time())
print(string.format("%d:%02d left", left // 60, left % 60))

Быстрая проверка

Выберите лучший инструмент для точного измерения времени.

Повторение

Чтобы измерить продолжительность, считайте время до и после выполнения, а затем вычтите первое значение из второго. Используйте os.time для интервалов из реального мира с точностью до целых секунд, а os.clock — для точного измерения времени работы кода с дробными долями секунды.

Форматируйте результаты с помощью string.format, а необработанные секунды преобразуйте в минуты и секунды с помощью // и %. Эти инструменты позволяют измерять всё: от цикла до рабочего дня.

Часто задаваемые вопросы

Урок «Измерение длительности» бесплатный?

Да — полный текст урока «Измерение длительности» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.

Чему я научусь в уроке «Измерение длительности»?

Измеряйте, сколько выполняется код. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Lua Academy?

Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Измерение длительности»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Lua Academy?

Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. os.time и os.date
  2. Форматирование дат
  3. Арифметика времени
  4. Измерение длительности
← Назад к Lua Academy