High Loading Times?

In my game, I find that some players (especially on mobile devices, but not limited to them) have high load times


Players will float in the air for between 5 seconds to even 2 minutes sometimes. I presume they are still loading. Is there anything I can do to lower load times?

One of the main things to note is my game is very union heavy. I have the level of detail set to auto for all of them (but I presume this only helps with frame-rate not loading times).

Are there any other settings or changes I could make to help loading times, or is this type of thing normal in a lot of games? Not everyone loads slow by the way, but a very noticeable amount of people do.

Also, given this is a minigames place, I should mention all maps not currently in use are stored in ServerStorage.

The union might be one of the issues, I wouldn’t call it the MAIN issue tho. High union counts can lower the performance of your game, especially when they’re swimming in detail. I would recommend switching to meshes because it’s more easy and efficient to control the poly count and its detail.

Possible Solutions


  1. Unions/MeshParts

  2. Over 65,000 parts loaded at once

  3. Effects (e.x.: blood, gore, particles)

If there is an abnormally extended loading time on mobile, Roblox will usually give a device-compatibility warning for mobile users.

Extra Notes:
The lobby (when no minigame is loaded) has 2,000 unions
The memory usage is around 380-430MB on the non-Windows store version of Roblox.
StreamingEnabled is disabled.

Also my bad, they reply was unintentional, I meant to reply to my own post

1 Like

Analysis


Did you enable StreamingEnabled? This allows games to cut down loading times and better for low-end hardwares… but the caveats are that you have to use Instance:WaitForChild() in local scripts(or client-sided scripts).

Read about StreamingEnabled:

Disclaimer: Did not read the post above while writing.

2 Likes

Thanks, I’ll try this out. Most of my LocalScripts do non game-breaking things that are wrapped with pcalls anyway.

1 Like

I think I found one of the main culprits
tree
Each tree in my game is 78 UnionOperations.
I should probably make new trees.

Just a follow-up question, would enabling StreamingEnabled mean that if a map is moved from ServerStorage to Workspace, a player might be teleported there (through a server script) but then fall through the floor assuming it has not loaded yet?

Edit: I’ll freeze the HumanoidRootPart immediately after teleporting for a few seconds. I have a loading screen.

Assume that you loaded the map in, temporarily freeze the player mid-air when there are no grounds to stand on below, using raycasts. Make sure to blind the player with a small loading screen between teleports.

Perhaps there are many workarounds, who knows?

Maybe someone else has a better method? I don’t really have a direct clue about it. Try loading the map from ReplicatedStorage instead if all else fails. ReplicatedStorage if the objects should be manipulated by both client and server, nothing wrong with ServerStorage I assume.

2 Likes

Can confirm freezing the player works. I don’t think there are any other workarounds.

1 Like

Ok, I tested in a server full of 10 people. My only concern is some say they are getting the occasional frame-rate dip that never used to happen, is there any possibility StreamingEnabled is the cause of this?

It’s possibly due to a script.

  • Does the frame-rate dip occur synchronously at specific or random time? – a server script is behind it.
  • Does the frame-rate dip occur asynchronously at a specific time? – somewhere in the local scripts.
  • Does the frame-rate dip occur asynchronously at a random time? – possibly anything inconsistent in the client.

From my personal experience, often when a lot of players are jumping or moving around.

Checks


  • Make sure you don’t have any unnecessary loops – these bad guys can lower your frame rate.
  • Is player movement associated with any script checks?

There is a while true do server script with a simple wait() in it that invokes the client each time to check their walkspeed, humanoid state, among other things. A simple anti-exploit script to catch simple exploits.

Perhaps using Humanoid.Changed will reduce the rate of firing those checks every 0.03 seconds by indefinite?

I have a feeling like your code is posing the problem, not the build. Also, StreamingEnabled sucks.

Try looking at your MicroProfiler, Developer Console or any of the Shift + FunctionKey debug windows and see if there’s any poor performance-looking stats.

1 Like

I felt my network delay felt high, and I got occasional frame rate issues with it on. Especially but not limited to when physics were used. Looking at this post, it seems like in the 10-14 player server I was using, it is not viable:

How would I be able to tell what the issue is using these? The micro-profiler seems to be fine. Client-memory seems to be fair compared to some front page games I tested.

Also here is the Microprofiler:

Scene (Blue): 5.367 ms
Prepare: 0.961 ms
Worker:: runjob : 1.430 ms (Render section) + 0.727 ms (Physics) + 0.231 ms (Heartbeat)

Performance Stats:

Shift F1:
F1

Client Memory:

Server Memory:

Game Link: Domino Minigames - Roblox