]> source.dussan.org Git - jquery-ui.git/commitdiff
Build: `ant size` will now give you a report detailing differences in size since...
authorCorey Frang <gnarf@gnarf.net>
Mon, 17 Oct 2011 19:47:20 +0000 (14:47 -0500)
committerCorey Frang <gnarf@gnarf.net>
Mon, 17 Oct 2011 19:47:20 +0000 (14:47 -0500)
(cherry picked from commit 264139b22584eef1de672d0a7f1c52d14318eb56)

Conflicts:

build/build.xml

.gitignore
build/build.xml
build/build/sizer.js [new file with mode: 0644]

index e39040f5b4a61a5768ac857dac5a692b5210782f..43da29d564cec11c3c4460d5788d49fc98914f22 100644 (file)
@@ -1,4 +1,6 @@
 build/dist
+build/size
+build/build/.sizecache.json
 docs
 .project
 *~
index 568cc9c923f11339096371164607c4b33d95666e..b663408f0a89f0b81b54860a76059c8e3721f7b9 100644 (file)
@@ -9,13 +9,13 @@
 -->
 
 <project name="jquery-ui" default="deploy-release" basedir=".">
-       
+
        <taskdef resource="net/sf/antcontrib/antcontrib.properties">
                <classpath>
                        <pathelement location="build/ant-contrib-0.6.jar"/>
                </classpath>
        </taskdef>
-       
+
        <property file="ant.properties" />
 
        <loadfile failonerror="no" srcFile="../version.txt" property="release.version">
@@ -32,6 +32,7 @@
        <property name="docs.dir" value="${dist.dir}/docs/" />
 
        <property name="min.dir" value="${dist.dir}/ui/minified" />
+       <property name="size.dir" value="size" />
 
        <property name="concatenated" value="jquery-ui" />
        <property name="concatenated.i18n" value="jquery-ui-i18n" />
 
        <property description="Google Closure" name="closure-jar" value="${build.dir}/google-compiler-20091218.jar" />
        <property description="YUI Compressor" name="yuicompressor-jar" value="${build.dir}/yuicompressor-2.4.2.jar" />
-       
+
        <target name="deploy-release" depends="clean, docs-download, copy, minify, replace-version, prepend-header, zip" description="Release builder">
        </target>
-       
+
        <target name="replace-version">
                <replaceregexp match="@VERSION" replace="${release.version}" flags="g" byline="true">
-                   <fileset dir="${dist.dir}/ui/" includes="*.js"/>
+                       <fileset dir="${dist.dir}/ui/" includes="*.js"/>
                        <fileset dir="${dist.dir}/ui/minified/" includes="*.js"/>
                        <fileset dir="${dist.dir}/themes/" includes="**/*.css"/>
                </replaceregexp>
                <echo message="Replaced all @VERSION to ${release.version}." />
        </target>
-       
+
        <target name="prepend-header">
                <copy todir="${dist.dir}/headers/">
                        <fileset dir="${dist.dir}/ui/" includes="*.js" />
                </copy>
                <replaceregexp match="^(\/\*.*?\*\/\s).+" replace="\1" flags="s">
-                   <fileset dir="${dist.dir}/headers/" includes="*.js"/>
+                               <fileset dir="${dist.dir}/headers/" includes="*.js"/>
                </replaceregexp>
                <for param="file">
                        <path><fileset dir="${min.dir}/" includes="*.js" /></path>
                <copy todir="${min.dir}" overwrite="true">
                        <fileset dir="${dist.dir}/ui-headered/" includes="*.js" />
                </copy>
-               
+
                <copy todir="${dist.dir}/headers/">
                        <fileset dir="${dist.dir}/themes/base" includes="*.css" />
                </copy>
                <replaceregexp match="^(\/\*.*?\*\/\s).+" replace="\1" flags="s">
-                   <fileset dir="${dist.dir}/headers/" includes="*.css"/>
+                               <fileset dir="${dist.dir}/headers/" includes="*.css"/>
                </replaceregexp>
                <for param="file">
                        <path><fileset dir="${dist.dir}/themes/base/minified" includes="*.css" /></path>
                <copy todir="${dist.dir}/themes/base/minified" overwrite="true">
                        <fileset dir="${dist.dir}/ui-headered/" includes="*.css" />
                </copy>
