table {
width: 100%;
border-collapse: collapse;
margin-bottom: 20px;
}
table, th, td {
border: 1px solid #ddd;
}
th, td {
padding: 8px;
text-align: left;
}
th {
background-color: #f4f4f4;
}
Hello everyone,
We've recently shared some exciting news in our Discord community, and now we’d like to provide more details and ensure it aligns with our forum announcements. Let's dive in!
RAGE Multiplayer 1.2 Early Tease
GTA5.mp4
Earlier this week, we teased the upcoming RAGE Multiplayer 1.2 update in our Discord community. This very early sneak peek featured a short clip highlighting the new GTA Experience Mode, which introduces synchronized city pedestrians, car traffic, and other dynamic features of the live GTA V world that you’ve previously missed.
But that's just the beginning. The update also brings object synchronization, including parachutes, scripted objects, and more. We’ve also enhanced the base player, vehicle and pedestrian synchronization. And yes, even more features are on the way! The update is still under active development, so expect more teasers as we continue the polishing. No expected release date is currently available.
Retrospective: Performance Update Insights
This summer, we rolled out a major performance update, following a public test involving up to 20% of our player base, who voluntarily opted in. We’re continually optimizing performance across all fronts—whether it's client-side, server-side, or even the base game itself. One area of focus has been the performance of the game's scripting commands (commonly referred to as "natives") API, a crucial foundation for client-side API functionality.
We’ve reworked the JS-to-Native integration and applied various optimizations to V8, the JavaScript engine, ensuring the smoothest possible performance with minimal overhead. As a result of these improvements, we’ve observed up to a 2x performance boost in our benchmarks compared to our previous implementation.
Micro-Benchmark Results
Benchmark Notes:
RAGE Multiplayer API uses vanilla script commands in these tests. Hand-optimized APIs (e.g., player.handle for PLAYER_PED_ID, player.vehicle for GET_VEHICLE_PED_IS_IN, or batch HUD/control management APIs) are not used.
Only deterministic natives were included (e.g., excluding raycast natives which depend on several variables like location or loaded map parts).
Other JS implementations, not listed in the results but tested by community members, generally perform similarly to the R* Creator Services Platform, likely due to their codebase similarities.
Script Command APIs not listed in the results follow the same implementation pattern and must provide generally the same results.
These micro-benchmarks only involve game's script commands APIs. These micro-benchmarks are no way meant to represent broader performance, especially in the case of ScriptHookV comparison. Script command performance might vary depending on its return value and arguments types and it's actual game's implementation under the hood.
Results are provided in milliseconds: lower is better.
R* Creator Services Platform (JS/Lua)
System: Ryzen 7 3800X
Benchmark
Lua Performance (ms)
JS Performance (ms)
RAGE Multiplayer JS Performance (ms)
Relative Performance (Lua/JS (JS/JS))
IS_PED_SHOOTING: 10.000.000 Calls
3155
7202
250
12.6x (28.8x) faster
GET_ENTITY_COORDS: 10.000.000 Calls
6686
18145
1172
5.7x (15.4x) faster
IS_ENTITY_ATTACHED: 10.000.000 Calls
N/A
8467
252
N/A (33.6x) faster
GET_ENTITY_HEALTH: 10.000.000 Calls
2954
7866
237
12.5x (33.1x) faster
Mixed: 1.000.000 Calls:
IS_PED_SHOOTING, IS_PED_AIMING_FROM_COVER, IS_PED_RELOADING, SET_PED_ARMOUR, GET_PED_ARMOUR
3349
5429
126
26.5x (43.1x) faster
System: Ryzen 7 7700X
Benchmark
Lua Performance (ms)
JS Performance (ms)
RAGE Multiplayer JS Performance (ms)
Relative Performance (Lua/JS (JS/JS))
IS_PED_SHOOTING: 10.000.000 Calls
1441
3577
168
8.5x (21.2x) faster
GET_ENTITY_COORDS: 10.000.000 Calls
3486
9287
617
5.6x (15.0x) faster
IS_ENTITY_ATTACHED: 10.000.000 Calls
1928
4273
163
11.8x (26.2x) faster
GET_ENTITY_HEALTH: 10.000.000 Calls
1477
3915
146
10.1x (26.8x) faster
Mixed: 1.000.000 Calls:
IS_PED_SHOOTING, IS_PED_AIMING_FROM_COVER, IS_PED_RELOADING, SET_PED_ARMOUR, GET_PED_ARMOUR
1553
2535
90
17.2x (28.1x) faster
ScriptHookV – C++
System: Ryzen 7 7700X
While comparing a C++ (low-level language) API with JavaScript (a higher-level scripting language) isn’t ideal due to their differing natures, we believe sharing these micro-benchmark results will still be of interest to many in our community, especially those curious about performance optimization and the technical intricacies behind game scripting. Despite the inherent differences in how these languages manage memory, execution, and performance, the comparison provides valuable insights into how our scripting JS integration holds up against native C++ implementations.
Benchmark
C++ Performance (ms)
RAGE Multiplayer JS Performance (ms)
Relative Performance (C++/JS)
Mixed: 1.000.000 Calls:
PLAYER_PED_ID, GET_VEHICLE_PED_IS_IN, GET_ENTITY_COORDS
233
101
2.3x faster
Micro-benchmarks source code is available here. Micro-benchmarks results were taken 15 Sep 2024 by our community members using the latest available public builds. We welcome you re-execute these benchmarks and share your results in our Discord.
As always, thank you for your active support and feedback. We can't wait to share more announcements regarding the next major update with you later - stay tuned!