-2

Wordpress ブログをスピードアップする必要があります。Webで検索しましたが、成功しませんでした。Matt Cutt の blog のように、出力 HTML コードを 1 行 (1 行) に縮小または圧縮したいと考えています。W3TC、WP Minify、その他多数を試しましたが、結果はありませんでした。スクリプト、プラグイン、関数、または機能するものが必要です。

前もって感謝します。

4

5 に答える 5

1

WordPress.StackExchange.com で提供する 1 つのソリューションを次に示します。

https://wordpress.stackexchange.com/a/227896/82023

一般に、index.php には、正規表現を使用して HTML を圧縮するコードを 1 つ配置できます。私はこれを多くの場所で作成して使用し、正常に動作します。完全なインラインではありませんが、それは仕事です。

<?php
/**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */

/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define('WP_USE_THEMES', true);

/** Manualy compress WP by Ivijan-Stefan Stipic  **/

function compressorCF($str)
{
    // clear HEAD
    $str = preg_replace_callback('/(?=<head(.*?)>)(.*?)(?<=<\/head>)/s',
    function($matches) {
        return preg_replace(array(
            /* Fix HTML */
            '/\>[^\S ]+/s',  // strip whitespaces after tags, except space
            '/[^\S ]+\</s',  // strip whitespaces before tags, except space
            '/\>\s+\</',    // strip whitespaces between tags
        ), array(
            /* Fix HTML */
            '>',  // strip whitespaces after tags, except space
            '<',  // strip whitespaces before tags, except space
            '><',   // strip whitespaces between tags
        ), $matches[2]);
    }, $str);
    // clear BODY
    $str = preg_replace_callback('/(?=<body(.*?)>)(.*?)(?<=<\/body>)/s',
    function($matches) {
        return preg_replace(array(
            '/<!--(.*?)-->/s', // delete HTML comments
            '@\/\*(.*?)\*\/@s', // delete JavaScript comments
            /* Fix HTML */
            '/\>[^\S ]+/s',  // strip whitespaces after tags, except space
            '/[^\S ]+\</s',  // strip whitespaces before tags, except space
            '/\>\s+\</',    // strip whitespaces between tags
        ), array(
            '', // delete HTML comments
            '', // delete JavaScript comments
            /* Fix HTML */
            '>',  // strip whitespaces after tags, except space
            '<',  // strip whitespaces before tags, except space
            '><',   // strip whitespaces between tags
        ), $matches[2]);
    }, $str);
    return $str;
}

/** Loads the WordPress Environment and Template */
ob_start();
    require_once( dirname( __FILE__ ) . '/wp-blog-header.php' );
$content=ob_get_clean();
//echo $content;
echo compressorCF($content); 
于 2016-12-14T17:31:16.220 に答える
1

これは、サイトを高速化する最良の方法ではありません。テンプレートでこれを行うと、ファイルが読み取り不能になり、1% 未満の速度向上で保守が困難になります。出力を処理するプラグインを使用すると、レンダリングが遅くなります。

確実に :

  • できるだけ少ないプラグインを使用します。たとえば、プラグインを使用するよりも追跡コード (Google アナリティクスなど) を footer.php にコピーする方がはるかに高速です。
  • サーバー上にある CSS と JS と適切に圧縮されたファイルをコンパイル、クリーンアップ、縮小化しました。
  • https://developers.google.com/speed/libraries/devguideの JQuery のように、CDN にあるすべてのファイルに CDN を使用します。
  • サーバーに mod_expire を配置し、 .htaccess を使用してメディア ファイルの有効期限をはるか先の日付に設定します。これにより、ブラウザーはファイルが変更されたかどうかをチェックできなくなります (ネットワーク トラフィック分析で表示される 200 のステータス コードすべて)。
  • WP スーパーキャッシュまたは同様のプラグインを使用してコンテンツをキャッシュする
  • 十分なメモリを備えた APC キャッシュをインストールします (単一の WP インストールでは少なくとも 32M)。
于 2012-09-23T18:31:55.867 に答える
0

