On 3/23/06, Frank W. Zammetti <[EMAIL PROTECTED]> wrote: > Hello, > > The first thing I would suggest is this is one of those cases where the > X in AJAX probably isn't appropriate. Remember that there is NO > requirement to use XML when doing AJAX (although I suppose it isn't AJAX > then strictly speaking). > > Take Google Suggests for example. They are not passing back XML, they > are actually passing back, if memory serves, a chunk of Javascript that > they execute. I seem to recall it being just a Javascript array that is > used to populate the dropdown, but I may not have all the details right. > The point though is that it isn't XML. > > Aside from that, one thing Google does too is they actually throttle the > requests. I don't have all the details, I just heard it explained once > at a user group meeting, but basically, the faster a person types, the > LESS requests go across, and that is dynamically calculated. > > Another thing you can do is write the code such that the request will > only fire X number of milliseconds after the last keyUp is received. > Maybe wait half a second after keyUp, and if a keyDown fires in the mean > time, you reset the counter. You would have to balance things so that > the delay doesn't lead to a poor user experience, but I think that can > be done. (I just saw Rick's reply as I was typing this, he makes the > same basic suggestion). > > On the server-side, if possible, implement some sort of caching. > Without knowing what kind of data you are using in your autocomplete, I > can't make any specific suggestions. But basically, if you can cache a > subset of the most frequently used data on the server, then you won't > have to hit the database as often. Maybe its even possible to cache the > entire database contents on the app server? > > At the end of the day there are two considerations: how many requests > you make of the server, and what the server actually has to do to > service the request. If this is a LAN/WAN application, you will find > the greater bottleneck is almost certainly what the server has to do. > If it's Internet-based, the opposite may be true. One bit of advice is > to not assume you have a problem at all! In this case you may, but do > some basic testing first. I've seen people assume that AJAX is horrible > for network traffic when just the opposite wound up being true. Then > again, I've seen people who assumed just the opposite and got burned :) > > Frank > > Joel Alejandro Espinosa Carra wrote: > > Hello all, > > > > I'm coding a simple action that retrieves some data from the database in > > order to create an xml object for an ajax-based autocomplete field, I'm > > worried about the load of the database beacuse this action is called > > from a javascript event "onkeyup()" this means that the action will be > > executed every time when user press a key in the field, is there an > > other way to do this in order to increase the performance?
If your results aren't going to be large you could do a greedy query on the first letter, and store the results as a javascript array (sending the results as a javascript array may also be easier than sending an xml). When a keyup happens on subsequent letters you could search the javascript array rather than calling an action. There would be a little more work on the javascript side, but you'd bother the server less. Mark > > > > pd. this is not a must-have requirement but I want to know what is the > > best way to do this. > > > > Best regards. > > > > -- > Frank W. Zammetti > Founder and Chief Software Architect > Omnytex Technologies > http://www.omnytex.com > AIM: fzammetti > Yahoo: fzammetti > MSN: [EMAIL PROTECTED] > Java Web Parts - > http://javawebparts.sourceforge.net > Supplying the wheel, so you don't have to reinvent it! > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]