ScriptRelocator
Rack middleware to relocate JavaScript tags to the end of an HTML response body.
Only handles non-streaming text/html reponses. All other responses will be left alone.
The result should be a response that more quickly can be used to render the initial page before all
scripts have been loaded.
Given an example response
<html>
<head>
<script ... src="script1"></script>
</head>
<body>
...
<script ... >
script2
</script>
...
<script ... >
script3
</script>
...
</body>
</html>The response will be transformed to have the scripts at the end of the body tag:
<html>
<head>
</head>
<body>
...
...
...
<script ... src="script1" data-turbolinks-eval="false" ></script>
<script ... >
script2
</script>
<script ... >
script3
</script>
</body>
</html>White space around the tags are not moved, so formatting may look a bit differently.
The ordering of the script tags is preserved.
Installation
Add this line to your application's Gemfile:
gem 'script_relocator'And then execute:
$ bundle
Or install it yourself as:
$ gem install script_relocator
Usage
The gem will hook into Rails automatically.
For other Rack application use it as middleware:
use ScriptRelocator::RackTurboLinks
script tags inside the head tag are marked with the data-turbolinks-eval="false" attribute so
they are not re-evaluated when navigating using TurboLinks.
Development
After checking out the repo, run bin/setup to install dependencies. Then, run rake false to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/script_relocator.