Solution for jquery.js render blocking

  • This topic has 0 則回覆, 1 個參與人, and was last updated 4/6 04:01 by 小波.
正在檢視 0 則發表的回覆
  • 作者
    文章
    • #17116 回覆
      小波
      管理員
      Offline
      Topics: 35
      Replies: 12

      不知道有沒有用,參考文章有

      把以下程式碼加入functions.php看看吧

      <?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;
      }

正在檢視 0 則發表的回覆
回覆至:Solution for jquery.js render blocking
您的資訊: