Wordpress ブログをスピードアップする必要があります。Webで検索しましたが、成功しませんでした。Matt Cutt の blog のように、出力 HTML コードを 1 行 (1 行) に縮小または圧縮したいと考えています。W3TC、WP Minify、その他多数を試しましたが、結果はありませんでした。スクリプト、プラグイン、関数、または機能するものが必要です。
前もって感謝します。
Wordpress ブログをスピードアップする必要があります。Webで検索しましたが、成功しませんでした。Matt Cutt の blog のように、出力 HTML コードを 1 行 (1 行) に縮小または圧縮したいと考えています。W3TC、WP Minify、その他多数を試しましたが、結果はありませんでした。スクリプト、プラグイン、関数、または機能するものが必要です。
前もって感謝します。
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);
これは、サイトを高速化する最良の方法ではありません。テンプレートでこれを行うと、ファイルが読み取り不能になり、1% 未満の速度向上で保守が困難になります。出力を処理するプラグインを使用すると、レンダリングが遅くなります。
確実に :
プラグインが CSS および JS ファイルを適切にロードする場合、Web サイトが遅くなると言っても過言ではありません。1. 別の問題は、これらのプラグインが特定のタスクをレンダリングするために行うデータベース呼び出しの数です。2. そのプラグインがリモート サーバーからのデータをチェックして akismat や jetpack などを更新するかどうかにより、これら 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では正常に動作します:)