Hello.
I'm planning on writing a piece of code that will process a lot of information and I'm afraid that this will freeze the users client. How can I avoid this situation?
Let's put it in an example:
Code:
local chunkSize = 100
function getNextChunk(currentPosition)
-- return next chunk from huge table.
end
function processItem(data)
-- Data is also a big table that will require several operations
end
function doIt(currentPosition, callback)
local nextChunk = getNextChunk(currentposition)
if (not nextChunk) then
return
end
local currentIndex = -1
for id, data in pairs (nextChunk) do
currentIndex = currentIndex + 1
-- continue next chunk
if (currentIndex ~= chunkSize) then
callback(processItem(data))
else
-- process next chunk after sometime, using an async timer or OnUpdate?
-- this is the part I'm missing
return
end
end
end
Or perhaps instead of processing the table by chunks use a ticker or something like that and process 1 by 1?
Thanks!