- Author:
- marinho
- Posted:
- July 9, 2010
- Language:
- Python
- Version:
- Not specified
- Score:
- 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
- Template tag - list punctuation for a list of items by shapiromatron 8 months, 4 weeks ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 9 months ago
- Serializer factory with Django Rest Framework by julio 1 year, 3 months ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 4 months ago
- Help text hyperlinks by sa2812 1 year, 5 months ago
Comments
我要拜你为师。
#
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.