Hi,
I wanted to show how fast my controller modules were being loaded in using os.time with Knit. So I tried to add it from knit and I don’t think it’s accurate me personally because I feel like it is too fast. Is there a better and more cleaner way to do this?

Changed Knit
function KnitClient.Start(options: KnitOptions?)
if started then
return Promise.reject("Knit already started")
end
started = true
table.freeze(controllers)
if options == nil then
selectedOptions = defaultOptions
else
assert(typeof(options) == "table", `KnitOptions should be a table or nil; got {typeof(options)}`)
selectedOptions = options
for k, v in defaultOptions do
if selectedOptions[k] == nil then
selectedOptions[k] = v
end
end
end
if type(selectedOptions.PerServiceMiddleware) ~= "table" then
selectedOptions.PerServiceMiddleware = {}
end
return Promise.new(function(resolve)
-- Init:
local promisesStartControllers = {}
for _, controller in controllers do
local t0 = os.clock()
if type(controller.KnitInit) == "function" then
table.insert(
promisesStartControllers,
Promise.new(function(r)
debug.setmemorycategory(controller.Name)
controller:KnitInit()
r()
end)
)
else -- added this
table.insert(
promisesStartControllers,
Promise.new(function(r)
debug.setmemorycategory(controller.Name)
r()
--print(`[{Round(3, os.clock() - t0)}ms] {controller.Name}`)
print(`[{os.clock() - t0}ms] {controller.Name}`)
end)
)
end
end
resolve(Promise.all(promisesStartControllers))
end):andThen(function()
-- Start:
for _, controller in controllers do
if type(controller.KnitStart) == "function" then
task.spawn(function()
debug.setmemorycategory(controller.Name)
controller:KnitStart()
end)
end
end
startedComplete = true
onStartedComplete:Fire()
task.defer(function()
onStartedComplete:Destroy()
end)
end)
end
Original Knit
function KnitClient.Start(options: KnitOptions?)
if started then
return Promise.reject("Knit already started")
end
started = true
table.freeze(controllers)
if options == nil then
selectedOptions = defaultOptions
else
assert(typeof(options) == "table", `KnitOptions should be a table or nil; got {typeof(options)}`)
selectedOptions = options
for k, v in defaultOptions do
if selectedOptions[k] == nil then
selectedOptions[k] = v
end
end
end
if type(selectedOptions.PerServiceMiddleware) ~= "table" then
selectedOptions.PerServiceMiddleware = {}
end
return Promise.new(function(resolve)
-- Init:
local promisesStartControllers = {}
for _, controller in controllers do
if type(controller.KnitInit) == "function" then
table.insert(
promisesStartControllers,
Promise.new(function(r)
debug.setmemorycategory(controller.Name)
controller:KnitInit()
r()
end)
)
end
end
resolve(Promise.all(promisesStartControllers))
end):andThen(function()
-- Start:
for _, controller in controllers do
if type(controller.KnitStart) == "function" then
task.spawn(function()
debug.setmemorycategory(controller.Name)
controller:KnitStart()
end)
end
end
startedComplete = true
onStartedComplete:Fire()
task.defer(function()
onStartedComplete:Destroy()
end)
end)
end