jacopotarantino/preloadables

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# Preloadables

Preloadables is a Rails gem exposing a set of view helpers for outputting HTML metadata related to domains, assets and pages that you would like to preload/prerender. Adding these links to your <head> can dramatically speed up your website by directing the browser to perform certain actions before they're needed.

[![Code Climate](https://codeclimate.com/github/jacopotarantino/preloadables/badges/gpa.svg)](https://codeclimate.com/github/jacopotarantino/preloadables)

[![Test Coverage](https://codeclimate.com/github/jacopotarantino/preloadables/badges/coverage.svg)](https://codeclimate.com/github/jacopotarantino/preloadables)

A word of caution: while preloading assets and prerendering pages is a brilliant technology that can dramatically speed up your website it can consume a ton of local resources and make too many network requests on connections that are bandwidth limited. I strongly encourage you to only preload assets that you're very confident the visitor will need soon and definitely only prerender a page if you're certain the visitor will go there next.


## Installation

Add `gem 'preloadables'` to your Gemfile or if you're using gemspec:

```ruby
Gem::Specification.new do |s|
  s.add_dependency 'preloadables'
end
```


## Usage

```html
<!-- in your views/layouts/layout.html.erb or maybe an _head.html.erb partial -->
<doctype html>
<html>
  <head>
    <title>my webpage</title>

    <%= preloadables_meta(@preloadables) %>

    <!-- stylesheet links, js, etc... -->
  </head>

  <body>
    <!-- site content... -->
  </body>
</html>
```

```ruby
# in your controllers/my_app/application_controller.rb controller or other route controller
module MyApp

  def show
    @preloadables = {
      domains: [
        'my.asset.subdomain.com'
      ],
      assets: [
        '/assets/js/application_helper.js',
        '/assets/stylesheets/contact_page.css'
      ],
      pages: [
        '/page_2.html'
      ]
    }

    render :show, layout: 'my_app/layout'
  end

end
```


## Methods

`preloadable_meta` is the main method and takes a hash of arguments for outputting all 3 kinds of preloading meta tags. If you prefer, you can also use one of the 3 other methods for more specific control.

### preloadable_meta

Takes a hash with properties `domains`, `assets` and `pages`(all of which are arrays) and outputs relevant meta tags for each of them.

### preload_domains_meta

Takes an array of domains to prefetch dns for.

### preload_assets_meta

Takes an array of asset urls to prefetch.

### prerender_pages_meta

Takes an array of page urls to prerender.


## Development

* Clone the repo
* Run `gem install bundler`
* Run `bundle`
* Make sure everything works by running `bundle exec rake`
* Make your changes in the tests and documentation and then the code
* Commit changes, push them up to a branch and make a pull request


## Testing

The default rake task includes running the tests so a simple `rake` on the command line with run the test suite.


## License

This project is released under a Creative Commons Attribution-ShareAlike license. This requires that you both credit the original author and open source your own project. Long live open source software!