- July 9, 2010
- Not specified
- 1 (after 1 ratings)
This middleware makes the page load faster because it moves all tags <script> to the end of document.
When a tag <script> loads, it blocks parallel loading, so, the best practice is load them after load CSS and images.
To use it, just put in a file and add to your setting MIDDLEWARE_CLASSES.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
import re FIND_SCRIPT_TAGS = re.compile(r'(<script .*?>.*?</script>)', re.DOTALL) class ScriptsAtBottomMiddleware(object): """Finds all tags <script> at the HTML response and move to the end of the document, before tag </html>. This makes the page load faster, because <script> blocks parallel loading. Read more about this at: - http://developer.yahoo.com/performance/rules.html#js_bottom - http://code.google.com/intl/pt-BR/speed/page-speed/docs/rtt.html#PutStylesBeforeScripts """ def process_response(self, request, response): if response['content-type'][:9] == 'text/html': # Find scripts tags with src f = FIND_SCRIPT_TAGS.findall(response.content) # Remove the tags found for tag in f: response.content = response.content.replace(tag, '') # Insert the tags found at the bottom pos = response.content.find('</html>') response.content = response.content[:pos] + '\n'.join(f) + '\n' + response.content[pos:] return response
More like this
- Stuff by NixonDash 1 month ago
- Add custom fields to the built-in Group model by jmoppel 3 months ago
- Month / Year SelectDateWidget based on django SelectDateWidget by pierreben 6 months, 2 weeks ago
- Python Django CRUD Example Tutorial by tuts_station 7 months ago
- Browser-native date input field by kytta 8 months, 2 weeks ago
Careful! You're making various copies of the response's content string! I think you might be trading server performance for client performance.
Wouldn't it be simples/more efficient to have a delayed script tag?
Please login first before commenting.