-               
+
                <!-- once more for the i18n files -->
                <!-- need to clean up headers in those files first
                <copy todir="${dist.dir}/headers/i18n/">
                        <fileset dir="${dist.dir}/ui/i18n/" includes="*.js" />
                </copy>
                <replaceregexp match="^(\/\*.*?\*\/\s).+" replace="\1" flags="s">
-                   <fileset dir="${dist.dir}/headers/i18n/" includes="*.js"/>
+                               <fileset dir="${dist.dir}/headers/i18n/" includes="*.js"/>
                </replaceregexp>
                <for param="file">
                        <path><fileset dir="${min.dir}/i18n/" includes="*.js" /></path>
                <mkdir dir="${min.dir}" />
                <mkdir dir="${min.dir}/i18n/" />
                <mkdir dir="${dist.dir}/themes/base/minified" />
-               
-               <apply executable="java" parallel="false">
-                       <fileset dir="${dist.dir}/ui" includes="*.js" />
-                       <arg line="-jar" />
-                       <arg path="${closure-jar}" />
-                       <arg value="--warning_level" />
-                       <arg value="QUIET" />
-                       <arg value="--js_output_file" />
-                       <targetfile />
-                       <arg value="--js" />
-                       <mapper type="glob" from="*.js" to="${min.dir}/*.min.js" />
-               </apply>
-
-               <apply executable="java" parallel="false">
-                       <fileset dir="${dist.dir}/ui/i18n" includes="*.js" />
-                       <arg line="-jar" />
-                       <arg path="${closure-jar}" />
-                       <arg value="--warning_level" />
-                       <arg value="QUIET" />
-                       <arg value="--js_output_file" />
-                       <targetfile />
-                       <arg value="--js" />
-                       <mapper type="glob" from="*.js" to="${min.dir}/i18n/*.min.js" />
-               </apply>
-
-               <apply executable="java" parallel="false">
-                       <fileset dir="${dist.dir}/themes/base" includes="*.css" />
-                       <arg line="-jar" />
-                       <arg path="${yuicompressor-jar}" />
-                       <arg line="--charset utf-8" />
-                       <arg line="-v" />
-                       <srcfile />
-                       <arg line="-o" />
-                       <mapper type="glob" from="*.css" to="${dist.dir}/themes/base/minified/*.min.css" />
-                       <targetfile/>
-               </apply>
-               
+
+                               <parallel threadsperprocessor="1">
+
+                                               <apply executable="java" parallel="false">
+                                                               <fileset dir="${dist.dir}/ui" includes="*.js" />
+                                                               <arg line="-jar" />
+                                                               <arg path="${closure-jar}" />
+                                                               <arg value="--warning_level" />
+                                                               <arg value="QUIET" />
+                                                               <arg value="--js_output_file" />
+                                                               <targetfile />
+                                                               <arg value="--js" />
+                                                               <mapper type="glob" from="*.js" to="${min.dir}/*.min.js" />
+                                               </apply>
+
+                                               <apply executable="java" parallel="false">
+                                                               <fileset dir="${dist.dir}/ui/i18n" includes="*.js" />
+                                                               <arg line="-jar" />
+                                                               <arg path="${closure-jar}" />
+                                                               <arg value="--warning_level" />
+                                                               <arg value="QUIET" />
+                                                               <arg value="--js_output_file" />
+                                                               <targetfile />
+                                                               <arg value="--js" />
+                                                               <mapper type="glob" from="*.js" to="${min.dir}/i18n/*.min.js" />
+                                               </apply>
+
+                                               <apply executable="java" parallel="false">
+                                                               <fileset dir="${dist.dir}/themes/base" includes="*.css" />
+                                                               <arg line="-jar" />
+                                                               <arg path="${yuicompressor-jar}" />
+                                                               <arg line="--charset utf-8" />
+                                                               <arg line="-v" />
+                                                               <srcfile />
+                                                               <arg line="-o" />
+                                                               <mapper type="glob" from="*.css" to="${dist.dir}/themes/base/minified/*.min.css" />
+                                                               <targetfile/>
+                                               </apply>
+
+                               </parallel>
+
                <replaceregexp match=".css" replace=".min.css" flags="g">
                        <fileset dir="${dist.dir}/themes/base/minified/">
                                <include name="*.base.min.css"/>
                                <include name="*.all.min.css"/>
                        </fileset>
                </replaceregexp>
