使用defer
属性,而不是将所有脚本转换为async
像this 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 );