php POC推迟需要jQuery的内联JS

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php POC推迟需要jQuery的内联JS相关的知识,希望对你有一定的参考价值。

<?php
add_action('plugins_loaded','ao_defer_inline_init');

function ao_defer_inline_init() {
	if ( get_option('autoptimize_js_include_inline') != 'on' ) {
		add_filter('autoptimize_html_after_minify','ao_defer_inline_jquery',10,1);
	}
}

function ao_defer_inline_jquery( $in ) {
  if ( preg_match_all( '#<script.*>(.*)</script>#Usmi', $in, $matches, PREG_SET_ORDER ) ) {
    foreach( $matches as $match ) {
      if ( $match[1] !== '' && ( strpos( $match[1], 'jQuery' ) !== false || strpos( $match[1], '$' ) !== false ) ) {
        // inline js that requires jquery, wrap deferring JS around it to defer it. 
        $new_match = 'var aoDeferInlineJQuery=function(){'.$match[1].'}; if (document.readyState === "loading") {document.addEventListener("DOMContentLoaded", aoDeferInlineJQuery);} else {aoDeferInlineJQuery();}';
        $in = str_replace( $match[1], $new_match, $in );
      } else if ( $match[1] === '' && strpos( $match[0], 'src=' ) !== false && strpos( $match[0], 'defer' ) === false ) {
        // linked non-aggregated JS, defer it.
        $new_match = str_replace( '<script ', '<script defer ', $match[0] );
        $in = str_replace( $match[0], $new_match, $in );
      }
    }
  }
  return $in;
}

以上是关于php POC推迟需要jQuery的内联JS的主要内容,如果未能解决你的问题,请参考以下文章

php 推迟解析JS以加速WordPress网站。

php 使用jquery的x-editable插件进行Laravel 5 inplace编辑。内联和批量编辑示例。

jQuery EasyUI:确认/保存数据网格内联编辑

使用单独的脚本文件和 Rails 资产

html 推荐的例子。 jQuery推迟了

javascript jquery推迟