-               
+
                <!-- make a copy of all theme images to ensure that relative paths in minified css files work -->
                <copy todir="${dist.dir}/themes/base/minified/images" >
                        <fileset dir="${ui.dir}/themes/base/images" />
                </copy>
-               
+
                <echo message="Minified ui/ built." />
        </target>
-       
+
        <target description="Copy needed folders" name="copy">
                <echo message="Copying files" />
                <mkdir dir="${dist.dir}" />
                </copy>
                <echo message="Files copied." />
        </target>
-       
+
         <target name="clean">
-               <delete dir="dist" />
-    </target>
-       
+               <delete dir="dist" />
+               </target>
+
        <target name="docs-download">
                <mkdir dir="${docs.dir}" />
                <property name="url" value="http://docs.jquery.com/action/render/UI/API/${release.version}/" />
 
-               <get src="${url}Draggable" dest="${docs.dir}draggable.html" />
-               <get src="${url}Droppable" dest="${docs.dir}droppable.html" />
-               <get src="${url}Resizable" dest="${docs.dir}resizable.html" />
-               <get src="${url}Selectable" dest="${docs.dir}selectable.html" />
-               <get src="${url}Sortable" dest="${docs.dir}sortable.html" />
-
-               <get src="${url}Accordion" dest="${docs.dir}accordion.html" />
-               <get src="${url}Autocomplete" dest="${docs.dir}autocomplete.html" />
-               <get src="${url}Button" dest="${docs.dir}button.html" />
-               <get src="${url}Datepicker" dest="${docs.dir}datepicker.html" />
-               <get src="${url}Dialog" dest="${docs.dir}dialog.html" />
-               <get src="${url}Progressbar" dest="${docs.dir}progressbar.html" />
-               <get src="${url}Slider" dest="${docs.dir}slider.html" />
-               <get src="${url}Tabs" dest="${docs.dir}tabs.html" />
-
-               <get src="${url}Position" dest="${docs.dir}position.html" />
-               
-               <get src="http://docs.jquery.com/action/render/UI/Effects/animate" dest="${docs.dir}animate.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/addClass" dest="${docs.dir}addClass.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/effect" dest="${docs.dir}effect.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/hide" dest="${docs.dir}hide.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/removeClass" dest="${docs.dir}removeClass.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/show" dest="${docs.dir}show.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/switchClass" dest="${docs.dir}switchClass.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/toggle" dest="${docs.dir}toggle.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/toggleClass" dest="${docs.dir}toggleClass.html" />
-               
-               
-               <get src="http://docs.jquery.com/action/render/UI/Effects/Blind" dest="${docs.dir}effect-blind.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/Clip" dest="${docs.dir}effect-clip.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/Drop" dest="${docs.dir}effect-drop.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/Explode" dest="${docs.dir}effect-explode.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/Fade" dest="${docs.dir}effect-fade.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/Fold" dest="${docs.dir}effect-fold.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/Puff" dest="${docs.dir}effect-puff.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/Slide" dest="${docs.dir}effect-slide.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/Scale" dest="${docs.dir}effect-scale.html" />
-               
-               <get src="http://docs.jquery.com/action/render/UI/Effects/Bounce" dest="${docs.dir}effect-bounce.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/Highlight" dest="${docs.dir}effect-highlight.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/Pulsate" dest="${docs.dir}effect-pulsate.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/Shake" dest="${docs.dir}effect-shake.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/Size" dest="${docs.dir}effect-size.html" />
-               <get src="http://docs.jquery.com/action/render/UI/Effects/Transfer" dest="${docs.dir}effect-transfer.html" />
+                               <parallel threadcount="8">
+
+                                               <get src="${url}Draggable" dest="${docs.dir}draggable.html" />
+                                               <get src="${url}Droppable" dest="${docs.dir}droppable.html" />
+                                               <get src="${url}Resizable" dest="${docs.dir}resizable.html" />
+                                               <get src="${url}Selectable" dest="${docs.dir}selectable.html" />
+                                               <get src="${url}Sortable" dest="${docs.dir}sortable.html" />
+
+                                               <get src="${url}Accordion" dest="${docs.dir}accordion.html" />
+                                               <get src="${url}Autocomplete" dest="${docs.dir}autocomplete.html" />
+                                               <get src="${url}Button" dest="${docs.dir}button.html" />
+                                               <get src="${url}Datepicker" dest="${docs.dir}datepicker.html" />
+                                               <get src="${url}Dialog" dest="${docs.dir}dialog.html" />
+                                               <get src="${url}Menu" dest="${docs.dir}menu.html" />
+                                               <get src="${url}Progressbar" dest="${docs.dir}progressbar.html" />
+                                               <get src="${url}Slider" dest="${docs.dir}slider.html" />
+                                               <get src="${url}Spinner" dest="${docs.dir}spinner.html" />
+                                               <get src="${url}Tooltip" dest="${docs.dir}tooltip.html" />
+                                               <get src="${url}Tabs" dest="${docs.dir}tabs.html" />
+
+                                               <get src="${url}Position" dest="${docs.dir}position.html" />
+
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/animate" dest="${docs.dir}animate.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/addClass" dest="${docs.dir}addClass.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/effect" dest="${docs.dir}effect.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/hide" dest="${docs.dir}hide.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/removeClass" dest="${docs.dir}removeClass.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/show" dest="${docs.dir}show.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/switchClass" dest="${docs.dir}switchClass.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/toggle" dest="${docs.dir}toggle.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/toggleClass" dest="${docs.dir}toggleClass.html" />
+
+
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/Blind" dest="${docs.dir}effect-blind.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/Clip" dest="${docs.dir}effect-clip.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/Drop" dest="${docs.dir}effect-drop.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/Explode" dest="${docs.dir}effect-explode.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/Fade" dest="${docs.dir}effect-fade.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/Fold" dest="${docs.dir}effect-fold.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/Puff" dest="${docs.dir}effect-puff.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/Slide" dest="${docs.dir}effect-slide.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/Scale" dest="${docs.dir}effect-scale.html" />
+
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/Bounce" dest="${docs.dir}effect-bounce.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/Highlight" dest="${docs.dir}effect-highlight.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/Pulsate" dest="${docs.dir}effect-pulsate.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/Shake" dest="${docs.dir}effect-shake.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/Size" dest="${docs.dir}effect-size.html" />
+                                               <get src="http://docs.jquery.com/action/render/UI/Effects/Transfer" dest="${docs.dir}effect-transfer.html" />
+                               </parallel>
        </target>
