[ 
https://issues.apache.org/jira/browse/CLK-542?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12704045#action_12704045
 ] 

Adrian A. commented on CLK-542:
-------------------------------

I think the problem is more complicated than that, and a smarter solution is 
required:
- there are basically two issues here that need to be solved separately:
   #1 compresion (+obfuscation) of js and css
   #2 concatenation of files

- with Click the user doesn't know what resources to process:
> files="text.css,utilClasses.css,layout.css,color.css,whitespace.css,chrome.css,
> css3.css,screen.css,formsPage.css,avoka.css"
or
> files="jquery-1.3.1.min.js,siteBase.js,readerSniff.js"
is known only by Click and differs from page to page because:
   #3 Click does smart resource inclusion (without the user caring too much)

--------------------------
#1 does not work always correctly:
  - various compressors produce bad code too, or bring up hidden bugs
  - finding a bug with the compressed resources is a total pain (almost 
impossible)
  - compressing before deploy will skip the detailed test phase
Solution for #1 adopted by many is to:
-  use a naming convention to distinct compressed files from plain ones and 
have both in the project
   file_name.js(css) -> file_name.pack.js(css)
-  js/css framework compressed files (like jQuery, prototype, etc.) to be used 
from the original site - not compressed by the user(since they test the 
compressed files too - no end user will write unit tests for his own compressed 
jQuery)
- let the server side (in this case Click) decide what file to deliver 
(compressed or plain) based on the debug/switch - e.g. also when in production 
for a short time it is required to turn debug on.

#2 it is not efficient at all to make a big file. Also sometimes #2 is required 
without #1 (so only concatenation - to debug problems)
Others frameworks use various solutions for this. E.g. Rails has Sprockets:
http://getsprockets.org/
http://37signals.com/svn/posts/1587-introducing-sprockets-javascript-dependency-management-and-concatenation
that does a smarter concatenation based on comments and conventions inside 
those files.

#3 Since Click is already smart with each page, maybe it could supply this 
information to know what to concatenate - it would be a pity to give up this 
smart behavior.
E.g. it could produce for each page ThePage.java a ThePage.css and ThePage.js 
with the concatenated resources that are required only in ThePage.



> Optimize CSS & JS when in production & profile modes
> ----------------------------------------------------
>
>                 Key: CLK-542
>                 URL: https://issues.apache.org/jira/browse/CLK-542
>             Project: Click
>          Issue Type: New Feature
>          Components: core, extras
>            Reporter: Malcolm Edgar
>            Priority: Minor
>
> Use optimized CSS and JS click includes when the application mode is 
> "profile" or "production".   Use the YUI Compressor to perform optimization 
> at Click build time for example:
>       <target name="optimize-resources">
>               <concat destfile="WebRoot/css/screen-all.css" >
>                       <filelist dir="WebRoot/css/" 
> files="text.css,utilClasses.css,layout.css,color.css,whitespace.css,chrome.css,css3.css,screen.css,formsPage.css,avoka.css"/>
>               </concat>
>               <java jar="lib/build/yuicompressor-2.4.2.jar" fork="true" 
> failonerror="true">
>                       <arg value="-o"/>
>                       <arg 
> value="WebRoot/css/screen-min-${build.version}.css"/>
>                       <arg value="WebRoot/css/screen-all.css"/>
>                </java>
>               <delete file="WebRoot/css/screen-all.css" failonerror="false"/>
>               <!-- JS -->
>               <concat destfile="WebRoot/javascript/javascript-all.js" >
>                       <filelist dir="WebRoot/javascript/" 
> files="jquery-1.3.1.min.js,siteBase.js,readerSniff.js"/>
>          </concat>
>               <java jar="lib/build/yuicompressor-2.4.2.jar" fork="true" 
> failonerror="true">
>                       <arg value="-o"/>
>                       <arg 
> value="WebRoot/javascript/javascript-min-${build.version}.js"/>
>                       <arg value="WebRoot/javascript/javascript-all.js"/>
>                </java>
>               <delete file="WebRoot/javascript/javascript-all.js"  
> failonerror="false" />
>       </target>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to