Website optimizasyonu konusu büyüyen startupların artık başta düşünmeye ve endişe duymaya başladığı bir konu. Bir web sayfasının optimizasyonu konusunda birçok detaycı yaklaşım var, bunlardan birisinden bahsedeceğim şimdi.

Web sayfanızda sayfa dışında yüklediğiniz bir çok dosya var. Bunlar genellikle imajlar, css ve javascript dosyaları. Tabi bunun dışında flash nesneleri, activex nesneleri, java nesneleri gibi başka dosyalar da olabilir. Bu dosyaları tarayıcı sunucudan isterken eğer domain cookie açık bir domain ise her istekte sunucunuza, istemcinizdeki cookie içerikleriniz gönderilir. Aynı şekilde sunucu da size gönderir.

Eğer o domainde çalıştırdığınız uygulamanız çok cookie set etmemişse bu konunun çok önemi olmaz ancak uygulama geliştiricinin ne yaptığını bilemezsiniz ve uygulama geliştirici de bu konuyu düşünerek "daha az cookie set etmeliyim" yaklaşımı ile uygulama geliştirmez. Yani eğer çok cookie barındırıyorsanız veya cookie içerikleriniz büyükse (mesela bir formun state'inin encode edip büyük bir text olarak saklıyor olabilirsiniz) bu imaj (js, css) transerlerinde bir de bu cookieler gönderilip alınacağından belli sayıda dosyadan kayda değer bir yavaşlama hissedilecektir.

Özellikle .NET'deki authentication cookie'leri gibi büyük boyutlu cookie saklayan uygulamalarda, eğer http request sayınız çok ise bu yavaşlama hissedilir derecede olabilir.

Bunu engellemek için uygulamanızı sunduğunuz domain ile bu statik dosyaları sunduğunuz sunucuyu ayırmalısınız. Sunucuyu ayırmaktan kastım fiziksel olarak ayırmak değil. Mesela mfyz.com domaini için konuşursam, uygulama mfyz.com üzerinde çalışıyor ve kullanıcı bu domainden girip burada kalıyor. Ama bununla beraber gelen birçok statik dosya cookie disabled bir subdomainden sunulabilir. Mesela statik.mfyz.com gibi bir subdomainden sunulurken, uygulamada header'da include ettiğim bir js dosyası için
<script type="text/javascript" src="http://mfyz.com/js/main.js"></script>
yerine
<script type="text/javascript" src="http://statik.mfyz.com/js/main.js"></script>
kullanmam yeterli olacaktır.

Gelen giden trafikte cookie'ler gönderilmeyeceğinden ve alınmayacağından transfer boyutları azalacaktır. Bu değişim birkaç dosyada bir anlam taşımayacaktır ama çok dosyada anlamlı olabilir.

Dediğim gibi çok detay bir konu ama yapmasanız da böyle bir faktör olduğunu bilmelisiniz.
Günümüzde ajax, flash derken client side crossdomain istekler geziyor. Bunun gibi teknolojileri kullanan uygulamalarda sık karşılaştığımız bir sorun var. Mesela flash içinde, javascript dosyalarında veya php yönlendirmelerinde bir sürü yerde yönlendirme kullanıyoruz ve aslında farkında olmadığımız bir kullanımdan dolayı oturum, istek cevaplarının gelmemesi gibi hatalar alıyoruz. Farkında olmadığımız şey şu :

Siz uygulamanızı yazıyorsunuz, flash'da actionscript yazan arkadaş veya sizhttp://www.mfyz.com/kaydet.php gibi bir adrese çağrı yapıyor. Veya bir işlem sonucundahttp://www.mfyz.com/tesekkur.php adresine yönlendiriyor. Diyelim ki uygulamanızda oturuma birşeyler kaydettiniz, cookie yazdınız vs, ve kullanıcıhttp://www.mfyz.com yerinehttp://mfyz.com adresinden girdiği zaman sizin uygulamanızda kaydedilen oturum veya cookie'ler mfyz.com domaini için yazılıyor. Sonra uygulama içindeki yönlendirme www.mfyz.com altında bir dosyaya yönleniyor. Sonuç olarak oradaki kontrollerde "www.mfyz.com" altındaki çerezler ve oturumda değişkenler arandığı için uygulamanız hiç oturum açılmamış gibi çalışıyor.

Bir başka sorun da flash ve ajax istekler için eğer domain uyuşmaz ise tarayıcıların bu istekleri kabul etmeyeceğidir. Ajax'ta DOM hataları alırsınız (eğer firebug kullnıyorsanız görürsünüz), eğer flash'tan istek yaparsanız cevap alamazsınız çünkü flash önce o domain altındaki crossdomain.xml dosyasından sizin o domaine erişiminiz olup olmadığını denetler. Eğer bu tanımı yapmadıysanız uygulamanız çalışmaz.
Aslında www.mfyz.com ile mfyz.com aynı domain ve siteler olmasına rağmen xss gibi güvenlik nedenleri için tarayıcılar tarafından engellenmektedir.

Çözüm, giren kullanıcınızı tek yerde gezdirmektir. Yani önce sitenizi www'lu mu yoksa www'suz mu kullanacağınıza karar verip gelen ziyaretçiyi eğer www'lu ise veya www'suz ise doğru olan yere yönlendirmektir. Ziyaretçi açısından birşey değişmez, hatta hissetmez bile, ama siz uygulama geliştirirken belki haftalarca hatanın kaynağını çözemeyeceğiniz bir problemle uğraşıyor olabilirsiniz.

PHP ile bu yönlendirmeyi yapmak için aşağıdaki kodu kullanabilirsiniz.
// subdomain redirection
if( substr($_SERVER[HTTP_HOST], 0, 3) != 'www' ){
	die('<script type="text/javascript" charset="utf-8"> window.top.location = "http://www.mfyz.com'. $_SERVER[REQUEST_URI] .'"; </script>');
}
Bu kodhttp://mfyz.com şeklinde gelen kullanıcıyıhttp://www.mfyz.com altındaki gideceği yere yönlendirir. Yani site her zaman www'lu çalışır. Bunun tersini yani www'suz çalışmak istiyorsanız (mfyz.com'da olduğu gibi) aşağıdaki versiyonu kullanabilirsiniz.
// subdomain redirection
if( substr($_SERVER[HTTP_HOST], 0, 3) == 'www' ){
	die('<script type="text/javascript" charset="utf-8"> window.top.location = "http://mfyz.com'. $_SERVER[REQUEST_URI] .'"; </script>');
}
Bu teknik aynı zamanda domain'in markalaşması konusunda da psikolojik açıdan bir alışkanlık oluşturma konusundaki ince bir detaydır.

Hazırlayan : Mehmet Fatih YILDIZ
Sitenizdehttp://www.mfyz.com veyahttp://mfyz.com şeklinde giren kullanıcıların farkını biliyor musunuz? Ya da insanlar nasıl bir alışkanlık ile böyle giriyorlar hiç farkına vardınız mı?

PHP geliştiricileri için : ufak bir kod ile bu yönlendirmeyi yapabileceğinizi biliyor muydunuz?
// subdomain redirection
if( substr($_SERVER[HTTP_HOST], 0, 3) != 'www' ){
	die('<script type="text/javascript" charset="utf-8"> window.top.location = "http://www.mfyz.com'. $_SERVER[REQUEST_URI] .'"; </script>');
}
Bu kod, mfyz.com'a www'suz giren yanihttp://mfyz.com şeklinde giren kullanıcılarıhttp://www.mfyz.com şeklinde gitmek istedikleri URL'e yönlendirecektir.

"Bu ayrımdan dolayı oluşan problemler ve ikisinin ayrımı" konusunda daha detaylı bilgi için döküman'dan devam ediniz.

Popüler Etiketler

javascript js jquery plugin box social integration api service network blog language oyun portfolio doritos tytz rss xml export mfyz mobile table iphone css media php pear mdb2 prepare execute injection apache kurulum mysql db code iOS icon ikon grafik download firefox banner calendar logo search google css3 html form radio style htaccess mod_rewrite url cookie assets cache apple ipad sql query optimizasyon analyse procedure open source lisans ubuntu ntfs fstab örnek kod itunes route router regex design date diff zaman tarih wanda digital object tebrik lifestream dokuman player license kampanya textarea link button select less twitter bootstrap html5 sosyal ipucu windows generator job developer ie support browser compile nedir nasıl cms login session macosx laptop notebook auth http linux workspace pharma hack wordpress seo startups medya framework osx facebook connect tool kitap ui development applications free optimization screen meta internet ide editor phpstorm jetbrains deployment version control svn git opengraph fql webkit web app app music mootools ajax xmlhttprequest share konsol terminal subdomain istatistik proje statistics www redirect crossdomain subversion newsletter mail xhtml widget gimp howto spam sitemap chart parse insanlar switch ios app store store in-app purchase purchase subscription verification storekit itunes connect ux internet explorer server graph imza signature coding mssql ruffles database pgsql browsers kontrol yapıları if while compiler on-the-fly icons wireless input