-       
+
        <target name="themes-download">
                <!-- to create/update query strings for the theme-file, execute this in Firebug on /download page:
                $("select option[value!=none]").map(function() { $(this).parent().val(this.value).change(); return $(this).parents("form").serialize(); }).get().join(",");
                        <sequential>
                                <get src="http://ui-dev.jquery.com/download/?@{url}" dest="${zip}" />
                                <unzip src="${zip}"
-                                      dest="${dist.dir}themes/">
-                                   <patternset>
-                                       <include name="development-bundle/themes/**"/>
-                                       <exclude name="development-bundle/themes/base/**"/>
-                                   </patternset>
+                                                       dest="${dist.dir}themes/">
+                                               <patternset>
+                                                               <include name="development-bundle/themes/**"/>
+                                                               <exclude name="development-bundle/themes/base/**"/>
+                                               </patternset>
                                        <mapper type="glob" from="development-bundle/themes/*" to="*" />
                                </unzip>
                                <delete file="${zip}" />
 
        <target name="whitespace">
                <replaceregexp match="[\t ]+$" replace="" flags="g" byline="true">
-                   <fileset dir="${src.dir}" includes="*.js"/>
-                   <fileset dir="${src.dir}/i18n/" includes="*.js"/>
+                               <fileset dir="${src.dir}" includes="*.js"/>
+                               <fileset dir="${src.dir}/i18n/" includes="*.js"/>
                </replaceregexp>
                <echo message="All trailing spaces removed." />
        </target>
