WordPress sitenizin HTML
olarak görüntülenen sayfalarını herhangi bir eklenti kullanmadan sıkıştırmak ve daha hızlı ve daha az dosya boyutuyla yüklenmesini istiyorsanız bu paylaşacağım kodu sitenizde kullanabilirsiniz.
Kodu WordPress sitenizin function.php dosyasına ekleyerek kullanabilirsiniz.
WP_HTML_Compression
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 == 'code' || $tag == 'pre' || $tag == 'textarea'){
$raw_tag = $tag;
}else if ($tag == '/code' || $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;
}
/* class WP_HTML_Compression */
}
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');
Eğer bu iş için bir eklenti kullanayım diyorsanız sunucunuz destekliyorsa öncelikli olarak LiteSpeed Cache tavsiye ederim, ayarlarını iyi yaptığınız taktirde en iyisidir. WP Super Cache de iyidir ancak içerisinde HTML compress gibi bir özellik yoktur.
Daha fazla WordPress ipuçları için beni Twitter’da takip edebilirsiniz, kolay gelsin.