How efficient is adding strings? | SoloLearn: Learn to code for FREE!

+2

How efficient is adding strings?

I want my program to add multiple characters (or small strings) into a storage string. Will it be efficient? My program is gonna be something like this: var storage = ""; for (var i = 0; i < 100000; i++) { storage = storage + "a"; }

5/29/2020 6:37:40 PM

An Tran

29 Answers

New Answer

+5

I'd recommend running several tests with different input sizes. Some algorithms are able to operate efficiently on small data sets, but don't scale well. Sidenote: I'm not sure how JS concatenates strings internally, but it'd probably be better if you concatenated the string in chunks. For example, instead of adding 1 "a" 100,000 times, you add 10 "a"s 10,000 times.

+5

Serialization is the process of turning an object into a linear form. In my JS object example, a JS object isn't linear. It can have several different branches, nested objects, etc. Serializing it would mean to convert the JS object into JSON. JSON is considered linear because it's a continuous chunk of plain text. It is now in a format that can be easily transported.

+2

Can I ask why you're doing this?

+2

An Tran Well JS is garbage collected, and I've never run into a memory leak, so while I can't say for sure, I'd imagine it handles string allocation/deallocation just fine. I will keep researching this though. EDIT: References don't need to be kept track of, they're allocated on the stack, so when they go out of scope they're automatically deleted. When an object has no more reachable references, it get deleted. So JavaScript doesn't have to find and delete every single reference. It just has to wait until an object has no more references, then delete it.

+2

An Tran A computer program manages variables with a data structure called a stack. When a function is called, all the variables are allocated on the stack. When the function exits, all those variables are overwritten by the next stack frame. So this management is done automatically by the CPU. Nothing needs to be kept track of - It's completely passive. So once an objects references (on the stack) get overwritten, they're no longer reachable. Hope that makes sense. It's a very high level overview. If this type of stuff interests you then I'd recommend researching how a program's memory is laid out (stack, heap, data section, code section, etc.)

+1

The only way to find out is to test it.

+1

It's a simple shooting game, which calculates stuff each frame based on whether you are pressing the button or not. I will record the action of press and release of the button and then write it to that string. Normally for real life project, we would need to write to a file, but at the moment i want it to be easily shareable in SoloLearn.

+1

Ohhh, you want to share it. Do you plan on parsing the data in anyway after it's been shared? If so, you might want to create a json object, serialize it, then convert it to base64, then on the other end do the reverse until it's back to a json object, and it'll be much easier to parse

+1

An Tran Well JS will technically create a new string, but it'll also unallocate the memory for the previous string. It should be fine.

+1

An Tran And that's where the garbage collector comes in. It sees that the references are no longer valid (overwritten in the stack) and deletes the objects.

+1

An Tran Sorry for the late reply, I started a summer internship and haven't had much time for SoloLearn. GC usually only runs periodically and will clean up unused memory. I'm not quite sure what you're referring to as "functions".

0

Yeah. Sure strings can be as long as they need to be.

0

I saw a game (in here, SoloLearn) that is quite fun, so i want to add the recording feature for it. I just want something small, simple, and easy to share feature. I know that it won't fit for real life projects but i just want to have fun.

0

Can you elaborate on "Recording feature"? I'm trying to understand why you need to concatenate a large volume of strings for that?

0

Ah, I see. While you could write it to a string, appending those keypresses to an array would be a better way to approach it

0

That is the obvious way. But array of numbers is not as compact as string (and string is also an array of numbers), and it is hard to share it in normal text.

0

I was thinking about simple base64 only. Since the data is only an array of numbers, i'll just convert it to base64, not need for object or anything.

0

Ah, ok. I guess it doesn't really matter on such a small scale

0

What do you mean by "serialize it"?

0

Ahh, i get it.