Frappe Performance In-depth Review

After about 4 days or so, I have finally conclusively ascertained the performance issues noted inside of Frappe pertaining to the review. Please sit back as this is probably going to be a long read.

As to why I’m posting here instead of filing a development support ticket inside of their official Discord server, they require a verified phone number to speak and interact within the server, something of which due to privacy concerns I’m not even going to bother touching.


In April/May of this year, I applied to work at Frappe and work there. The first immediate thing I noticed while playing the game was soaring performance issues inside of the game. It was nowhere near as bad as it was now, but it was bottlenecking my framerate upwards of around 200 frames, leaving me with 50 frames or less.

From what I could tell, I never really had a problem with it back then. However, joining back about half a year later, and the performance issues are crazy now. I never get above 40fps and when I do it’s only in very certain positions and angles where all 3D instances inside of the game unload (due to not being inside of the viewport anymore). Being inside the main building itself, the framerate is otherwise unbearable. Lag spikes make the game entirely unplayable for 5+ seconds at a time, with them occurring very often as well. I then swore to figure out what the problem was as I have never seen such terrible performance inside of a Roblox game before, and I think I got my answer.


Sources

CoreScripts location (where CoreScripts/PlayerBillboards was ripped out of)

%localappdata%\Roblox\Versions\[roblox-studio-build]\ExtraContent\scripts\CoreScripts\CoreScripts

MicroProfiler dump

DELETED

CoreScripts/PlayerBillboards


First, let's start with the basics.

The Roblox CoreScripts container is a protected container of scripts that run
on boot, regardless of what game you decide to play. They are not editable in any normal circumstance, and they are entirely managed by Roblox themselves. CoreScripts are stored in the ExtraContent directory, but only found in the Roblox Studio installation directory, and not found anywhere else. Not even in the same ExtraContent directory found in the regular Roblox Player installation directory. But wait, you might ask. How can a CoreScript of Roblox be causing all of these performance issues inside of Frappe when no other game experiences it? Well, no other game experiences the same problems leading up to said performance issues. Let me explain.

The main cause for concern is the fact that Frappe is stated to have voice enabled, however upon joining I was unable to use it. This is where the microprofiler dump comes into play, because if you jump to F45, you will see the big chunk (700ms) corresponding to Script_CoreScripts/PlayerBillboards. This is a CoreScript, found inside the CoreScript container. Analyzing though the calls and indexes inside of this chunk, I was able to narrow down what function was causing the chunk to take up so much runtime. function initVoiceChat() @ line 370 is being called but voice chat is not initializing. See how it’s a main point of concern? Unfortunately, we cannot access the log variable that is found to be used inside of this CoreScript, so we can’t necessarily narrow down what’s going on, since if you recall you cannot view or edit CoreScripts that are being streamlined into the main Roblox Player, you can only modify the Roblox Studio CoreScripts. However, from what I have experienced in the past, I believe the issue inside of this case can be narrowed down to the fact that voice chat is trying to initialize per player, and I can only assume the problem here would be that the players have an improper structure or are not properly set up by Roblox at the time of execution due to a streaming delay.

There isn’t much anyone can do in this case, besides for Frappe developers to hopefully optimize the structure of the game, get rid of useless calls or excessive duplicates, to make streaming faster. In the history of Roblox I have never experienced this type of CoreScript issue with a game so badly before, so please excuse me if I am incorrect about something here.

EDIT:

It seems that joining a Spatial Voice-only server inside of Frappe clears all experienced performance issues. It could be because the spatial voice-only server hasn’t been updated since the Summer of 2022, or it could be due to the method developers are using to temporarily disable spatial voice on any given server is very poorly done or a very complicated technique, causing said performance issues.

A solution for this is for Frappe developers to either disable whatever script causing Spatial Voice to not initialize properly or for them to disable Spatial Voice entirely.


Also, something worthy of note as well. If you take a look at the microprofiler dump overall, you will see the same issue with the same CoreScript, but not as bad. Anything aside from F45 are not lagspikes. The F45 was captured by the microprofiler because I had chosen to dump 512 frames (50ish were complete frames, hence the low frame count) after experiencing such a huge lagspike. The overall tanked fps when playing this game comes from the other frames, which can be experienced while playing the game in any circumstance. I usually average 250+ fps on most games on Roblox. However, I can only manage 40+ fps on Frappe, even when using a much more powerful computer with tons more performance headroom.


Please forward this message to a Frappe developer if found, as this is a pretty alarming issue causing Frappe to become almost unplayable after around ~20 minutes of playtime with unbearable and very frequent lag spikes that last up to 5 seconds at a time.

Thank you for your time, reader.

This seems very confusing. However, does this issue happen if you’re the only player in the server? That should prove that this module is the culprit.

This doesn’t happen to me on many games, but that might be due to the fact that Spacial Voice is not enabled on some of them or others do not have streaming. Some sort of nametag replication system (that is used for streaming enabled games) might be used here.