私は、Googleページの速度と同じように、phpページのhtml出力を縮小できるphpスクリプトまたはクラスを探しています。
これどうやってするの?
<pre>
や<code>
タグでは機能しません。ただし、<script>
通常は外部、またはインラインである必要がありますが;
、厳密に使用することで機能します。@Bradを壊す他のタグはどれですか?他の人のことは考えられませんでした。私は前のコメントの前に素早く汚い方法を追加するべきでした。
私は、Googleページの速度と同じように、phpページのhtml出力を縮小できるphpスクリプトまたはクラスを探しています。
これどうやってするの?
<pre>
や<code>
タグでは機能しません。ただし、<script>
通常は外部、またはインラインである必要がありますが;
、厳密に使用することで機能します。@Bradを壊す他のタグはどれですか?他の人のことは考えられませんでした。私は前のコメントの前に素早く汚い方法を追加するべきでした。
回答:
Javascript / CSSファイルを縮小するには、次のリンクを検討してください。https://github.com/mrclay/minify
ApacheにGZipでHTMLを配信するように指示します。これにより、応答サイズが約70%削減されます。(Apacheを使用する場合、gzipを構成するモジュールはバージョンによって異なります。Apache1.3はmod_gzipを使用し、Apache 2.xはmod_deflateを使用します。)
Accept-Encoding:gzip、deflate
コンテンツのエンコード:gzip
次のスニペットを使用して、ヘルプob_startのバッファでHTMLから空白を削除します。
<?php
function sanitize_output($buffer) {
$search = array(
'/\>[^\S ]+/s', // strip whitespaces after tags, except space
'/[^\S ]+\</s', // strip whitespaces before tags, except space
'/(\s)+/s', // shorten multiple whitespace sequences
'/<!--(.|\s)*?-->/' // Remove HTML comments
);
$replace = array(
'>',
'<',
'\\1',
''
);
$buffer = preg_replace($search, $replace, $buffer);
return $buffer;
}
ob_start("sanitize_output");
?>
$content = \Minify_HTML::minify($content);
インラインコードのjs / cssミニファイアにコールバックを追加することもできます)。github.com/mrclay/minify/blob/master/min/lib/Minify/HTML.php
<script>
ない;
、または使用するコメントがあるインラインJavaScript(つまり、タグ内)を壊します//
適切に実行したい場合は、gzipをオンにします。次のようなこともできます:
$this->output = preg_replace(
array(
'/ {2,}/',
'/<!--.*?-->|\t|(?:\r?\n[ \t]*)+/s'
),
array(
' ',
''
),
$this->output
);
これにより、htmlが1行になり、タブ、改行、コメントがなくなるため、ページサイズの約30%が削除されます。走行距離は異なる場合があります
preg_replace()
上記のすべてのソリューションには、単一行コメント、条件付きコメント、およびその他の落とし穴の問題があります。十分にテストされたMinifyプロジェクトを利用することをお勧めします最初から独自の正規表現を作成するのではなくします。
私の場合は、PHPページの上部に次のコードを配置して縮小します。
function sanitize_output($buffer) {
require_once('min/lib/Minify/HTML.php');
require_once('min/lib/Minify/CSS.php');
require_once('min/lib/JSMin.php');
$buffer = Minify_HTML::minify($buffer, array(
'cssMinifier' => array('Minify_CSS', 'minify'),
'jsMinifier' => array('JSMin', 'minify')
));
return $buffer;
}
ob_start('sanitize_output');
私はいくつかの縮小版を試してみましたが、それらは削除が少なすぎるか多すぎます。
このコードは、冗長な空白スペースとオプションのHTML(終了)タグを削除します。また、安全に再生され、HTML、JS、CSSを破壊する可能性のあるものは削除されません。
また、コードはZend Frameworkでそれを行う方法を示しています。
class Application_Plugin_Minify extends Zend_Controller_Plugin_Abstract {
public function dispatchLoopShutdown() {
$response = $this->getResponse();
$body = $response->getBody(); //actually returns both HEAD and BODY
//remove redundant (white-space) characters
$replace = array(
//remove tabs before and after HTML tags
'/\>[^\S ]+/s' => '>',
'/[^\S ]+\</s' => '<',
//shorten multiple whitespace sequences; keep new-line characters because they matter in JS!!!
'/([\t ])+/s' => ' ',
//remove leading and trailing spaces
'/^([\t ])+/m' => '',
'/([\t ])+$/m' => '',
// remove JS line comments (simple only); do NOT remove lines containing URL (e.g. 'src="http://server.com/"')!!!
'~//[a-zA-Z0-9 ]+$~m' => '',
//remove empty lines (sequence of line-end and white-space characters)
'/[\r\n]+([\t ]?[\r\n]+)+/s' => "\n",
//remove empty lines (between HTML tags); cannot remove just any line-end characters because in inline JS they can matter!
'/\>[\r\n\t ]+\</s' => '><',
//remove "empty" lines containing only JS's block end character; join with next line (e.g. "}\n}\n</script>" --> "}}</script>"
'/}[\r\n\t ]+/s' => '}',
'/}[\r\n\t ]+,[\r\n\t ]+/s' => '},',
//remove new-line after JS's function or condition start; join with next line
'/\)[\r\n\t ]?{[\r\n\t ]+/s' => '){',
'/,[\r\n\t ]?{[\r\n\t ]+/s' => ',{',
//remove new-line after JS's line end (only most obvious and safe cases)
'/\),[\r\n\t ]+/s' => '),',
//remove quotes from HTML attributes that does not contain spaces; keep quotes around URLs!
'~([\r\n\t ])?([a-zA-Z0-9]+)="([a-zA-Z0-9_/\\-]+)"([\r\n\t ])?~s' => '$1$2=$3$4', //$1 and $4 insert first white-space character found before/after attribute
);
$body = preg_replace(array_keys($replace), array_values($replace), $body);
//remove optional ending tags (see http://www.w3.org/TR/html5/syntax.html#syntax-tag-omission )
$remove = array(
'</option>', '</li>', '</dt>', '</dd>', '</tr>', '</th>', '</td>'
);
$body = str_ireplace($remove, '', $body);
$response->setBody($body);
}
}
ただし、gZip圧縮を使用すると、コードが大幅に圧縮されるため、圧縮によって圧縮が大幅に削減されるため、圧縮とgZipを組み合わせても意味がありません。
これが私の結果です(3Gネットワーク経由でダウンロード)。
Original HTML: 150kB 180ms download
gZipped HTML: 24kB 40ms
minified HTML: 120kB 150ms download + 150ms minification
min+gzip HTML: 22kB 30ms download + 150ms minification
この仕事は私にとって。
function Minify_Html($Html)
{
$Search = array(
'/(\n|^)(\x20+|\t)/',
'/(\n|^)\/\/(.*?)(\n|$)/',
'/\n/',
'/\<\!--.*?-->/',
'/(\x20+|\t)/', # Delete multispace (Without \n)
'/\>\s+\</', # strip whitespaces between tags
'/(\"|\')\s+\>/', # strip whitespaces between quotation ("') and end tags
'/=\s+(\"|\')/'); # strip whitespaces between = "'
$Replace = array(
"\n",
"\n",
" ",
"",
" ",
"><",
"$1>",
"=$1");
$Html = preg_replace($Search,$Replace,$Html);
return $Html;
}
ドキュメントルートの外部にPHPファイルを作成します。ドキュメントルートが
/var/www/html/
その1レベル上のminify.phpという名前のファイルを作成します。
/var/www/minify.php
次のPHPコードをコピーして貼り付けます
<?php function minify_output($buffer){ $search = array('/\>[^\S ]+/s','/[^\S ]+\</s','/(\s)+/s'); $replace = array('>','<','\\1'); if (preg_match("/\<html/i",$buffer) == 1 && preg_match("/\<\/html\>/i",$buffer) == 1) { $buffer = preg_replace($search, $replace, $buffer); } return $buffer; } ob_start("minify_output");?>
minify.phpファイルを保存し、php.iniファイルを開きます。次のオプションの専用サーバー/ VPS検索の場合は、カスタムphp.iniを使用した共有ホスティングに追加します。
auto_prepend_file = /var/www/minify.php
リファレンス:http : //websistent.com/how-to-use-php-to-minify-html-output/
あなたはこのクラスのセットをチェックアウトすることができます:https : //code.google.com/p/minify/source/browse/?name=master#git%2Fmin%2Flib%2FMinify //code.google.com/p/minify/source/browse/?name=master#git%2Fmin%2Flib%2FMinify、あなたはhtml / css / js minificationを見つけるでしょうクラスがあります。
これを試すこともできます: http //code.google.com/p/htmlcompressor/
幸運を :)
HTML TIDYを調べることができます- //uk.php.net/tidy
これはPHPモジュールとしてインストールでき、完全に有効なHTML / XHTMLマークアップを出力しながら、(正しく、安全に)空白やその他のすべての厄介さを取り除きます。また、コードをクリーンアップします。これは、最初から有効なコードをどれだけ上手に書いているかに応じて、すばらしいことでもひどいことでもあります;-)
さらに、ファイルの先頭で次のコードを使用して出力をgzipできます。
ob_start('ob_gzhandler');
phpinfo()
...少なくともzlib
、を使用できるようにインストールする必要がありますob_gzhandler
。
if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start("ob_gzhandler"); else ob_start();
よね?
else ob_start()
パーツは本当に必要ありません。gzipチェックも... ob_gzhandler
ブラウザが内部で圧縮方法をサポートしているかどうかを検出します。単に持つだけでob_start('ob_gzhandler');
十分です。
まず第一に、gzipはHtml Minifier以外にも役立ちます。
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
2番目:gzip + Html Minificationを使用すると、ファイルサイズを大幅に削減できます!!!
このPHPのHtmlMinifierを作成しました。
composer:から取得できますcomposer require arjanschouten/htmlminifier dev-master
。
Laravelサービスプロバイダーがあります。Laravelを使用していない場合は、PHPから使用できます。
// create a minify context which will be used through the minification process
$context = new MinifyContext(new PlaceholderContainer());
// save the html contents in the context
$context->setContents('<html>My html...</html>');
$minify = new Minify();
// start the process and give the context with it as parameter
$context = $minify->run($context);
// $context now contains the minified version
$minifiedContents = $context->getContents();
ご覧のとおり、ここで多くのことを拡張でき、さまざまなオプションを渡すことができます。Readmeを確認する使用可能なすべてのオプションををてください。
このHtmlMinifierは完全で安全です。縮小プロセスには3つのステップが必要です。
ビューの出力をキャッシュすることをお勧めします。縮小プロセスは1回限りのプロセスでなければなりません。または、例えば間隔ベースでそれを行います。
現時点では明確なベンチマークは作成されていません。ただし、縮小版では、マークアップに基づいてページサイズを5〜25%削減できます。
あなたがあなた自身の戦略を追加したいなら、あなたはaddPlaceholder
とaddMinifier
メソッドを使うことができます。
require __DIR__ . '/vendor/autoload.php';
。このファイルをインクルードすることだけが必要です。これは作曲家によって生成されます!
私が持っているのGitHub要旨は縮小化HTML、CSSやJSファイル→にPHPの関数が含まれていhttps://gist.github.com/taufik-nurrohman/d7b310dea3b33e4732c0
ここでは、出力バッファを使用してHTML出力をその場で縮小する方法を示します。
<?php
include 'path/to/php-html-css-js-minifier.php';
ob_start('minify_html');
?>
<!-- HTML code goes here ... -->
<?php echo ob_get_clean(); ?>
アンドリューに感謝します。これがcakePHPでこれを使用するために何をしたかです:
次のように、ケーキのビュー/ヘルパーにMinifyCodeHelper.phpを作成します。
App::import('Vendor/min/lib/Minify/', 'HTML');
App::import('Vendor/min/lib/Minify/', 'CommentPreserver');
App::import('Vendor/min/lib/Minify/CSS/', 'Compressor');
App::import('Vendor/min/lib/Minify/', 'CSS');
App::import('Vendor/min/lib/', 'JSMin');
class MinifyCodeHelper extends Helper {
public function afterRenderFile($file, $data) {
if( Configure::read('debug') < 1 ) //works only e production mode
$data = Minify_HTML::minify($data, array(
'cssMinifier' => array('Minify_CSS', 'minify'),
'jsMinifier' => array('JSMin', 'minify')
));
return $data;
}
}
AppControllerで私のヘルパーを有効にしました
public $ helpers = array( 'Html'、 '...'、 'MinifyCode');
5 ...ほら!
私の結論:サーバーでapacheのdeflateおよびheadersモジュールが無効になっている場合、圧縮のリクエストでサイズが21%減少し、0.35sプラスされます(この数値は私の場合です)。
しかし、Apacheのモジュールを有効にした場合、圧縮された応答に大きな違いはなく(私には1.3%)、圧縮にかかる時間はsamne(私に0.3秒)です。
それで...なぜ私はそれをしたのですか?'私のプロジェクトのドキュメントがコメント(php、css、js)に含まれているので、私の最終ユーザーはこれを見る必要はありません;)
あなたが好きなだけでなくテストされたJava minifier使用することができますHTMLCompressorを使用してそれを呼び出すことによってpassthru
(exec
)。
を使用してコンソールをリダイレクトすることを忘れないでください2>&1
ただし、速度が問題になる場合、これは役に立たない場合があります。静的なphp出力に使用します
ob_start(function($b){return preg_replace(['/\>[^\S ]+/s','/[^\S ]+\</s','/(\s)+/s'],['>','<','\\1'],$b);});