deadweight

Deadweight is RCov for CSS, kind of. Given a set of stylesheets and a set of URLs, it determines which selectors are actually used and reports which can be “safely” deleted.

Screencast!

Ryan Bates has worked his magic once again. Head over here for an excellent introduction to deadweight: railscasts.com/episodes/180-finding-unused-css

A Simple Example

# lib/tasks/deadweight.rake

require 'deadweight'

desc "run Deadweight (script/server needs to be running)"
task :deadweight do
  dw = Deadweight.new
  dw.stylesheets = %w( /stylesheets/style.css )
  dw.pages = %w( / /page/1 /about )
  puts dw.run
end

This will output all unused rules, one per line.

Alternately, you can run it from the command-line:

$ deadweight -s styles.css -s ie.css index.html about.html

You can pipe in CSS rules from STDIN:

$ cat styles.css | deadweight index.html

And you can use it as an HTTP proxy:

$ deadweight -l deadweight.log -s styles.css -w http://github.com/ -P

How You Install It

gem sources -a http://gems.github.com
sudo gem install aanand-deadweight

Things to Note

  • By default, it looks at localhost:3000.

  • It’s completely dumb about any classes, IDs or tags that are only added by your Javascript layer, but you can filter them out by setting ignore_selectors.

  • You can optionally tell it to use Mechanize, and set up more complicated targets for scraping by specifying them as Procs.

  • There is experimental support for Lyndon (github.com/defunkt/lyndon) with -L

A More Complex Example, In Light of All That

# lib/tasks/deadweight.rake

require 'deadweight'

desc "run Deadweight on staging server"
task :deadweight do
  dw = Deadweight.new

  dw.mechanize = true

  dw.root = 'http://staging.example.com'

  dw.stylesheets = %w( /stylesheets/style.css )

  dw.pages = %w( / /page/1 /about )

  dw.pages << proc {
    fetch('/login')
    form = agent.page.forms.first
    form.username = 'username'
    form.password = 'password'
    agent.submit(form)
    fetch('/secret-page')
  }

  dw.ignore_selectors = /hover|lightbox|superimposed_kittens/

  puts dw.run
end

Copyright © 2009 Aanand Prasad. See LICENSE for details.