From 61277d2864b00c5206d0fdcefc67f7497663a012 Mon Sep 17 00:00:00 2001 From: Corey Frang Date: Mon, 19 Sep 2011 15:27:43 -0400 Subject: [PATCH] Landing pull request 511. Adding a little Makefile jQuery sizing utility to easily see differences in size between makes. Fixes #10308. More Details: - https://github.com/jquery/jquery/pull/511 --- .gitignore | 1 + Makefile | 12 ++++++++++-- build/sizer.js | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 build/sizer.js diff --git a/.gitignore b/.gitignore index 6cd547974..6ee92f269 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ dist *.patch /*.html .DS_Store +build/.sizecache.json diff --git a/Makefile b/Makefile index 06cee5de3..59f63bdd9 100644 --- a/Makefile +++ b/Makefile @@ -44,7 +44,7 @@ DATE=$(shell git log -1 --pretty=format:%ad) all: update_submodules core -core: jquery min lint +core: jquery min lint size @@echo "jQuery build complete." ${DIST_DIR}: @@ -73,6 +73,15 @@ lint: jquery echo "You must have NodeJS installed in order to test jQuery against JSLint."; \ fi +size: jquery min + @@if test ! -z ${JS_ENGINE}; then \ + gzip -c ${JQ_MIN} > ${JQ_MIN}.gz; \ + wc -c ${JQ} ${JQ_MIN} ${JQ_MIN}.gz | ${JS_ENGINE} ${BUILD_DIR}/sizer.js; \ + rm ${JQ_MIN}.gz; \ + else \ + echo "You must have NodeJS installed in order to size jQuery."; \ + fi + min: jquery ${JQ_MIN} ${JQ_MIN}: ${JQ} @@ -84,7 +93,6 @@ ${JQ_MIN}: ${JQ} else \ echo "You must have NodeJS installed in order to minify jQuery."; \ fi - clean: @@echo "Removing Distribution directory:" ${DIST_DIR} diff --git a/build/sizer.js b/build/sizer.js new file mode 100644 index 000000000..2372b5fd3 --- /dev/null +++ b/build/sizer.js @@ -0,0 +1,36 @@ +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() { + console.log( "jQuery Size - compared to last make" ); + 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