Cronjob İle Otomatik Görsel Optimizasyonu
Cronjob başlıklı yazıda, tanımın yanı sıra basit kullanım örneklerine de yer vermeye çalışmıştım. Ancak, asıl kapsamlı örnekler Crontab Nedir? Nasıl Kullanılır? başlıklı yazıda yer almaktaydı.
Geçtiğimiz günlerde “…özellikle blog’lar için görselleri kalitesini bozmadan sıkıştırmak adına kullandığınız, mümkünse kod yazmadan kullanılan bir tool, web sitesi var mı?” şeklinde bir soruya denk geldim. Öneriler arasında webp ile ilgili yazım da yer almaktaydı. Cevaben belirttiğim gibi, webp bir seçenek. Ancak, tarayıcı desteği konusunda biraz daha alması gereken yol var. Diğer bir seçenek olarak cronjob kullanımı da değerlendirilebilir. Bu yazıda, başlıkta da belirttiğim üzere, blog sitelerinde kullanmak üzere bir cronjob tanımı nasıl yapabileceğimizden ve belirlediğimiz zamanlarda blog içeriğinde (özellikle paylaşımlı hosting alanları bağlamında) kullanılan görselleri jpegoptim ve optipng ile nasıl kayıpsız sıkıştırabileceğimizden bahsedeceğim. Öncelikle adım adım kullanacağımız araçları kısaca hatırlayalım.
Cronjob
Cronjob yazısına referansla, kısaca cronjob tanımımızı yineleyelim. Cron Job (Zamanlanmış Görev), ileri tarihli tek seferlik ya da tekrarlanır veya duruma göre değişkenlik gösterebilir zaman uyarlı komutlar uygulamak için yaygın bir şekilde kullanılan yöntemlerden biridir.
Jpegoptim ve Optipng
Jpegoptim, JPEG dosyaların kayıpsız bir şekilde (Huffman tables temelli) maksimum kalite bağlamında optimize edilmesini sağlayan bir yardımcı program.
Optipng, PNG (Portable Network Graphics) dökümanların kayıpsız sıkıştırılmasının yanı sıra BMP, GIF, PNM ve TIFF formatlarındaki görsellerin PNG formatına dönüştürülmesi işlemlerini de gerçekleştirmektedir.
Cronjob İle Otomatik Görsel Optimizasyonu
Kullanacağımız araçlar hakkında da temel bilgilerimizi tazelediğimize göre, uygulama aşamasına geçebiliriz. Aşağıdaki işlemleri çoğu blog uygulamasının barındırıldığını düşündüğüm paylaşımlı barındırma alanında (shared hosting) gerçekleştireceğim. Aynı işlemleri DigitalOcean gibi ortamlarda da herhangi bir değişiklik olmaksızın, hatta çok daha pratik bir şekilde gerçekleştirebilirsiniz.
İkinci önemli konu, işlemleri gerçekleştirebilmemiz için bir SSH veya Mosh bağlantısına ihtiyaç duymamız. Örneğin, Natro gibi servislerde maalesef ilgili alanlar sınırlandırıldığı için işlem yapamayabilirsiniz. Dolayısıyla, işlemler öncesinde terminal aracılığıyla barındırma alanına erişim sağlanabildiğinden emin olmak gerekiyor. Şimdiliki işlemleri Hawkhost ile sürdüreceğim. Zaman içerisinde, barındırma alanlarına dair eklemeler olur ise veya kendi karşılaştığınız sorunları yorum olarak paylaşabilirseniz bu adımı çeşitlendirmeye çalışırım.
Üçüncü konu, ilgili işlemin bir zaman tanımı çerçevesinde belirtilen klasör bağlamında gerçekleştirileceği. Dolayısıyla aynı görseller tekrar işleme alınacaktır. Elbette ilgili işlem detaylandırılarak bir shell script ile kapsamlı şekilde de ele alınabilir. Ancak, bu tür bir çözüm ayrı bir yazı altında ele alınmalı. Şimdilik, işin mantığını öne çıkaracak şekilde, pratik çözüm yollarına odaklanalım.
Görev Tanımı
İlk olarak jpegoptim ve optipng kurulumlarımızı yapamız gerekiyor. Öncelikle, Cpanel üzerinden sunucuya bağlı ve/veya bilgisayarımızdaki terminal ile güvenli bağlantımızı sağlamalıyız. Cronjob tanımımızı da yine Cpanel üzerinden yapabileceğimiz gibi terminal aracılığıyla da gerçekleştirebiliriz.
Wget ile optipng ve jpegoptim uygulamalarını barındırma alanına indirelim. İlk indirme ve kurulum işlemini optipng için yapalım.
wget http://downloads.sourceforge.net/project/optipng/OptiPNG/optipng-0.7.4/optipng-0.7.4.tar.gz
tar xvf optipng-0.7.4.tar.gz
cd optipng-0.7.4
./configure
make
make install
#ya da
apt install optipng
Sıra jepgoptim’de!
wget https://github.com/tjko/jpegoptim/archive/RELEASE.1.4.6.tar.gz
tar xvf RELEASE.1.4.6.tar.gz
make
make strip
make install
#ya da
apt install jpegoptim
Evet, kurulumlar tamamlandığına göre sıkıştırma işlemleri için kullanabileceğimiz komutlara bir bakalım. Bir /test
klasörü oluşturum ve sıkıştırma işlemi için buradaki görselleri işleme aldım. İsterseniz doğrudun blog sitenize ait görsellerin yer aldığı dizini de kullanabilirsiniz.
find /var/www/test -iname *.jp* -exec jpegoptim --strip-all -pt -m90 {} \;
find /var/www/test -iname '*.png' -exec optipng -o7 -preserve {} \;
Son işlemimiz ise cronjob tanımı ile bu işlemin görev halinde, belirli zamanlarda (aşağıdaki tanımda, her hafta Pazar günü) yinelenmesi. Kendinize uygun bir tanımlama yapmak için crontab.guru1 sayfasından faydalanabilirsiniz.
0 1 * * 0 lockrun -Q -L .lockjpegoptim -- find /var/www/test -mtime -7 -iname *.jp* -exec jpegoptim --strip-all -p {} \; > /dev/null
0 4 * * 0 lockrun -Q -L .lockoptipng -- find /var/www/test -mtime -7 -iname '*.png' -exec optipng -o7 -preserve {} \; > /dev/null
Yukarıdaki işlemlerin yanı sıra Image optimization bash script2 ile de hızlı bir şekilde JPG, PNG, WEBP optimizasyon işlemleri gerçekleştirebilirsiniz. Ayrıca, aşağıda örnek olarak inceleyebileceğiniz diğer yazıları da paylaşıyorum.