As a developer it is currently impossible to store assets/models/objects in my game in a place where the client and server can easily access them while not incurring the memory overhead from replication. There currently does not exist a memory efficient storage service that allows the server and its clients to share non replicating copies of objects.
My game has a large amount of objects that incur hundreds of MB of memory being used for replication when none of these objects will ever need it in their “stored” state (sitting in ReplicatedStorage waiting to be used). 99% of these objects when used in game are cloned from their storage location and then placed in workspace or somewhere similar, then their state is modified to match the game state according to the server.
The image below is from an isolated test. I made a copy of my game and removing everything but the contents of ReplicatedStorage. I published the game, played it, and captured the server microprofiler stats. I then moved the contents of RS to ServerStorage and repeated the test.
In my game I keep all my firearm models in ReplicateStorage. I use RS instead of ServerStorage so I can hide the latency between pressing “Equip” and the server being able to act on that request. I’m able to copy the gun from RS the moment Equip is pressed, and then delete it once the server returns the server replicated version.
In my game I have a number of housing models that I keep in ReplicatedStorage so the client and server have access to them. The server is able to copy models from RS and place them in the workspace, and the client is able to copy the models form RS and preview to the client.
In both of these examples none of objects are being modified or “used” while in ReplicatedStorage. The only reason they are in RS is so the client and server have access to the models. The replication overhead is not put to good use since the only time these objects are interacted with is when they are being cloned to be used elsewhere.
If Roblox were to create an “UnreplicatedStorage / OnlyReplicatesOnceEverStorage” service it would allow myself and other developers a new way to manage memory usage in our games. This style of object storage is something a number of developers take advantage of and a service designed around it would benefit us all.
I think that It’s time for this feature request to be considered, given that there is first-hand proof that this would greatly benefit developers and player experience, especially on lower end devices.
While this benefit is relatively minor, it does add up; especially in the large, interactive worlds Roblox is trying to incentive developers to create.
How did you get that menu in the image? I tried looking at performance stats and microprofiler but to no avail.
Anyway, I did a guestimated check with performance stats and I saved 117MB of memory by changing all of my sounds/animations in ReplicatedStorage into StringValues and then just loading the animations/sounds when necessary.
I want to bump this thread because I still believe this is essential for lowering client memory. As what the OP said, it will be a foundation to increasing optimal performance over the whole platform
It’s been three years, and this feature continues to go unsung. As a developer, obstructing any rendering on the client’s side via imposing regulations upon replication would greatly improve the performance & accessibility of Roblox’s Server/Client replication systems.
Bump I was just researching about the safety or replicated storage. Hopefully this feature if it ever comes will make bringing my game to mobile easier.
Bump. Please roblox my game stores lots of clientsided projectiles in folders in replicatedstorage, and there’s a lot and it’s starting to get laggyyyyyyy
I do have one question tho,
WHY would the replicated storage take up
so much more memory than an unreplicated storage?
Would less memory be taken up if the ReplicatedStorage was simply Storage?
Does recieving the newly replicated data from the server really increase memory usage that much?
Doesn’t the replicated storage only replicate when something changes, or does it replicated every so often no matter if something gets updated?
(because if it only gets updated when something changes on the server, how could it clog the clients memory if all we are doing is storing models that never get deleted/moved? Nothing would need to be replicated anyway…)
If someone ever answers this, thank you in advance