append javascript after CSS

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.
master
Antoine Beaupré 2017-11-06 14:15:22 -05:00 committed by Simon McVittie
parent aa063aeb33
commit d16e34c736
3 changed files with 6 additions and 6 deletions

View File

@ -60,9 +60,9 @@ sub pagetemplate (@) {
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};
}

View File

@ -26,9 +26,9 @@ sub getsetup () {
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};
}

View File

@ -68,9 +68,9 @@ sub format (@) {
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};