- 7
- 1
- Версия MoonLoader
- .026-beta
Я абсолютный, прям полный ноль (реально) в кодинге, только начинаю вкатываться, нейронкой попросил сделать дебаг отправку запрос на api дабы спарсить (извините если что то не так, я реально тупой, не подкован тут увы) инфорацию и посмотреть задержку, проверил вот этим:
Во время отравки /testbig, как только нажал на Enter сразу игра зависал на секунды 2 и выдала вот это:
И хотелось бы понять, как избавится от зависания на 2 секунды и что лучше всего использовать?
deb:
-- test_bigdata_debug.lua
-- Скрипт для замера времени загрузки и парсинга большого JSON
local requests = require("requests")
local cjson = require("cjson")
local encoding = require("encoding")
encoding.default = "CP1251"
local u8 = encoding.UTF8
function main()
while not isSampLoaded() or not isSampAvailable() do
wait(0)
end
sampRegisterChatCommand("testbig", function()
sampAddChatMessage("[DEBUG] Запуск теста с большими данными...", -1)
lua_thread.create(function()
local total_start = os.clock()
local step_time
-- Шаг 1: начало запроса
step_time = os.clock()
print("[DEBUG][" .. string.format("%.3f", step_time - total_start) .. "] Начало запроса")
sampAddChatMessage("[DEBUG] Отправляю запрос к API", -1)
local url = "YOUR_API_URL_HERE" -- замените на реальный URL
local ok, resp = pcall(requests.get, url, { timeout = 30 })
-- Шаг 2: ответ получен
step_time = os.clock()
print("[DEBUG][" .. string.format("%.3f", step_time - total_start) .. "] Ответ получен")
sampAddChatMessage("[DEBUG] Ответ получен", -1)
if not ok or resp.status_code ~= 200 then
sampAddChatMessage("[DEBUG] Ошибка загрузки: " .. tostring(ok and resp.status_code or "таймаут"), -1)
return
end
local data_len = #resp.text
print("[DEBUG] Длина данных: " .. tostring(data_len) .. " байт")
sampAddChatMessage("[DEBUG] Длина данных: " .. tostring(data_len) .. " байт", -1)
-- Шаг 3: начало парсинга JSON
step_time = os.clock()
print("[DEBUG][" .. string.format("%.3f", step_time - total_start) .. "] Начало парсинга JSON")
sampAddChatMessage("[DEBUG] Начинаю парсинг JSON...", -1)
local parse_start = os.clock()
local ok, data = pcall(cjson.decode, resp.text)
-- Шаг 4: парсинг завершён
step_time = os.clock()
local parse_time = step_time - parse_start
print("[DEBUG][" .. string.format("%.3f", step_time - total_start) .. "] Парсинг завершён за " .. string.format("%.3f", parse_time) .. " сек")
sampAddChatMessage("[DEBUG] Парсинг завершён за " .. string.format("%.3f", parse_time) .. " сек", -1)
if not ok then
sampAddChatMessage("[DEBUG] Ошибка парсинга JSON", -1)
return
end
if type(data) ~= "table" then
sampAddChatMessage("[DEBUG] Получен не табличный тип: " .. type(data), -1)
return
end
print("[DEBUG] Количество записей: " .. tostring(#data))
sampAddChatMessage("[DEBUG] Количество записей: " .. tostring(#data), -1)
local total_time = os.clock() - total_start
print("[DEBUG] Общее время: " .. string.format("%.3f", total_time) .. " сек")
sampAddChatMessage("[DEBUG] Общее время: " .. string.format("%.3f", total_time) .. " сек", -1)
if #data > 0 then
local first = data[1]
local msg = string.format("Пример: UID=%s, владелец=%s", tostring(first.LavkaUid), tostring(first.username))
sampAddChatMessage("[DEBUG] " .. msg, -1)
end
end)
sampAddChatMessage("[DEBUG] Поток запущен, ожидайте...", -1)
end)
print("[DEBUG] Скрипт загружен. Введите /testbig в игре.")
while true do wait(0) end
end
Во время отравки /testbig, как только нажал на Enter сразу игра зависал на секунды 2 и выдала вот это:
deb:
[03:02:01.482905] (script) test_https.lua: [DEBUG] Скрипт загружен. Введите /testbig в игре.
[03:02:09.967663] (script) test_https.lua: [DEBUG][0.000] Начало запроса
[03:02:11.437218] (script) test_https.lua: [DEBUG][1.470] Ответ получен
[03:02:11.438220] (script) test_https.lua: [DEBUG] Длина данных: 2207454 байт
[03:02:11.438220] (script) test_https.lua: [DEBUG][1.471] Начало парсинга JSON
[03:02:11.511463] (script) test_https.lua: [DEBUG][1.545] Парсинг завершён за 0.074 сек
[03:02:11.512467] (script) test_https.lua: [DEBUG] Количество записей: 3382
[03:02:11.512467] (script) test_https.lua: [DEBUG] Общее время: 1.545 сек
И хотелось бы понять, как избавится от зависания на 2 секунды и что лучше всего использовать?