消除呈现阻塞javascrip

时间:2017-02-20 作者:user3205234

在通过Page Speed Insights运行Wordpress站点之后,我被告知需要消除渲染阻塞javascript。因此,我将绝大多数javascript移到了结束body标记之前,但警告仍然出现在Page Speed Insights中。

有人能建议我如何解决这个问题吗?

该网站是http://www.stewartandsonsroofingliverpool.co.uk/

提前感谢

3 个回复
SO网友:David Lee

您可以安装一个插件来异步加载JavaScript,或者尝试手动将代码添加到functions.php 异步加载脚本。

这可以让你开始,

警告

异步加载JavaScript将导致依赖关系出现多个问题:

/*function to add async to all scripts*/
function js_async_attr($tag){
  //Add async to all  scripts tags
  return str_replace( \' src\', \' async="async" src\', $tag );
}
add_filter( \'script_loader_tag\', \'js_async_attr\', 10 );
因此,您必须检查JS代码并进行更新。

SO网友:Scott

使用defer 属性,而不是将所有脚本转换为asyncthis answer suggested, 最好使用defer. 这样,就不会出现依赖项错误。

例如,您使用自定义脚本,该脚本取决于jQuery. 自从jQuery 很可能比自定义脚本大,它可能会在jQuery, 因此,您的代码的行为将不可预测。

相反,您可以使用以下代码来确保依赖关系正常工作:

function js_defer_attr( $tag ){
  // add defer to all  scripts tags
  return str_replace( \' src\', \' defer="defer" src\', $tag );
}
add_filter( \'script_loader_tag\', \'js_defer_attr\', 10 );
Here\'s more 关于defer 属性

备选方案:将脚本放置到页脚,也可以将所有脚本替换到页脚。使用以下代码(而不是上述代码)将所有脚本放置在页脚中:

function move_scripts_to_footer() {
    remove_action( \'wp_head\', \'wp_print_scripts\' );
    remove_action( \'wp_head\', \'wp_print_head_scripts\', 9 );
    remove_action( \'wp_head\', \'wp_enqueue_scripts\', 1 );
    add_action( \'wp_footer\', \'wp_print_scripts\', 5 );
    add_action( \'wp_footer\', \'wp_enqueue_scripts\', 5 );
    add_action( \'wp_footer\', \'wp_print_head_scripts\', 5 );
}
add_action( \'wp_head\', \'move_scripts_to_footer\', -1 );

SO网友:Md. Ehsanul Haque Kanan

通过使用不同的插件,可以很容易地消除渲染阻塞JavaScript,如Autoptimize. 遵循以下步骤:

安装并激活自动优化Settings > Autoptimize.Optimize JavaScript Code?“和”Optimize JavaScript Code?“选项。

  • 单击Save Changes 按钮
  • 您还可以使用W3 Total Cache插件来解决此问题。您将找到应用它的步骤right here.