That :Once is interesting. You can use that for day/night cycle when the first player enters on a new server so that everyone is sync'd or perhaps when there's a timer on how long a server has been online.
Great tutorial! One thing to keep in mind is that roblox automatically cleans up memory from variables that are no longer in use, so you don't have to manually do variable = nil (although this will free up the memory faster than roblox's automatic garbage collection afaik). As for the last part of the video, roblox now automatically destroys players and characters (previously an option called PlayerCharacterDestroyBehavior).
I totally agree. I think this is definitely a thing they should fix as it may cause a decent amount of lag/delay on low-end or also called potato devices. I am a scripter myself and I totally agree with you.
you don't need to manually destroy the players or characters, afaik that issue only happened with characters and it has since been fixed. just manage your event connections and avoid globals, lua is a high level interpreted language anyways so it's always going to have some performance issues or lack of fine control of memory
yeah it sometimes stresses me because ik when those three loading points finished there'll be a code. And then it distracts me from what I wanted to code
@NurJoel Go to FILE > Studio Settings > Script Editor then find the Code Assist topic then disable auto-trigger Code Assist (self-explanatory) Now you can still trigger it using Alt + \ or Option + \
just use maid, trove or janitor and you are good, disconnecting stuff is time consuming those modules do that for you, never heard of destroying the character on leave, but that's just a visual thing, their character will stay there for 2-3 seconds but the character will be removed anyways
I think people confuse removing the character in studio within the client window Because studio is both the server and the client, some issues can occur that might not occur on a live game.
far too much unnecessary bloat from some of those modules you are recommending when you could really just make a table containing all things that are planned to be cleaned up and iterate through them later on
roblox doesnt always crash when using more than 7gb of ram, hell parkour reborn when v1.3 released managed to use 12gb on my system before i had to force close it so my pc wouldnt crash
It will make a pretty big difference. If it's a small game and these connections are constantly being made and not created then the memory usage will keep piling up
Great video! I'm relatively new to scripting, though I've been on the platform for the better part of 13 years, and optimization in my opinion is heavily neglected (judging by the lack of tutorials or videos that speak about it). This was quite informative, keep it up.
Thanks man this was helpful but one thing I'm still confused about is why do we have to run destroy on player and character when playerremoving or characterremoving events run? Do they not just destroy on their own and in that case all connections tied to them also get cleaned up?
Hello, why did you say at 3:53 that nil takes more memory than 0? I think your statement is false because nil is just nothingness while 0 is something. But if what you said is true then please clarify.
@@stewiepfing539 Ok, "local test" eats up memory but "local test = nil" does not, is that right? Also at 8:16 you mentioned that Roblox among others recommends deleting the players character, but Roblox already does this? When a player leaves a game, it gets destroyed automatically, right?
If you want to accomplish something like that in Roblox (of all things), you might as well make your own physics system. At the moment, Im creating a physics system for grenades since using remote events + applying velocity on server will make the process slow. And I aint using FastCast!
@@halohasawaken6793 have fun with getting that to perform at least somewhat fast. Native codegen will not work for that I believe so uhh yeah I think you should think of using another game engine
this is a stupid question you can async before destroying the player, and I believe players are destroyed on leaving. the player:Destroy() there is redundant and pointless.
No they dont, in Lua, numbers are typically stored as double-precision floating-point numbers, which means they take more memory (8 bytes / 64 bits) than just nothing
@@stewiepfing539 how about pointing out whats wrong with what i said? you can look at the source code yourself look it up. Nil and number are the same size. Variables for tables and strings are the same size too (the variable stores a pointer to the content inside internally)
they dont need to, lua has a garbage collector, it just doesnt clean up some connections depending on scope and where theyre referenced. luas a scripting language precisely because you dont have to worry about memory management. imagine trying to use lua to configure a program and have to worry about memory allocation. also not sure what zig has to do with this
Optimize the amount of memory your using!!
That :Once is interesting. You can use that for day/night cycle when the first player enters on a new server so that everyone is sync'd or perhaps when there's a timer on how long a server has been online.
Wrong your
@@1Tebyou’re* wrong
@@workindadyou can use modulus operator with a shared timestamp value
@@workindad I was really surprised when I saw :Once() existed. Usually I just use connect and then disconnect it when I'm done. this is so useful
Great tutorial! One thing to keep in mind is that roblox automatically cleans up memory from variables that are no longer in use, so you don't have to manually do variable = nil (although this will free up the memory faster than roblox's automatic garbage collection afaik). As for the last part of the video, roblox now automatically destroys players and characters (previously an option called PlayerCharacterDestroyBehavior).
most of the roblox scripting content creators don't teach about optimization and more unknown functions / features, Keep up the great work!
"if you really don't know about programming, become a programming youtuber"
Meanwhile me with hundreds of poorly optimized loops constantly running at the same time: hm I wonder why my game’s so laggy
I totally agree. I think this is definitely a thing they should fix as it may cause a decent amount of lag/delay on low-end or also called potato devices. I am a scripter myself and I totally agree with you.
Disagree
@@ExplyDev Why?
you don't need to manually destroy the players or characters, afaik that issue only happened with characters and it has since been fixed. just manage your event connections and avoid globals, lua is a high level interpreted language anyways so it's always going to have some performance issues or lack of fine control of memory
dusty trip is an example, it fr crashed my roblox when i wanted to go in a round💀 (sometimes)
As a expl. script dev, doing these will strongly optimise it. Most scripts are laggy and unoptimised, funny
Great example of a memory leak is parkour reborn
Title: what roblox doesn't tell you
in video: roblox also says that clearing up tables when they are no longer needed is another way of optimizing
Yeah roblox doesn’t tell you about memory optimization but they still have documentation 🤡
@@stewiepfing539 could you make a video explaining all tabs in developer console: memory, network, etc.
3:00 the assistant is so annoying when trying to code 😂
fr. you can get rid of it though
yeah it sometimes stresses me because ik when those three loading points finished there'll be a code. And then it distracts me from what I wanted to code
Yeah, I know what I wanna write it just starts going
*. . .*
@@jujhar. Isn't there a way you ca turn it off?
@NurJoel Go to FILE > Studio Settings > Script Editor then find the Code Assist topic then disable auto-trigger Code Assist (self-explanatory) Now you can still trigger it using Alt + \ or Option + \
ty, optimisation needs to be focused on by more people
just use maid, trove or janitor and you are good, disconnecting stuff is time consuming those modules do that for you, never heard of destroying the character on leave, but that's just a visual thing, their character will stay there for 2-3 seconds but the character will be removed anyways
I think people confuse removing the character in studio within the client window
Because studio is both the server and the client, some issues can occur that might not occur on a live game.
far too much unnecessary bloat from some of those modules you are recommending when you could really just make a table containing all things that are planned to be cleaned up and iterate through them later on
@@zenstarz2406 or make a module script, call it Globals or smth and cram all your utility functions and constants inside it.
nice, you should make a video about luau compiling and how roblox optimizes your script on compile time
Kash 🤑🤑🤑
Actually very useful, thanks!
Bro I was like I will learn scripting I alreaddy saw some vedios but now I'm scary I mean my dream is to make games now I cant
and I dont have money
Ofc roblox's max amount of memory is "6.9" GB
Thats still alot considering theres ALOT of games on roblox, no?
@@frbestguy I mean the funi number
This was really helpful, Thanks!
roblox doesnt always crash when using more than 7gb of ram, hell parkour reborn when v1.3 released managed to use 12gb on my system before i had to force close it so my pc wouldnt crash
Didn't know about this. I just started making my own game. Thanks for the tut.
It's pretty useful to know this, although for small games it won't make a huge difference, but for big projects it sure will.
It will make a pretty big difference. If it's a small game and these connections are constantly being made and not created then the memory usage will keep piling up
Bro save my life with :Once and other tech just thanks bro 🙂👌
I love running thousands of unnecessary loops at once 😊😊😊
Great video! I'm relatively new to scripting, though I've been on the platform for the better part of 13 years, and optimization in my opinion is heavily neglected (judging by the lack of tutorials or videos that speak about it). This was quite informative, keep it up.
how and when did you learn how to script
Thanks man this was helpful but one thing I'm still confused about is why do we have to run destroy on player and character when playerremoving or characterremoving events run? Do they not just destroy on their own and in that case all connections tied to them also get cleaned up?
destroying players and characters upon their removal is weird. aren't they automatically destroyed when removed?
Sometimes if values still exist and are somehow tied to the player, it will remove them
Nope, the motor6d instances are just deleted.
Hello, why did you say at 3:53 that nil takes more memory than 0? I think your statement is false because nil is just nothingness while 0 is something. But if what you said is true then please clarify.
Could you put the docs in the description or in a pinned comment? I'd like to read it through
OHH no! my pressuse octet lost by setting a variable to nil
Awesome !
me when memory leak 🧨💥
how to reactivate a connection after disconnecting
just define it again like anything else. “Disconnecting” basically just makes it nil
Roblox limit of 6.9
Nice
Nice tutorial! Do you have a Discord server? If not, can I create one for you?
we are really getting in times of C where programmers need to carefuly manipulate memory?
Always been a thing
4:30i thought you said setting it to nil uses up some memory, but you just set it back to nil here, is there a difference?
I meant to say when the variable is equal to nothing eats up memory like: local variable. Sorry I messed up the way I should of done it
@@stewiepfing539 Ok, "local test" eats up memory but "local test = nil" does not, is that right?
Also at 8:16 you mentioned that Roblox among others recommends deleting the players character, but Roblox already does this? When a player leaves a game, it gets destroyed automatically, right?
@@stewiepfing539 Also could you send me the dev forum/creator page that says about optimising your game, I would like to read it in depth more.
@@Noon1263 as far I as I know yes, destroying the player and character was just on the documentation so I covered it
@@stewiepfing539 ah ok, could you send me a link to the documentation?
Is there a way to simulate water with floating physics (for a boat game) so that the game works well on mobile too?
use a better game engine for that
If you want to accomplish something like that in Roblox (of all things), you might as well make your own physics system. At the moment, Im creating a physics system for grenades since using remote events + applying velocity on server will make the process slow. And I aint using FastCast!
Couldn’t you do raycasts? Same concept as a vehicle with raycast suspension but over water (and probably submerged a bit)
@@halohasawaken6793 have fun with getting that to perform at least somewhat fast. Native codegen will not work for that I believe so uhh yeah I think you should think of using another game engine
@@halohasawaken6793use OcnarfCast
9:18 what if theres a datastore? will it save?
i have the same question lol
this is a stupid question
you can async before destroying the player, and I believe players are destroyed on leaving.
the player:Destroy() there is redundant and pointless.
@@notpythonics it's a question no need to get so mad 😭🙏🏾
nil and 0 take up the same amount of memory
No they dont, in Lua, numbers are typically stored as double-precision floating-point numbers, which means they take more memory (8 bytes / 64 bits) than just nothing
@@stewiepfing539 all luau primitives (and even Vector3s) are stored in a 16 byte union
@@stewiepfing539 how about pointing out whats wrong with what i said? you can look at the source code yourself look it up. Nil and number are the same size. Variables for tables and strings are the same size too (the variable stores a pointer to the content inside internally)
why did all my and your replies get deleted?
did you delete my replies?
1:15 is this real?
HOW DO PROGRAMMERS NOT KNOW MEMORY MANAGEMENT? these people will never be able to write a SINGLE zig program without a memory leak
they dont need to, lua has a garbage collector, it just doesnt clean up some connections depending on scope and where theyre referenced. luas a scripting language precisely because you dont have to worry about memory management. imagine trying to use lua to configure a program and have to worry about memory allocation. also not sure what zig has to do with this
how do programmers not know everything about programming the second the start programming
Did i play 3vade with you
Learned this the hard way in c++
grrah
6.9GB specifically, bro what. nice video though
its 7 gb - the 0.1gb thats reserved for other services that roblox runs that arent binded to the player task. 7 gb is a lot for roblox.
oh 💩