require 'rest-client' def optimize css css = css.dup # Remove whitespace around CSS selectors: a + b, a > b, etc. css.gsub! ' + ', '+' css.gsub! ' > ', '>' # Remove whitespace inside parentheses: ( foo ) css.gsub! '( ', '(' css.gsub! ' )', ')' # Remove leading '0.' from CSS values css.gsub! ':0.', ':.' css.gsub! ' 0.', ' .' css.gsub! ',0.', ',.' css.gsub! '(0.', '(.' # Ensure hex colors are output in shorthand notation: #fff css.gsub! /\#([0-9a-f])\1([0-9a-f])\2([0-9a-f])\3\b/, '#\1\2\3' # Remove domain from URLs like //xx.wikipedia.org/w/load.php?... css.gsub! '//en.wikipedia.org', '' # Remove whitespace and ids from embedded SVG files css.gsub! /url\(data:image\/svg\+xml,(.+)\)/ do data = $1.dup data.gsub! '%0A', '%20' data.gsub! /(%20)+/, '%20' data.gsub! /(%20)+/, '%20' data.gsub! '%3E%20%3C', '%3E%3C' data.gsub! /%20id%3D%22(.+?)%22/, '' data end css end def test text pipe = IO.popen(['gzip'], 'rb+') pipe.write(text) pipe.close_write() gzipped = pipe.read() "len: #{text.length} gzip: #{gzipped.length}" end samples = [ 'https://en.wikipedia.org/w/load.php?modules=oojs-ui.styles%7Coojs-ui.styles.icons%7Coojs-ui.styles.indicators%7Coojs-ui.styles.textures&only=styles', 'https://en.wikipedia.org/w/load.php?modules=ext.cite.styles%7Cext.gadget.DRN-wizard%2CReferenceTooltips%2CWatchlistBase%2CWatchlistGreenIndicators%2Ccharinsert%2Cfeatured-articles-links%2CrefToolbar%2Cswitcher%2Cteahouse%7Cext.tmh.thumbnail.styles%7Cext.uls.nojs%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediaBadges%7Cmediawiki.legacy.commonPrint%2Cshared%7Cmediawiki.raggett%2CsectionAnchor%7Cmediawiki.skinning.interface%7Cskins.vector.styles%7Cwikibase.client.init&only=styles', ] samples.each{|url| puts url text = RestClient.get(url) optim = optimize text puts "currently: #{test text}" puts "optimized: #{test optim}" }