-       
+
+       <target name="size" depends="copy, minify, replace-version, prepend-header" description="Report sizes of files">
+               <echo message="Collecting files to size" />
+               <mkdir dir="${size.dir}" />
+               <copy todir="${size.dir}">
+                       <fileset dir="${dist.dir}/ui" includes="*.js" />
+                       <fileset dir="${dist.dir}/ui/i18n" includes="*.js" />
+                       <fileset dir="${dist.dir}/ui/minified" includes="*.js" />
+                       <fileset dir="${dist.dir}/ui/minified/i18n" includes="*.js" />
+                       <fileset dir="${dist.dir}/themes/base" includes="*.css" />
+                       <fileset dir="${dist.dir}/themes/base/minified" includes="*.css" />
+               </copy>
+               <echo message="GZipping Minified" />
+               <parallel threadsperprocessor="2">
+                       <apply executable="gzip">
+                               <fileset dir="${size.dir}" includes="*.min.js" />
+                               <fileset dir="${size.dir}" includes="*.min.css" />
+                               <arg value="-c" />
+                               <srcfile />
+                               <redirector>
+                                       <outputmapper id="out" type="glob" from="*" to="${size.dir}/*.gz"/>
+                               </redirector>
+                       </apply>
+               </parallel>
+               <echo message="Comparing file size with previous build" />
+               <exec executable="bash">
+                       <arg value="-c" />
+                       <arg value="wc -c ${size.dir}/* | `which node nodejs` build/sizer.js" />
+               </exec>
+               <delete dir="${size.dir}" />
+       </target>
+
        <target name="cdn">
-       <delete dir="${cdndist.dir}" />
-       <mkdir dir="${cdndist.dir}" />
+               <delete dir="${cdndist.dir}" />
+               <mkdir dir="${cdndist.dir}" />
                <copy todir="${cdndist.dir}">
                        <fileset dir=".." includes="AUTHORS.txt, GPL-LICENSE.txt, MIT-LICENSE.txt, version.txt" />
                </copy>
                        <fileset dir="${cdndist.dir}" />
                </checksum>
                <for param="file">
-               <path><fileset dir="${cdndist.dir}" includes="**/" excludes="**/*.MD5" /></path>
+                               <path><fileset dir="${cdndist.dir}" includes="**/" excludes="**/*.MD5" /></path>
                        <sequential>
-                               <!-- @{file} is an absolute path, use that ugly regexes to make it relative --> 
+                               <!-- @{file} is an absolute path, use that ugly regexes to make it relative -->
                                <propertyregex override="yes" property="relativepath" input="@{file}" regexp=".+?cdn[\\/](.+)$" replace="\1"/>
                                <propertyregex override="yes" property="relativepath" input="${relativepath}" regexp="\\" replace="/" global="true" />
                                <concat destfile="${cdndist.dir}/MANIFEST" append="yes">${relativepath} </concat>
                <zip destfile="${dist.dir}/../${release.filename}-mscdn.zip">
                        <zipfileset dir="dist/${release.filename}-cdn/" />
                </zip>
-    </target>
+               </target>
 
 </project>
diff --git a/build/build/sizer.js b/build/build/sizer.js
new file mode 100644 (file)
index 0000000..3c3e4c4
--- /dev/null
@@ -0,0 +1,35 @@
+var fs = require( "fs" ),
+       stdin = process.openStdin(),
+       rsize = /(\d+).*?(jquery\S+)/g,
+       oldsizes = {},
+       sizes = {};
+
+try {
+       oldsizes = JSON.parse( fs.readFileSync(  __dirname + "/.sizecache.json", "utf8" ) );
+} catch(e) {
+       oldsizes = {};
+};
+
+stdin.on( "data" , function( chunk ) {
+       var match;
+
+       while ( match = rsize.exec( chunk ) ) {
+               sizes[ match[2] ] = parseInt( match[1], 10 );
+       }
+});
+
+function lpad( str, len, chr ) {
+       return ( Array(len+1).join( chr || " ") + str ).substr( -len );
+}
+
+stdin.on( "end", function() {
+       fs.writeFileSync( __dirname + "/.sizecache.json", JSON.stringify( sizes, true ), "utf8" );
+       for ( var key in sizes ) {
+               var diff = oldsizes[ key ] && ( sizes[ key ] - oldsizes[ key ] );
+               if ( diff > 0 ) {
+                       diff = "+" + diff;
+               }
+               console.log( "%s %s %s", lpad( sizes[ key ], 8 ), lpad( diff ? "(" + diff + ")" : "(-)", 8 ), key );
+       }
+       process.exit();
+});
\ No newline at end of file