Reduce rails startup costs (time/memory)

Currently rails takes 11 seconds and 217MB of memory to start, which we could probably improve on.

I've used derailed_benchmarks to profile startup memory, and bumbler to profile startup time.

How?

Determine if any offending gems are unnecessarily using resources. The worst of these is linguist which adds 2s to the startup time, and 89MB to startup memory. Updating to v5.0.6 of that gem did not improve memory usage. While some gems will be using memory to make things more efficient later, this isn't always the case and the mail gem was able to reduce its memory usage significantly after profiling.

Why?

Developer productivity and application performance. Workarounds like using spring or the web interface to view routes are useful, but can't always be used.

Profiling

All profiling done on GitLab CE, in development mode.

Initializer timings

gitlab|master±?» bumbler --initializers
Slow requires:
    118.86  active_record.initialize_database
    150.29  ./config/initializers/gollum.rb
    220.61  ./config/initializers/additional_headers_interceptor.rb
    251.04  ./config/initializers/8_metrics.rb
    370.01  :finisher_hook
    835.28  :load_config_initializers
   1620.04  :set_routes_reloader_hook

Bundler require timings

gitlab|master ±?» bumbler
[###########                                              ]
(140/189)                                                                                                                                                      gitaly (  60.08ms)
Slow requires:
    100.40  chronic
    100.58  charlock_holmes
    102.43  thin
    108.97  wikicloth
    113.23  oauth2
    118.10  doorkeeper
    119.57  web-console
    125.84  rspec_profiling
    130.24  factory_girl_rails
    132.97  capybara
    137.92  omniauth-ldap
    141.70  octokit
    145.54  kubeclient
    168.10  fuubar
    175.18  browser
    178.67  omniauth-auth0
    183.43  rqrcode-rails3
    205.78  sentry-raven
    207.45  spinach-rails
    220.73  virtus
    229.78  nokogiri
    238.21  rouge
    246.48  attr_encrypted
    259.22  omniauth-saml
    274.70  loofah
    293.85  devise-two-factor
    309.10  ffaker
    320.83  devise
    351.82  carrierwave
    397.80  hamlit
    401.44  grape
    425.12  gon
    528.43  sprockets
    549.85  sass-rails
    631.13  pry-byebug
    872.17  rails
   2086.43  linguist

Memory usage

gitlab|master ±?» CUT_OFF=4 bundle exec derailed bundle:mem
TOP: 217.5156 MiB
  linguist: 89.1602 MiB
    linguist/language: 77.9336 MiB (Also required by: linguist/lazy_blob)
    linguist/blob_helper: 10.6797 MiB (Also required by: linguist/file_blob, linguist/blob, and 2 others)
      mime/types: 9.5781 MiB (Also required by: carrierwave/sanitized_file, /Users/jedwardsjones/.rbenv/versions/2.3.3/lib/ruby/gems/2.3.0/gems/rest-client-2.0.0/lib/restclient/request)
  rails/all: 20.8984 MiB
    sprockets/railtie: 13.5234 MiB (Also required by: sass/rails/railtie)
      sprockets/rails/context: 9.582 MiB
        action_view/helpers: 9.5195 MiB (Also required by: action_view/base)
          action_view/helpers/form_helper: 7.1094 MiB (Also required by: action_view/helpers/form_options_helper)
            action_view/helpers/form_tag_helper: 6.5898 MiB
              action_view/helpers/text_helper: 6.0859 MiB
                action_view/helpers/sanitize_helper: 5.9023 MiB
                  rails-html-sanitizer: 5.8281 MiB
                    loofah: 5.5586 MiB (Also required by: TOP)
                      nokogiri: 4.7344 MiB (Also required by: onelogin/ruby-saml/saml_message, xml_security, and 10 others)
    rails: 4.0625 MiB (Also required by: active_record/railtie, active_model/railtie, and 14 others)
  rouge: 16.1953 MiB
  hamlit: 15.5195 MiB
    hamlit/template: 10.4531 MiB
      haml: 10.2734 MiB (Also required by: tilt/haml)
        haml/engine: 9.0313 MiB
          haml/buffer: 7.6289 MiB
    hamlit/engine: 4.9727 MiB (Also required by: hamlit/template)
  carrierwave: 11.0234 MiB
    carrierwave/storage: 6.9727 MiB
  grape: 8.4648 MiB
  gon: 5.0508 MiB
  devise: 4.4883 MiB (Also required by: devise-two-factor)
  sass-rails: 4.0781 MiB
    sass/rails: 4.0742 MiB