Comodo Dragon tarayıcısının gecikmeli açılma ve kapanma problemi
Son yazımın üzerinden çok uzunca bir zaman geçmiş hiç farkında bile değilim. Bu yeni yazımla bu uzun süreyi bir nebze olsun kırmak niyetindeyim bakalım. Uykum da kaçmışken bundan iyi fırsat olamaz. Yazacağım konu comodo dragon internet tarayıcısı hakkında. bu tarayıcıyı bir kaç senedir kullanırım. Sağladığı özellikler ve hız bakımından şimdiye kadar denediğim en iyi tarayıcı olduğunu söyleyebilirim. Çok uzun zamandır kullandığımdan zamanla açılış ve kapanış sürelerinde ciddi anlamda gecikmeleş yaşamaya başlamıştım.
Bu gecikmeler zamanla öyle boyutlara geldi ki bir çözüm aramak durumunda kaldım. Bu gecikme 10 saniyeye varan gecikmeydi. Güncellemelerle iyileştirilir diye bekledim ancak beklediğim olmadı. Gönlüm bir seferde silip alternatif aramaya elvermediğinden soruna bir çözüm bulabilir miyim diye tarayıcıyı incelemeye başladım. Nihayetinde oldukça ilginç bir durumla da karşılaşmış oldum zira sorunun kaynağı bu ilginçlikten kaynaklanıyordu görünüşe göre. Öncelikle programı kapatma komutunu verdiğim andan itibaren neler yaptığına şöyle bir bakmak ve ona göre bir çözüm aramak mantıklı olacağından ben de öyle yaptım. Tam olarak kapanma anından itibaren browser process’inin bitiş anına kadar yaptığı işlemleri ve zamanlamalarını yakalayıp küçük bir gözlem yapmak yeterli oldu.
Yukarıda da görüldüğü üzere bu kayıtlardan yola çıktığımızda benim tarayıcımın resimdeki ilk sütunda kayıtlardan yola çıkarak yaklaşık 10 saniyelik bir gecikme yaşıyordu. Bu bir uygulama için çok uzun bir süre. Aradaki kayıtlar sorunun kaynağını bulmada anahtar nokta. Browser bu 10 saniyelik dilimde yoğun olarak bir dosya üzerinde I/O işlemi yapıyordu.
Başlangıç ve çıkış zamanlamaları arasından rastgele seçilen 2 farklı event kaydından görüldüğü gibi bu yoğun I/O ‘nun yaşandığı dosya Favicons isimli tarayıcının isminden anlaşıldığı üzere faviconlarla alakalı bazı verileri kendince tuttuğu bir dosya.
Peki bu kadar uzun süre gecikme yaratacak kadar uzun bir I/O oluşturmasına sebep olan nokta neydi? Evvela dosyanın ne içerdiğine ne tipte bir dosya olduğunu anlamak gerekti. Dosyanın bulunduğu dizine gittiğimde yaklaşık 6 mb uzunluğunda bir dosya olduğunu gördüm.
Hemen altında ise dosya ile ilişkili bir journal dosyası mevcuttu. Buradan da bu dosyanın bir journaling kullanan veritabanı dosyası olduğunu anlamak zor değil. Dosya header’ına baktığımızda dosyanın esasen bir SQLite veritabanı dosyası olduğunu gördüm ve içeriğinde neyi ne kadar tuttuğunu incelemek üzere bir sqlite browser programı ile inceledim. ve oldukça ilginç bir durumla karşılaştım.
İlginç olan nokta şuydu, evet tarayıcı favicon’ları sqlte kullanarak saklıyordu olabilir gayet ancak saklama şekli oldukça ilginçti. Favicon’ları domain/subdomain tabanlı tutmak gibi daha pratik ve kolay yol varken bunu her url için ayrı ayrı bir kayıt ekleyerek ilgili favicon resmini map ederek yapıyordu. Kayıtlara baktığımda bu da dolaylı olarak girdiğiniz her url’in saklanmasına sebep oluyor. Bundan aylarca önce girdiğim sitelerin adreslerini tek tek bulabildim bu sayede. Bu da oldukça enteresandı. Her url kaydı için yine kendi içinde favicon_bitmaps tablosunda tuttuğu favicon verilerini bir index ile eşleştirip yazıyor.
örneğin url’de 97 indexi stackoverflow’a ait veri içeriyor.
Kendi bilgisayarımda toplam
30502 adet kayıt tutmuş. Ne yaptığını kesin olarak söyleyemeyiz ancak kapanırken arkaplanda bu verilerle yoğun biçimde bazı işlemler yaptığı bu kadar ipucundan sonra söylenebilir.
Sorunun buradan kaynaklandığını görebildiğime göre bana bir de mümkün olduğunca çabuk bir çözüm gerekti. Çözüm de çok zor değil. Madem bu kayıtları sqlite üzerinde tutuyor ben bu kayıtları boşaltırsam o kadar uzun süre bu dosya ile meşgul olmak durumunda kalmayacak. Hemen denemek için ilgili tablo verilerini boşalttım ve kapatıp açmayı denedim. Sonuç; tam da beklediğim gibi
Toplam olarak kapatma komutundan, process’in yok edilmesine kadar geçen süre 2 saniye kadardı. Kullanıcıya yansıyan kısmı (GUI’nin yok olması) daha kısa sürdü.
Nihai olarak böyle bir sorun yaşayanlar için de bunu otomatikleştiren ve daha sonra ihtiyaç halinde benim de kullanabileceğim bir script yazdım.
Script için -> http://oguzkartal.net/binaries/comodo_boost.zip adresini kullanabilirsiniz.
Scripti ve sqlite engine dosyasını aynı klasöre çıkarın ve scripti çalıştırın. Aşağıdaki gibi script çalışıp önceden ne kadar kayıt bulunduğunu size söyleyip sırayla kayıtları uçuracaktır. Son düzenlemede diğer tablo kayıt adetlerini de göstermiştim bu screenshot biraz eski farklılık olabilir. Scripti ister belli aralıklarla manuel çalıştırabilir yahut kendiniz için tarayıcı çalıştırıcı hazırlayıp kapandıktan hemen sonra bu scripti devreye sokabilirsiniz. Vakit olursa belki ben yaparım bilinmez tabi.
Şimdilik benden bu kadar. ;)