mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-29 03:44:37 +00:00
cd70f66472
r=bz sr=bz Perhaps an explanation. String concatenation is a chance for garbage collection. If you have unbounded input, this can be pretty bad. When you start running low on memory, the garbage collector gets desperate and won't take shortcuts. Worst of all, the original code generates one string of garbage every iteration starting with the second or third. This code uses a=[] to construct an array and a[n] to set the upper array boundary, 0 being the lower, and there are n slots between a[0] and a[n]. join() will build a string with n copies of the join argument, where n is the number of slots between between cells. So for: a=[]; a[1]=''; there's 1 slot between [0] and [1]. The array's length is actually 2, but the joined length will be 1. While it is possible to use new Array(x), the behavior is different because the array has length x and there are x-1 spaces between cells. This leads to code which would be both much longer and harder to read. And definitely not particularly intuitive. The code used here otoh, while magical will hopefully require you to pause, think, and quickly understand what's going on. If not, you paused long enough for this bubble to appear and explain it to you :). |
||
---|---|---|
.. | ||
alerts | ||
autocomplete | ||
bookmarks | ||
build | ||
console | ||
cookie/locale/en-US | ||
directory | ||
download-manager | ||
extensions | ||
filepicker | ||
find | ||
history | ||
intl | ||
killAll | ||
related | ||
resetPref | ||
search | ||
sidebar | ||
startup | ||
updates | ||
urlwidget | ||
windowds | ||
winhooks | ||
xfer/resources/locale/en-US | ||
xremote | ||
.cvsignore | ||
jar.mn | ||
Makefile.in | ||
nsXPFEComponentsCID.h |