Return-Path: Delivered-To: apmail-tapestry-dev-archive@www.apache.org Received: (qmail 53616 invoked from network); 9 Jul 2009 13:07:52 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 9 Jul 2009 13:07:52 -0000 Received: (qmail 5008 invoked by uid 500); 9 Jul 2009 13:06:28 -0000 Delivered-To: apmail-tapestry-dev-archive@tapestry.apache.org Received: (qmail 4583 invoked by uid 500); 9 Jul 2009 13:06:27 -0000 Mailing-List: contact commits-help@tapestry.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@tapestry.apache.org Delivered-To: mailing list commits@tapestry.apache.org Received: (qmail 3990 invoked by uid 99); 9 Jul 2009 12:59:37 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 09 Jul 2009 12:59:37 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.140] (HELO brutus.apache.org) (140.211.11.140) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 09 Jul 2009 12:59:35 +0000 Received: from brutus (localhost [127.0.0.1]) by brutus.apache.org (Postfix) with ESMTP id DF52229A0011 for ; Thu, 9 Jul 2009 05:59:14 -0700 (PDT) Message-ID: <729351881.1247144354898.JavaMail.jira@brutus> Date: Thu, 9 Jul 2009 05:59:14 -0700 (PDT) From: "Ben Gidley (JIRA)" To: commits@tapestry.apache.org Subject: [jira] Commented: (TAP5-769) Combination of JavaScript is flawed In-Reply-To: <1688116459.1247139196120.JavaMail.jira@brutus> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 X-Virus-Checked: Checked by ClamAV on apache.org [ https://issues.apache.org/jira/browse/TAP5-769?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12729241#action_12729241 ] Ben Gidley commented on TAP5-769: --------------------------------- I agree with this problem but regarding the solution - I think if you are that concerned you have to put it into the common JS loaded on each page. (There is an service for this - clientInfrastructure). I have built a library to help with this in ioko-tapestry-commons. The solution you advocate would be ideal - but I can't see any way of achieving it. > Combination of JavaScript is flawed > ----------------------------------- > > Key: TAP5-769 > URL: https://issues.apache.org/jira/browse/TAP5-769 > Project: Tapestry 5 > Issue Type: Bug > Components: tapestry-core > Affects Versions: 5.1.0.5 > Reporter: Andy Blower > > I think Tapestry's JavaScript combination functionality is flawed. Each page & component specifies which JS files it needs, which means that JS can be split into functional units (good for development & maintenance) and only the JS that's actually needed for that page is added for the client to download. The consequence of this is that pages can have lots of JS files to download, all of which has to be downloaded before the page is loaded/rendered now that the script link tags are enforced to be back in the head section. Our search results page has 34 JS files for instance. > Yahoo's YSlow tool recommends that these files are combined and minified, and Tapestry includes functionality to do the first (minifying is on the TODO list I believe) probably as a response to this recommendation which is good. Unfortunately the implementation based on only having the JS files required for a page means that the combined JS can easily be unique for most pages of a site. This means that the client browser has to download & cache lots of large JS multiple times (prototype, scriptaculous, tapestry etc) as part of bigger combined files, which I think is probably worse than requesting them separately, but only downloading stuff once and using that for all pages. > To solve this issue, Tapestry script combination could combine all of the scripts needed for the site, and not just the unique set for each page. That way only a single JS file needs to be downloaded and cached by the client browser. I'm aware that this may not be that easy given the existing way only scripts needed for the page are put on it, so an alternative solution that may be easier to implement would be to combine scripts into two files for each page. The first file would contain all of the commonly Tapestry provided JS such as prototype.js, scriptaculous.js, effects.js, tapestry.js, etc in one file that's the same for every page, and have the rest in a second file that is unique for the page but that is not likely to include very large JS files, just many little ones. > A second flaw that the combination has is that if an external JS file is requested, script combination is aborted rather than just excluding the external file from the combination. > One other thing that surprised me about Tapestry's script combination is the length of the generated filename, for example it's 919 characters long for a page on our site. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.