[ https://issues.apache.org/jira/browse/TAP5-1541?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Howard M. Lewis Ship closed TAP5-1541. -------------------------------------- Resolution: Fixed Fix Version/s: 5.3 Assignee: Howard M. Lewis Ship This was fixed as part of TAP5-1708. > Optimization load of scripts (javascripts and stylesheets) > ---------------------------------------------------------- > > Key: TAP5-1541 > URL: https://issues.apache.org/jira/browse/TAP5-1541 > Project: Tapestry 5 > Issue Type: Improvement > Components: tapestry-core > Affects Versions: 5.3, 5.2.4 > Reporter: Pedro Ayala > Assignee: Howard M. Lewis Ship > Fix For: 5.3 > > Attachments: tapestry-loadscripts-improvement.txt, > tapestry-loadscripts-improvement.txt > > > While loading the script in the page, we are checking if the list of extra > scripts are already included in the document.scripts or document.styleSheets. > This process involves going through this documents scripts for each script we > are loading, and since we are doing some processing each time the client side > execution time it seriously affected. > In order to reduce these process needed for each document script, we are > creating a temporary array with the processed info, so we only need to do the > check if the scripts are in this array. > ### Eclipse Workspace Patch 1.0 > #P tapestry-core > Index: src/main/resources/org/apache/tapestry5/tapestry.js > =================================================================== > --- src/main/resources/org/apache/tapestry5/tapestry.js (revision > 1132663) > +++ src/main/resources/org/apache/tapestry5/tapestry.js (working copy) > @@ -2097,28 +2097,47 @@ > * elements) contains the given asset URL. > * > * @param collection > - * @param prop > - * property to check ('src' for script, 'href' to style). > * @param assetURL > * complete URL (i.e., with protocol, host and port) to the > asset > */ > - contains : function(collection, prop, assetURL) { > - return $A(collection).any( > + contains : function(collection, assetURL) { > + return collection.any( > function(element) { > - var existing = element[prop]; > > - if (!existing || existing.blank()) > - return false; > - > - var complete = Prototype.Browser.IE ? > Tapestry > - .rebuildURL(existing) : > existing; > - > - return complete == assetURL; > + return element == assetURL; > + > }); > > return false; > }, > + > + /** > + * Return collection with no blank elements > + * > + * @param collection > + * @param prop > + * property to check ('src' for script, 'href' to style). > + */ > + getDocumentCollection : function(collection, prop) { > + var documentScrips = []; > > + $A(collection).each( > + function(element) { > + var existing = element[prop] > + > + if (!existing || existing.blank()) > + return false; > + > + var complete = Prototype.Browser.IE ? Tapestry > + .rebuildURL(existing) : > existing; > + > + documentScrips.push(complete); > + } > + ); > + > + return $A(documentScrips); > + }, > + > /** > * Add scripts, as needed, to the document, then waits for them all to > load, > * and finally, calls the callback function. > @@ -2131,13 +2150,14 @@ > addScripts : function(scripts, callback) { > > var scriptsToLoad = []; > + > + var documentScrips = > this.getDocumentCollection(document.scripts, "src"); > > /* scripts may be null or undefined */ > (scripts || []).each(function(s) { > var assetURL = Tapestry.rebuildURL(s); > > - if (Tapestry.ScriptManager.contains(document.scripts, > "src", > - assetURL)) > + if (Tapestry.ScriptManager.contains(documentScrips, > assetURL)) > return; > > scriptsToLoad.push(assetURL); > @@ -2167,13 +2187,14 @@ > return; > > var head = $$('head').first(); > + > + var documentStyleSheets = > this.getDocumentCollection(document.styleSheets, "href"); > > $(stylesheets).each( > function(s) { > var assetURL = > Tapestry.rebuildURL(s.href); > > - if > (Tapestry.ScriptManager.contains(document.styleSheets, > - 'href', assetURL)) > + if > (Tapestry.ScriptManager.contains(documentStyleSheets, assetURL)) > return; > var element = new Element('link', { > type : 'text/css', -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira