From: Chris D. <ce...@ui...> - 2007-10-09 17:42:03
Attachments:
ajax.txt
|
Hi all, I am experiencing a major performance problem with the AJAX calls in the Search Results screen: Since there are quite a few (20 each) calls to getStatus() and getSaveStatus(), I noticed that it took too long before a call to getNarrowOptions() was made. And since the narrowing functionality, in my case, is the most time-consuming process, the effects of this are disastrous. I do realize that each call is asynchronous, however, it appears that the relatively quick getStatus() and getSaveStatus() responses are getting handled midstream, delaying the final call to getNarrowOptions(). Viewing my apache logs (attached to this email) will make this clear, I think. I was able to solve my issue by queuing the getStatus() and getSaveStatus() function calls and executing them at the end of the page load (I didn't queue the getNarrowOptions() call). I'm not sure if this is the best way to handle it, but I didn't want to depend on the layout of my web page to determine the order of execution. At the end of my apache log is the "queued" version of AJAX calls. Notice the difference in placement of getNarrowOptions(). BTW, I tested this with Firefox 2.0.0.6 on Ubuntu Linux and also with Microsoft IE version 6.0 on Windows 2000; they both had very similar behaviors. Let me know if anyone is interested in my "fix." In my particular case, the usability of this page has increased significantly. I also noticed a caching problem in Microsoft IE (version 6): While testing with IE, I noticed the getStatus() calls were being cached in the browser (with default IE cache settings set to "Automatic"). Shouldn't these web pages be delivered with a no-cache pragma (cache-control header)? Because if they aren't, won't the circulation information, i.e., availability, be potentially out of date? I verified this in my implementation of VUFind: I performed a search, chose an item, then checked-out the item (rendering it "unavailable"); I performed the same search again and the status remained "available" (however, if I clicked on the Holdings in the Record display, it correctly showed the proper circulation information, i.e., "checked out"). I haven't yet attempted to address this issue. It may be as simple as modifying the launch() method in web/services/Search/AJAX.php by adding an appropriate header and/or pragma? I am very interested in knowing if others are also sharing these behaviors (or not). Also, if anyone has suggestions on any of these issues, I would greatly appreciate it! Thanks! Chris |
From: Andrew N. <and...@vi...> - 2007-10-10 19:54:14
|
> -----Original Message----- > From: vuf...@li... [mailto:vufind-tech- > bo...@li...] On Behalf Of Chris Delis > Sent: Tuesday, October 09, 2007 1:42 PM > To: vuf...@li... > Subject: [VuFind-Tech] AJAX issues? Plus, Microsoft IE cache-ing > issues? > > Hi all, > > I am experiencing a major performance problem with the AJAX calls in > the Search Results screen: > > Since there are quite a few (20 each) calls to getStatus() and > getSaveStatus(), I noticed that it took too long before a call to > getNarrowOptions() was made. And since the narrowing functionality, in > my case, is the most time-consuming process, the effects of this are > disastrous. I do realize that each call is asynchronous, however, it > appears that the relatively quick getStatus() and getSaveStatus() > responses are getting handled midstream, delaying the final call to > getNarrowOptions(). Viewing my apache logs (attached to this email) > will make this clear, I think. > > I was able to solve my issue by queuing the getStatus() and > getSaveStatus() function calls and executing them at the end of the > page load (I didn't queue the getNarrowOptions() call). I'm not sure > if this is the best way to handle it, but I didn't want to depend on > the layout of my web page to determine the order of execution. At the > end of my apache log is the "queued" version of AJAX calls. Notice the > difference in placement of getNarrowOptions(). BTW, I tested this with > Firefox 2.0.0.6 on Ubuntu Linux and also with Microsoft IE version 6.0 > on Windows 2000; they both had very similar behaviors. > Let me know if anyone is interested in my "fix." In my particular > case, the usability of this page has increased significantly. Chris, I had been thinking about this myself and wanting to do exactly what= you have done. If you would like to send a patch, I will commit it. > I also noticed a caching problem in Microsoft IE (version 6): > > While testing with IE, I noticed the getStatus() calls were being > cached in the browser (with default IE cache settings set to > "Automatic"). Shouldn't these web pages be delivered with a no-cache > pragma (cache-control header)? Because if they aren't, won't the > circulation information, i.e., availability, be potentially out of > date? I verified this in my implementation of VUFind: I performed a > search, chose an item, then checked-out the item (rendering it > "unavailable"); I performed the same search again and the status > remained "available" (however, if I clicked on the Holdings in the > Record display, it correctly showed the proper circulation information, > i.e., "checked out"). I haven't yet attempted to address this issue. > It may be as simple as modifying the launch() method in > web/services/Search/AJAX.php by adding an appropriate header and/or > pragma? > This is something I have not seen, but it's fairly hard to test for. We co= uld very easily add the "no-cache" to AJAX.php. Not sure if this will solv= e the problem, but it's worth a try. Again, if you want to send a patch, I will commit it. Andrew |
From: Chris D. <ce...@ui...> - 2007-10-10 21:02:53
Attachments:
queue_ajax.patch
|
On Wed, Oct 10, 2007 at 03:54:21PM -0400, Andrew Nagy wrote: > > -----Original Message----- > > Chris, I had been thinking about this myself and wanting to do exactly what you have done. If you would like to send a patch, I will commit it. > I attached the patch to this email. --Chris > > I also noticed a caching problem in Microsoft IE (version 6): > > > > While testing with IE, I noticed the getStatus() calls were being > > cached in the browser (with default IE cache settings set to > > "Automatic"). Shouldn't these web pages be delivered with a no-cache > > pragma (cache-control header)? Because if they aren't, won't the > > circulation information, i.e., availability, be potentially out of > > date? I verified this in my implementation of VUFind: I performed a > > search, chose an item, then checked-out the item (rendering it > > "unavailable"); I performed the same search again and the status > > remained "available" (however, if I clicked on the Holdings in the > > Record display, it correctly showed the proper circulation information, > > i.e., "checked out"). I haven't yet attempted to address this issue. > > It may be as simple as modifying the launch() method in > > web/services/Search/AJAX.php by adding an appropriate header and/or > > pragma? > > > > This is something I have not seen, but it's fairly hard to test for. We could very easily add the "no-cache" to AJAX.php. Not sure if this will solve the problem, but it's worth a try. > > Again, if you want to send a patch, I will commit it. > > Andrew |
From: Chris D. <ce...@ui...> - 2007-10-10 21:09:01
Attachments:
queue_ajax.patch
|
On Wed, Oct 10, 2007 at 04:02:39PM -0500, Chris Delis wrote: > On Wed, Oct 10, 2007 at 03:54:21PM -0400, Andrew Nagy wrote: > > > -----Original Message----- > > > > Chris, I had been thinking about this myself and wanting to do exactly what you have done. If you would like to send a patch, I will commit it. > > > > > I attached the patch to this email. Take two. I probably should have used the "new" operator in creating the array. Patch re-submitted. > > --Chris > > > > > > > > I also noticed a caching problem in Microsoft IE (version 6): > > > > > > While testing with IE, I noticed the getStatus() calls were being > > > cached in the browser (with default IE cache settings set to > > > "Automatic"). Shouldn't these web pages be delivered with a no-cache > > > pragma (cache-control header)? Because if they aren't, won't the > > > circulation information, i.e., availability, be potentially out of > > > date? I verified this in my implementation of VUFind: I performed a > > > search, chose an item, then checked-out the item (rendering it > > > "unavailable"); I performed the same search again and the status > > > remained "available" (however, if I clicked on the Holdings in the > > > Record display, it correctly showed the proper circulation information, > > > i.e., "checked out"). I haven't yet attempted to address this issue. > > > It may be as simple as modifying the launch() method in > > > web/services/Search/AJAX.php by adding an appropriate header and/or > > > pragma? > > > > > > > This is something I have not seen, but it's fairly hard to test for. We could very easily add the "no-cache" to AJAX.php. Not sure if this will solve the problem, but it's worth a try. > > > > Again, if you want to send a patch, I will commit it. > > > > Andrew > Index: web/services/Search/ajax.js > =================================================================== > --- web/services/Search/ajax.js (revision 170) > +++ web/services/Search/ajax.js (working copy) > @@ -1,3 +1,13 @@ > +var AjaxQueue = Array(); > +function AddAjaxQueue(expr) { > + AjaxQueue[AjaxQueue.length] = expr; > +} > +function DoAjaxQueue() { > + for (var i=0; i<AjaxQueue.length; i++) { > + eval(AjaxQueue[i]); > + } > +} > + > function createRequestObject() { > // find the correct xmlHTTP, works with IE, FF and Opera > var xmlhttp; > Index: web/services/Search/templates/list-list.tpl > =================================================================== > --- web/services/Search/templates/list-list.tpl (revision 170) > +++ web/services/Search/templates/list-list.tpl (working copy) > @@ -57,15 +57,15 @@ > <a href="{$path}/Record/{$record.id}/Save" onClick="forms['listForm'].elements['recordId'].value='{$record.id}'; showSaveForm(); return false;" class="fav tool">{translate text='Add to favorites'}</a> > > </div> > > <script language="JavaScript" type="text/javascript"> > > - getSaveStatus('{$record.id}', 'saveLink{$record.id}'); > > + AddAjaxQueue( 'getSaveStatus(\'{$record.id}\' , \'saveLink{$record.id}\')' ); > > </script> > > </div> > > </div> > > </div> > > > > <script type="text/javascript"> > > - getStatus('{$record.id}', 'status{$smarty.foreach.recordLoop.iteration}'); > > + AddAjaxQueue( 'getStatus(\'{$record.id}\' , \'status{$smarty.foreach.recordLoop.iteration}\')' ); > > </script> > > > > {/foreach} > > -</form> > \ No newline at end of file > +</form> > Index: web/services/Search/templates/list.tpl > =================================================================== > --- web/services/Search/templates/list.tpl (revision 170) > +++ web/services/Search/templates/list.tpl (working copy) > @@ -146,3 +146,7 @@ > <!-- End Narrow Search Options --> > > </div> > + > +<script language="JavaScript" type="text/javascript"> > + DoAjaxQueue(); > +</script> > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Splunk Inc. > Still grepping through log files to find problems? Stop. > Now Search log events and configuration files using AJAX and a browser. > Download your FREE copy of Splunk now >> http://get.splunk.com/ > _______________________________________________ > Vufind-tech mailing list > Vuf...@li... > https://lists.sourceforge.net/lists/listinfo/vufind-tech |
From: Andrew N. <and...@vi...> - 2007-10-11 16:18:37
|
Wow Chris, huge improvement! I will post the patch now. Andrew > -----Original Message----- > From: Chris Delis [mailto:ce...@ui...] > Sent: Wednesday, October 10, 2007 5:09 PM > To: Andrew Nagy; vuf...@li... > Subject: Re: [VuFind-Tech] AJAX issues? Plus, Microsoft IE cache-ing > issues? > > On Wed, Oct 10, 2007 at 04:02:39PM -0500, Chris Delis wrote: > > On Wed, Oct 10, 2007 at 03:54:21PM -0400, Andrew Nagy wrote: > > > > -----Original Message----- > > > > > > Chris, I had been thinking about this myself and wanting to do > exactly what you have done. If you would like to send a patch, I will > commit it. > > > > > > > > > I attached the patch to this email. > > Take two. I probably should have used the "new" operator in creating > the array. Patch re-submitted. > > > > > --Chris > > > > > > > > > > > > > > I also noticed a caching problem in Microsoft IE (version 6): > > > > > > > > While testing with IE, I noticed the getStatus() calls were being > > > > cached in the browser (with default IE cache settings set to > > > > "Automatic"). Shouldn't these web pages be delivered with a > > > > no-cache pragma (cache-control header)? Because if they aren't, > > > > won't the circulation information, i.e., availability, be > > > > potentially out of date? I verified this in my implementation of > > > > VUFind: I performed a search, chose an item, then checked-out the > > > > item (rendering it "unavailable"); I performed the same search > > > > again and the status remained "available" (however, if I clicked > > > > on the Holdings in the Record display, it correctly showed the > > > > proper circulation information, i.e., "checked out"). I haven't > yet attempted to address this issue. > > > > It may be as simple as modifying the launch() method in > > > > web/services/Search/AJAX.php by adding an appropriate header > > > > and/or pragma? > > > > > > > > > > This is something I have not seen, but it's fairly hard to test > for. We could very easily add the "no-cache" to AJAX.php. Not sure if > this will solve the problem, but it's worth a try. > > > > > > Again, if you want to send a patch, I will commit it. > > > > > > Andrew > > > Index: web/services/Search/ajax.js > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > --- web/services/Search/ajax.js (revision 170) > > +++ web/services/Search/ajax.js (working copy) > > @@ -1,3 +1,13 @@ > > +var AjaxQueue =3D Array(); > > +function AddAjaxQueue(expr) { > > + AjaxQueue[AjaxQueue.length] =3D expr; } function DoAjaxQueue() { > > + for (var i=3D0; i<AjaxQueue.length; i++) { > > + eval(AjaxQueue[i]); > > + } > > +} > > + > > function createRequestObject() { > > // find the correct xmlHTTP, works with IE, FF and Opera > > var xmlhttp; > > Index: web/services/Search/templates/list-list.tpl > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > --- web/services/Search/templates/list-list.tpl (revision 170) > > +++ web/services/Search/templates/list-list.tpl (working copy) > > @@ -57,15 +57,15 @@ > > <a href=3D"{$path}/Record/{$record.id}/Save" > > onClick=3D"forms['listForm'].elements['recordId'].value=3D'{$record.id}= '; > > showSaveForm(); return false;" class=3D"fav tool">{translate text=3D'Ad= d > > to favorites'}</a> > > > > </div> > > > > <script language=3D"JavaScript" type=3D"text/javascript"> > > > > - getSaveStatus('{$record.id}', 'saveLink{$record.id}'); > > > > + AddAjaxQueue( 'getSaveStatus(\'{$record.id}\' , > > + \'saveLink{$record.id}\')' ); > > > > </script> > > > > </div> > > > > </div> > > > > </div> > > > > > > > > <script type=3D"text/javascript"> > > > > - getStatus('{$record.id}', > 'status{$smarty.foreach.recordLoop.iteration}'); > > > > + AddAjaxQueue( 'getStatus(\'{$record.id}\' , > > + \'status{$smarty.foreach.recordLoop.iteration}\')' ); > > > > </script> > > > > > > > > {/foreach} > > > > -</form> > > \ No newline at end of file > > +</form> > > Index: web/services/Search/templates/list.tpl > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > --- web/services/Search/templates/list.tpl (revision 170) > > +++ web/services/Search/templates/list.tpl (working copy) > > @@ -146,3 +146,7 @@ > > <!-- End Narrow Search Options --> > > > > </div> > > + > > +<script language=3D"JavaScript" type=3D"text/javascript"> > > + DoAjaxQueue(); > > +</script> > > > --------------------------------------------------------------------- > - > > --- This SF.net email is sponsored by: Splunk Inc. > > Still grepping through log files to find problems? Stop. > > Now Search log events and configuration files using AJAX and a > browser. > > Download your FREE copy of Splunk now >> http://get.splunk.com/ > > _______________________________________________ > > Vufind-tech mailing list > > Vuf...@li... > > https://lists.sourceforge.net/lists/listinfo/vufind-tech |