CodeIgniter kendi çekirdek kodlarının değiştirilmeden müdahalesi için HOOK (kanca) opsiyonu düşünülmüştür. Böylece CodeIgniter kodlarını değiştirmeden müdahale etmemiz olanağı tanınmıştır. Bu opsiyonu, CodeIgniter çalışmasından önce veya sonra kanca atarak kendi kodlarımızla müdahale etme olanağı olarak düşünebiliriz.
Bu müdahalenin bir kaç adım için yapılmasına olanak verilmiştir. Bunlar:
- Controller sistemi yüklenmeden önce
- Controller dosyası yüklenmeden önce
- Controller konstrüktör methodu yüklenmeden önce
- Controller dosyası yüklendikten sonra
- Ekrana içerik basmadan önce
- Cache kullanılması durumunda ekrana içerik basmadan önce
- İskele (scaffolding) yüklenmeden önce
- Controller sistemi sona erdikten sonra
Amacımız ekrana basmadan önce HTML kodlarınında bulunan satırları, boşlukları almak kısacası HTML çıktısını sıkıştırmak olsun. Bunun için CodeIGniter`ın Ekrana içerik basmadan önce opsiyonunu kullanacağız. Önce application/hooks dizini altına kopyalayacağımız compress.php isimli dosyamızı yazalım:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
function compress()
{
$CI =& get_instance();
$buffer = $CI->output->get_output();
$search = array(
'/\>[^\S ]+/s', //strip whitespaces after tags, except space
'/[^\S ]+\</s', //strip whitespaces before tags, except space
'/(\s)+/s', // shorten multiple whitespace sequences
'#(?://)?<!\[CDATA\[(.*?)(?://)?\]\]>#s' //CDATA haric olsun
);
$replace = array(
'>',
'<',
'\\1',
"//<![CDATA[\n".'\1'."\n//]]>"
);
$buffer = preg_replace($search, $replace, $buffer);
$CI->output->set_output($buffer);
$CI->output->_display();
}
Bu dosyada CodeIgniter kodlarını almak için kullandığımız get_instance() metodunun ardından ekran görüntüsünü $buffer değişkenine alıyoruz. Daha sonra regular expression cümlelerimiz ile Javascript kodlarının çalışmasını engellemeden, tüm gereksiz satırları ve boşlukları alarak ekran çıktısını temizliyor. Ardından output sınıfında set_output() fonsiyonuyla ile $buffer değişkenini hafızaya alıyor, sonra da display() fonksiyonuyla ekrana yazdırıyoruz.
Bu kod parçasında dikkat etmemiz gereken husus: HTML sayfamız içinde Javascript kodlarının başlangıç ve bitiş satırlarını aşağıdaki gibi işaretlememiz gerektiğidir. Javascript kodları içine `//´ işareti ile görüşlerimizi yazdıysak bunları da kaldırmamız gerekir. Çünkü, satırlar kesilip de kodlar tek bir satıra taşınırsa `//´ işaretinden sonraki kodlar çalışmayacaktır.
//<![CDATA[ Javascript kodlarımız buraya yazılıyor. Dikkat! Görüşlerimizi kod içine eklenmemesi gerekir. //]]>
Bir sonraki adımda ise application/config dizini altına hooks.php isimli bir dosya yaratıyoruz. Burada CodeIgniter çekirdeğine attığımız kancanın tanımını yazıyoruz:
$hook['display_override'][] = array( 'class' => '', 'function' => 'compress', 'filename' => 'compress.php', 'filepath' => 'hooks' );
Yukarıdaki kodlar ile CodeIgniter`a display_override opsiyonunu kullandığımızı, fonksiyonumuzun adının compress olduğunu, compress.php dosyası içinde ve hooks dizini altına kayıtlı olduğunu söylüyoruz. Hooks dosyamızda display_override opsiyonunu kullandığımız için compress.php dosyamızda $CI->output->get_output(); cümlesi ile ekran çıktısını $buffer değişkenine çektiğimizi unutmayalım.
Son olarak yaptığımız bu değişikliği devreye almak için application/config dizini altındaki config.php dosyamızdaki enable_hooks değişkenini TRUE yapıyoruz:
$config['enable_hooks'] = TRUE;
Böylelikle CodeIgniter`da çekirdek kodlara nasıl müdahale ettiğimizden, HOOK metodundan kısaca bahsederek, ekran çıktımızı sıkıştırmış ve böylece sayfa açılış süremizi daha kısaltmış olduk. Bu makale, Jerome Jaglale`nin burada anlattığı kodlar geliştirilerek hazırlanmıştır.
Yazarı : Fatih BAZMAN | Yorum Ekle | Etiketler : Hook sıkıştırma Hızlandırma
Türkiye