プラグインが CSS および JS ファイルを適切にロードする場合、Web サイトが遅くなると言っても過言ではありません。1. 別の問題は、これらのプラグインが特定のタスクをレンダリングするために行うデータベース呼び出しの数です。2. そのプラグインがリモート サーバーからのデータをチェックして akismat や jetpack などを更新するかどうかにより、これら 2 つのプラグインが最もリソースを消費します。

  1. 適切にコード化されたテーマは、Web サイトを適切にロードするのに役立ちます。私自身のサイト ( http://www.binarynote.com ) のように、getmetrix.com のスコアは 99/100 です。
于 2014-06-30T04:00:22.333 に答える
-2

次のコードを function.php に追加します。

class WP_HTML_Compression
{
  // Settings
  protected $compress_css = true;
  protected $compress_js = true;
  protected $info_comment = true;
  protected $remove_comments = true;
  // Variables
  protected $html;

  public function __construct($html)
  {
    if (!empty($html))
    {
      $this->parseHTML($html);
    }
  }

  public function __toString()
  {
    return $this->html;
  }

  protected function bottomComment($raw, $compressed)
  {
    $raw = strlen($raw);
    $compressed = strlen($compressed);
    $savings = ($raw-$compressed) / $raw * 100;
    $savings = round($savings, 2);
    return '<!--HTML compressed, size saved '.$savings.'%. From '.$raw.' bytes, now '.$compressed.' bytes-->';
  }

  protected function minifyHTML($html)
  {
    $pattern = '/<(?<script>script).*?<\/script\s*>|<(?<style>style).*?<\/style\s*>|<!(?<comment>--).*?-->|<(?<tag>[\/\w.:-]*)(?:".*?"|\'.*?\'|[^\'">]+)*>|(?<text>((<[^!\/\w.:-])?[^<]*)+)|/si';
    preg_match_all($pattern, $html, $matches, PREG_SET_ORDER);
    $overriding = false;
    $raw_tag = false;
    // Variable reused for output
    $html = '';
    foreach ($matches as $token)
    {
      $tag = (isset($token['tag'])) ? strtolower($token['tag']) : null;
      $content = $token[0];
      if (is_null($tag))
      {
        if ( !empty($token['script']) )
        {
          $strip = $this->compress_js;
        }
        else if ( !empty($token['style']) )
        {
          $strip = $this->compress_css;
        }
        else if ($content == '<!--wp-html-compression no compression-->')
        {
          $overriding = !$overriding;
          // Don't print the comment
          continue;
        }
        else if ($this->remove_comments)
        {
          if (!$overriding && $raw_tag != 'textarea')
          {
            // Remove any HTML comments, except MSIE conditional comments
            $content = preg_replace('/<!--(?!\s*(?:\[if [^\]]+]|<!|>))(?:(?!-->).)*-->/s', '', $content);
          }
        }
      }
      else
      {
        if ($tag == 'pre' || $tag == 'textarea')
        {
          $raw_tag = $tag;
        }
        else if ($tag == '/pre' || $tag == '/textarea')
        {
          $raw_tag = false;
        }
        else
        {
          if ($raw_tag || $overriding)
          {
            $strip = false;
          }
          else
          {
            $strip = true;
            // Remove any empty attributes, except:
            // action, alt, content, src
            $content = preg_replace('/(\s+)(\w++(?<!\baction|\balt|\bcontent|\bsrc)="")/', '$1', $content);
            // Remove any space before the end of self-closing XHTML tags
            // JavaScript excluded
            $content = str_replace(' />', '/>', $content);
          }
        }
      }
      if ($strip)
      {
        $content = $this->removeWhiteSpace($content);
      }
      $html .= $content;
    }
    return $html;
  }

  public function parseHTML($html)
  {
    $this->html = $this->minifyHTML($html);
    if ($this->info_comment)
    {
      $this->html .= "\n" . $this->bottomComment($html, $this->html);
    }
  }

  protected function removeWhiteSpace($str)
  {
    $str = str_replace("\t", ' ', $str);
    $str = str_replace("\n", '', $str);
    $str = str_replace("\r", '', $str);
    while (stristr($str, ' '))
    {
      $str = str_replace(' ', ' ', $str);
    }
    return $str;
  }
}


function wp_html_compression_finish($html)
{
  return new WP_HTML_Compression($html);
}


function wp_html_compression_start()
{
  ob_start('wp_html_compression_finish');
}


add_action('get_header', 'wp_html_compression_start');

https://photogrist.comでは正常に動作します:)

于 2015-04-29T13:12:07.747 に答える