I think it's very important to find a better optimizing way for Array in different situation, your application Performance could be consist of Array over 30% . (Array used anywhere!)
(For example , if you are using jQuery , it means you are facing a lot of Dom Arrays) And we usually use Array to contains string pieces to join, (same reason , it's faster then string computation.) so I think 10k array is just a generic case for me , too. And it's interesting to find the difference for each browser implementation *IN DETAIL* , which related to the multiple browser support. I don't that arguments in apply has limitation , and now I know, it learn me a lession about that. 2011/3/20 Diego Perini <[email protected]> > On Sun, Mar 20, 2011 at 7:29 AM, אריה גלזר <[email protected]> wrote: > > IMO this is a very good example of over optimizing. Choose the one that's > > most readable and shorter to write (= push() ). > > Array performance is simply not something you should care about in 99% of > JS > > apps. Unless you actually find yourself pushing 10K items into an array > (in > > which case it's almost certain that you can use caching), thinking of > > whether or not to use push is simply a waste of your time. > > Don't do premature optimization or you'll be wasting your time on the > wring > > stuff. > > > > AFAIK arrays are extremely well optimized on all modern browsers, and as > for > > IE, well, it'll be slow no matter what you do, but optimizing array item > > addition will not make it faster > > > > Just to make sure I am not misunderstood. > > Array are also used to do image manipulations with canvas. > > 10K items is really a very tiny picture (very small array), I am > talking about 200K / 500K items in my case :) > > That's one reason why "apply()" cannot handle that on every browser, > and yes n[n.length] is faster than ".push()" since the cost of the > call is avoided and replaced by a simpler lookup. > > Don't worry @arieh, I am not loosing my time and I am actually doing > just fine thanks. > > You should better ignore messages that do not interest you ! Or just > ask details if you don't understand ;-) > > -- > Diego > > > > On Thu, Mar 17, 2011 at 12:36 AM, Diego Perini <[email protected]> > > wrote: > >> > >> On Wed, Mar 16, 2011 at 8:39 PM, Tony Wang <[email protected]> > wrote: > >> > Oops , I find this script is too heavy for my ie8 but it's fine for > >> > firefox. > >> > (that's just like what we know .... ) > >> > > >> > Don't click it if you are using IE. haha > >> > > >> > This is a smaller amount version. > >> > http://jsfiddle.net/We9p9/3/ > >> > > >> > And the speed still very depends on your browser implemention between > >> > n[n.length] and n.push(). > >> > > >> > > >> > 2011/3/16 Tony Wang <[email protected]> > >> >> > >> >> btw ,there's a interesting topic ,too. > >> >> > >> >> if you are doing array concat job, you could take a look for this. > >> >> http://jsfiddle.net/We9p9/1/ > >> >> > >> >> The keypoint is , even when you are using array.push , > >> >> > >> >> ary.push(1,2,3,4,5); > >> >> is still faster then > >> >> ary.push(1); > >> >> ary.push(2); > >> >> ary.push(3); > >> >> ary.push(4); > >> >> ary.push(5); > >> >> > >> >> > >> >> > >> >> 2011/3/16 Diego Perini <[email protected]>: > >> >> > On Wed, Mar 16, 2011 at 12:14 PM, Rob Griffiths <[email protected] > > > >> >> > wrote: > >> >> >> > >> >> >>> Length should return the value of the last index + 1, so in that > >> >> >>> case > >> >> >>> length will return 8 > >> >> >> > >> >> >> I knew I should have checked before stating that. > >> >> >> > >> >> >> -- > >> >> >> Rob Griffiths > >> >> >> http://bytespider.eu > >> >> >> @bytespider > >> >> >> https://github.com/bytespider > >> >> >> > >> >> >> -- > >> >> >> To view archived discussions from the original JSMentors Mailman > >> >> >> list: > >> >> >> http://www.mail-archive.com/[email protected]/ > >> >> >> > >> >> >> To search via a non-Google archive, visit here: > >> >> >> http://www.mail-archive.com/[email protected]/ > >> >> >> > >> >> >> To unsubscribe from this group, send email to > >> >> >> [email protected] > >> >> >> > >> >> > > >> >> > I use the following to convert/concat NodeList to Array: > >> >> > > >> >> > // concat elements to data array > >> >> > concatList = > >> >> > function(data, elements) { > >> >> > var i = -1, element; > >> >> > if (data.length === 0 && Array.slice) > >> >> > return Array.slice(elements); > >> >> > while ((element = elements[++i])) > >> >> > data[data.length] = element; > >> >> > return data; > >> >> > }, > >> >> > > >> >> > On older browsers this was the fastest "loop" among many browsers > at > >> >> > the time I tested it and on newer browsers this is not > >> >> > used/necessary. > >> >> > > >> >> > I am not sure using Firefox "Array.slice" shortcut when "data" > array > >> >> > is empty is worth it (nowadays) so the bare bone JS should be this: > >> >> > > >> >> > // concat elements to data array > >> >> > concatList = > >> >> > function(data, elements) { > >> >> > var i = -1, element; > >> >> > while ((element = elements[++i])) > >> >> > data[data.length] = element; > >> >> > return data; > >> >> > }, > >> >> > > >> >> > At that time another interesting thing I observed was that Webkit > >> >> > based browser were also faster to access DOM element in the ancient > >> >> > way using the "nodelist.item(n)" notation (really much faster). > >> >> > > >> >> > The point is performances are improving at a fast pace in every > >> >> > browser engine so small speed improvements like these are becoming > >> >> > less and less relevant, it is still a funny exercise though :) > >> >> > > >> >> > -- > >> >> > Diego > >> >> > > >> >> > -- > >> >> > To view archived discussions from the original JSMentors Mailman > >> >> > list: > >> >> > http://www.mail-archive.com/[email protected]/ > >> >> > > >> >> > To search via a non-Google archive, visit here: > >> >> > http://www.mail-archive.com/[email protected]/ > >> >> > > >> >> > To unsubscribe from this group, send email to > >> >> > [email protected] > >> >> > > >> >> > >> > > >> > -- > >> > To view archived discussions from the original JSMentors Mailman list: > >> > http://www.mail-archive.com/[email protected]/ > >> > > >> > To search via a non-Google archive, visit here: > >> > http://www.mail-archive.com/[email protected]/ > >> > > >> > To unsubscribe from this group, send email to > >> > [email protected] > >> > > >> > >> Tony, > >> "apply()" seems a bit faster with big numbers, however the number of > >> arguments you can pass are limited in all browsers. That's one reason > >> I try to avoid it when I know I will maybe hit those limits. > >> > >> You will easily hit those limits with string to array conversions in > >> canvas for example, were I found the problem first time I tried. In > >> other cases I think the current limitations are not a problem :) > >> > >> I tweeted about that before and there are exact numbers in that tweet > >> for Safari/Chrome which are differently limited (even if both are > >> Webkit implementations). > >> > >> Firefox and Opera seems to have a higher limit if I recall correctly > >> almost, twice as much (something around 256K for WK and 512K/1M for > >> FF/OP). > >> > >> -- > >> Diego > >> > >> -- > >> To view archived discussions from the original JSMentors Mailman list: > >> http://www.mail-archive.com/[email protected]/ > >> > >> To search via a non-Google archive, visit here: > >> http://www.mail-archive.com/[email protected]/ > >> > >> To unsubscribe from this group, send email to > >> [email protected] > > > > > > > > -- > > Arieh Glazer > > אריה גלזר > > 052-5348-561 > > http://www.arieh.co.il > > http://www.link-wd.co.il > > > > -- > > To view archived discussions from the original JSMentors Mailman list: > > http://www.mail-archive.com/[email protected]/ > > > > To search via a non-Google archive, visit here: > > http://www.mail-archive.com/[email protected]/ > > > > To unsubscribe from this group, send email to > > [email protected] > > > > -- > To view archived discussions from the original JSMentors Mailman list: > http://www.mail-archive.com/[email protected]/ > > To search via a non-Google archive, visit here: > http://www.mail-archive.com/[email protected]/ > > To unsubscribe from this group, send email to > [email protected] > -- To view archived discussions from the original JSMentors Mailman list: http://www.mail-archive.com/[email protected]/ To search via a non-Google archive, visit here: http://www.mail-archive.com/[email protected]/ To unsubscribe from this group, send email to [email protected]
