Javascript resources should be presented to browsers after CSS, and
"after the fold" (ATF) according to the best practices:
https://developers.google.com/speed/docs/insights/mobile#PutStylesBeforeScripts
This change allows the browser to download Javascript files in
parallel, by including Javascript on the *closing* </body> tag instead
of the opening tag.
We also improve the regex to tolerate spaces before the body tag, as
some templates have (proper) indentation for the tag.
sub format (@) {
my %params=@_;
- if (! ($params{content}=~s!^(<body[^>]*>)!$1.include_javascript($params{page})!em)) {
+ if (! ($params{content}=~s!^(\s*</body[^>]*>)!include_javascript($params{page}).$1!em)) {
# no <body> tag, probably in preview mode
- $params{content}=include_javascript(undef).$params{content};
+ $params{content}=$params{content}.include_javascript(undef);
}
return $params{content};
}
sub format (@) {
my %params=@_;
- if (! ($params{content}=~s!^(<body[^>]*>)!$1.include_javascript($params{page})!em)) {
+ if (! ($params{content}=~s!^(\s*</body[^>]*>)!include_javascript($params{page}).$1!em)) {
# no <body> tag, probably in preview mode
- $params{content}=include_javascript(undef).$params{content};
+ $params{content}=$params{content}.include_javascript(undef);
}
return $params{content};
}
if ($params{content}=~s!(<div class="toggleable(?:-open)?" id="[^"]+">\s*)</div>!$1!g) {
$params{content}=~s/<div class="toggleableend">//g;
- if (! ($params{content}=~s!^(<body[^>]*>)!$1.include_javascript($params{page})!em)) {
+ if (! ($params{content}=~s!^(\s*</body[^>]*>)!include_javascript($params{page}).$1!em)) {
# no <body> tag, probably in preview mode
- $params{content}=include_javascript(undef).$params{content};
+ $params{content}=$params{content}.include_javascript(undef);
}
}
return $params{content};