Strings are very optimized in v8, so just replacing hot path string with buffer does not always help - benchmark first, ideally at a very low level ( statistical profiler / dtrace / generated assembly / irhydra ). For example, if you do `content += chunk` in a loop you are likely not copying strings - internally v8 keeps "content" string as linked list of chunks. Because this is low at code generation path, if you try to emulate this linked list manually in "user space" you might get slower code