Herkese selam,
Bugün CSS ile ilgili farklı bir konu ile karşınızdayım. Aslında bu işi yapan otomatik olarak css dosyasını veren svn tool ları olsa da ben size farklı bir yol ile çözüm üreteceğim..
Sitenizde diyelimki her sayfada çağırdığınız 5 tane css var. Artık bunların hepsini otomatik olarak sıkıştıracağız ve cache atıp her seferinde yüklenmek yerine günlük olarak cache yaptıracağız..
Yani daha kolay anlamanız için örnek Kullanım:
<link rel="stylesheet" type="text/css" media="screen" href="/css/minify.css.php"/>
Örnek Proje ve kodlarına erişmek isterseniz github da mevcut: https://github.com/onurcanalp/PHP-CSS-Minify
Ve işi yapan asıl dosyamız…
<?php /** * Onur Canalp - 2014 * * CSS Minify Etmece, Sıkıştırmaca * * Projemizde bulunan 3-5 adet css i tek dosya haline getirip tek satırda basmamıza yarıyor bu dosya. * Bu sayede hem boyut düşecektir, hem dışardan bakanlar için ilk bakıştaki okunabilirliği azalacaktır. * * Örnek Kullanım: * <link rel="stylesheet" type="text/css" media="screen" href="/css/minify.css.php" /> * */ /* Projemizde kullandığımız css dosyaları */ $files = array( "main.css", "layout.css", "mobile.css", "site.css", "screen.css" ); $output = ""; foreach ($files as $file) { $output .= file_get_contents($file); } // Yorumları temizleyelim $output = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $output); // : dan sonraki boşlukları silelim $output = str_replace(': ', ':', $output); // tablerı, yeni satırları ve diğer boşlukları temizleyelim $output = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), '', $output); // GZip encodingi aktif edelim. Çıktımızı gzip le sıkıştıralım ob_start("ob_gzhandler"); // cache aktif edelim. header('Cache-Control: public'); // CSS lerimizi günlük tutacağız. 1gün olarak ayarlayalım header('Expires: ' . gmdate('D, d M Y H:i:s', time() + 86400) . ' GMT'); // MIME type ayarı yapalım. Apache yoksa css gibi görmez.. header("Content-type: text/css"); // Çıktımızı basalım.. echo($output); ?>
Görüldüğü üzere işlem çok basit aslında.. anlamanız için aralara yorum da yazdım.. Yeterli olacağını düşünüyorum..
Bilginize: ob_gzhandler() işlevi zlib eklentisini gerektirir.
Not: Trafik yükünüz çok fazla ise direk css oluşturup onu cache etmenizi öneririm, bu sayede sürekli olarak php çalıştırmamış olursunuz.
Kolay gelsin..
Merhabalar,
Bu biraz front-end tarafını alakadar eder bir iş. Bunun için Gulp ya da Grunt gibi araçları kullanmak daha uygun olur diye düşünüyorum.
Tabi ki bende katılıyorum.. Bu daha basit ve php tabanlı bi yoğurt yiyiş tekniği zira nodejs den bi haber insanların da sayısı azımsanamaz.. 🙂