I've been using PreloadAsync() to load all of my Gui elements, since most of them are made of a lot of images, but sometimes it looks like assets still need time to load. I wrote my table like this:

local AssetTable = {
	"rbxassetid://"..-- This is the way I've been Preloading assets, using IDs instead of instances
	--+70 IDs that I won't copy
}

I saw some people saying that PreloadAsync() only works when using Instances and not IDs(?), but I've seen people using IDs and even the API Reference uses as an example strings of assets, not Instances on the game.

On my callback function I made a simple counter that helps printing how many assets where loaded and how many failed (if any):

function callback(contentId, status)
	if status == Enum.AssetFetchStatus.Success then
		LoadedAssets = LoadedAssets + 1		
	end
	if status == Enum.AssetFetchStatus.Failure then
		FailedAssets = FailedAssets + 1
		table.insert(WebPageFailedTable, WebPageFailedAssets, contentId) --Simple table I made in order for the failed assets to appear as a list when printing them in a "In Pairs" loop 
	end
end

--Later in the script

warn(tonumber(LoadedAssets).." assets were correctly loaded!")

if FailedAssets > 0 then
	warn(tonumber(FailedAssets).."  assets were unable to load!:")
	for i, Asset in pairs(FailedTable) do
		warn(tonumber(i)..": "..tostring(Asset))
	end
else
	warn("All assets were loaded successfully!")
end

Output:

72 assets were correctly loaded!

All assets were loaded successfully!

Yet I when my loading screen goes off, sometimes assets I included take time to load. Keep in mind my PC is incredibly old, but I still have doubts if PreloadAsync() works with IDs, Instances, or both. So please if someone can put my doubts to rest I would really appreciate it.