Path: csiph.com!usenet.pasdenom.info!poup.poupinou.org!news.muarf.org!nntpfeed.proxad.net!proxad.net!feeder2-2.proxad.net!newsfeed.arcor.de!newsspool1.arcor-online.net!news.arcor.de.POSTED!not-for-mail Content-Type: text/plain; charset="UTF-8" Message-ID: <1553168.V9fml2jhPD@PointedEars.de> From: Thomas 'PointedEars' Lahn Reply-To: Thomas 'PointedEars' Lahn Organization: PointedEars Software (PES) Date: Sat, 14 Sep 2013 01:49:11 +0200 User-Agent: KNode/4.10.5 Content-Transfer-Encoding: 8Bit X-Face: %i>XG-yXR'\"2P/C_aO%~;2o~?g0pPKmbOw^=NT`tprDEf++D.m7"}HW6.#=U:?2GGctkL,f89@H46O$ASoW&?s}.k+&. MIME-Version: 1.0 Lines: 78 NNTP-Posting-Date: 14 Sep 2013 01:49:15 CEST NNTP-Posting-Host: a33b28e4.newsspool4.arcor-online.net X-Trace: DXC=T On 9/12/13 5:45 PM, Ken wrote: >> On 12.09.2013 18:39, Daniel Pitts wrote: >>> On 9/12/13 2:35 PM, Ken wrote: >>>> need to squeeze out all you can of the browser (which in case you would >>>> use a *while* loop in any case) there is no real problem using your >>>> approach. >>> while and for loops should be identical in performance. They are merely >>> different syntax for the same operations. >> >> Well.. it do depend on browser and implementation (such as JIT) but in >> general while loops are faster as seen here (with most browsers): >> >> http://jsperf.com/fastest-array-loops-in-javascript/32 >> >> Disclaimer: I didn't make the test. > > So many of those tests are flawed. They don't even perform the same > operation! ACK. > Anyway, for my browser, the fastest one was a test I created using a for > loop: > > for (var l = arr.length; l--;) { > someFn(arr[l]); > } I expected this; I have recommended this approach before (where reverse order is acceptable). Those are, after all, the fewest operations. > The second fastest one was a loop that was already there using a while > loop: > > var l = arr.length; > while(l--) { > someFn(arr[l]); > } > > The difference in speed was close to the margin-of-error, so they are > practically equivalent. That is because they are compiled to the same bytecode or native code. In pseudo-bytecode: ------------------------------------------- line # operation return operands ------------------------------------------- 1 0 DECL_VAR $0 "l" 1 FETCH_VAR $1 "arr" 2 FETCH_OBJ_R $2 $1, "length" 3 ASSIGN $3 $0, $2 2 4 FETCH_VAR $4 $0 5 JMPZ $4, ->13 6 POST_DEC $6 $0 3 7 FETCH_VAR $7 $1 8 FETCH_VAR $8 $0 9 FETCH_OBJ_R $9 $7, $8 10 FETCH_VAR $10 "someFn" 11 CALL_FUNC $11 $10, $9 12 JMP ->4 13 RETURN 0 ------------------------------------------- The “for” statement only differ from the “while” statement in that the operations #0 to #6 are produced by the same line. > Testing in Chrome 29.0.1547.65 on OS X 10.8.4 Thanks. -- PointedEars Twitter: @PointedEars2 Please do not Cc: me. / Bitte keine Kopien per E-Mail.