{"id":31223,"date":"2025-10-07T11:02:09","date_gmt":"2025-10-07T08:02:09","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/"},"modified":"2025-10-07T11:02:09","modified_gmt":"2025-10-07T08:02:09","slug":"firebase-hosting-onbellek-sorunlari-cozum-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/","title":{"rendered":"Firebase Hosting \u00d6nbellek Sorunlar\u0131: \u00c7\u00f6z\u00fcm Rehberi"},"content":{"rendered":"<p>Firebase Hosting, h\u0131zl\u0131 ve g\u00fcvenilir web siteleri da\u011f\u0131tmak i\u00e7in harika bir platform olsa da, bazen \u00f6nbellekleme mekanizmalar\u0131 geli\u015ftiricilerin kabusu haline gelebilir. Bu makale, Firebase Hosting&#8217;deki \u00f6nbellek sorunlar\u0131n\u0131n nedenlerini, \u00e7\u00f6z\u00fcmlerini ve sizi bu sinsi tuzaktan nas\u0131l kurtaraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m anlat\u0131yor.<\/p>\n<p>Her geli\u015ftiricinin ba\u015f\u0131na gelmi\u015ftir: B\u00fcy\u00fck bir heyecanla yeni \u00f6zelli\u011fi yay\u0131nlars\u0131n\u0131z, her \u015fey test ortam\u0131nda m\u00fckemmel \u00e7al\u0131\u015fmaktad\u0131r. Ancak kullan\u0131c\u0131lar size eski s\u00fcr\u00fcm\u00fc g\u00f6rd\u00fcklerini bildirmeye ba\u015flar. &#8220;Ama nas\u0131l olur? Ben az \u00f6nce da\u011f\u0131tt\u0131m!&#8221; diye d\u00fc\u015f\u00fcn\u00fcrs\u00fcn\u00fcz. \u0130\u015fte tam da bu noktada, sessiz ama bir o kadar da g\u00fc\u00e7l\u00fc d\u00fc\u015fman\u0131m\u0131z olan \u00f6nbellek, sahneye \u00e7\u0131kar. \u00d6zellikle Firebase Hosting gibi global CDN (\u0130\u00e7erik Da\u011f\u0131t\u0131m A\u011f\u0131) kullanan platformlarda, \u00f6nbellek sorunlar\u0131 can s\u0131k\u0131c\u0131 bir hal alabilir. Kullan\u0131c\u0131lar her zaman en g\u00fcncel i\u00e7eri\u011fi g\u00f6rmeli, ancak \u00f6nbelle\u011fe al\u0131nm\u0131\u015f eski dosyalar bu beklentiyi bo\u015fa \u00e7\u0131karabilir. Peki, bu sorun neden bu kadar yayg\u0131n ve nas\u0131l ortaya \u00e7\u0131k\u0131yor? Yan\u0131t genellikle HTTP ba\u015fl\u0131klar\u0131nda, \u00f6zellikle de <code>Cache-Control<\/code> ayarlar\u0131nda ve CDN&#8217;in \u00e7al\u0131\u015fma prensiplerinde gizlidir.<\/p>\n<p>Bir web sitesini Firebase Hosting&#8217;e da\u011f\u0131tt\u0131\u011f\u0131n\u0131zda, dosyalar\u0131n\u0131z d\u00fcnya genelindeki sunuculara (CDN noktalar\u0131na) kopyalan\u0131r. Bir kullan\u0131c\u0131 sitenizi ziyaret etti\u011finde, ona co\u011frafi olarak en yak\u0131n sunucudan hizmet verilir. Bu, sitenizin inan\u0131lmaz derecede h\u0131zl\u0131 y\u00fcklenmesini sa\u011flar. Ancak bu h\u0131z\u0131n bir bedeli vard\u0131r: CDN, performans\u0131 art\u0131rmak i\u00e7in dosyalar\u0131 \u00f6nbelle\u011fe al\u0131r. Yani, bir dosya ilk talep edildi\u011finde, CDN o dosyay\u0131 kendi sunucular\u0131nda saklar. Sonraki taleplerde, dosya origin sunucusundan (sizin depolama alan\u0131n\u0131zdan) tekrar indirilmez, do\u011frudan CDN&#8217;in \u00f6nbelle\u011finden sunulur. Bu mekanizma \u00e7o\u011fu zaman harikad\u0131r; ancak siz bir dosyay\u0131 g\u00fcncelledi\u011finizde ve CDN hala eski s\u00fcr\u00fcm\u00fcn\u00fc sunmaya devam etti\u011finde, sorunlar ba\u015flar. Kullan\u0131c\u0131lar\u0131n\u0131z\u0131n taray\u0131c\u0131lar\u0131 da kendi \u00f6nbelleklerinde eski dosyalar\u0131 tutabilir, bu da durumu daha karma\u015f\u0131k hale getirir. Bu makale boyunca, bu d\u00f6ng\u00fcy\u00fc k\u0131r\u0131p her zaman en g\u00fcncel i\u00e7eri\u011fi sunman\u0131n yollar\u0131n\u0131 ke\u015ffedece\u011fiz. Firebase&#8217;in g\u00fc\u00e7l\u00fc ara\u00e7lar\u0131n\u0131 do\u011fru kullanarak, \u00f6nbellek kabuslar\u0131n\u0131 geride b\u0131rakabiliriz.<\/p>\n<p>Bu sorun genellikle k\u00fc\u00e7\u00fck de\u011fi\u015fikliklerde, \u00f6rne\u011fin bir CSS dosyas\u0131nda yapt\u0131\u011f\u0131n\u0131z bir d\u00fczeltmede veya bir JavaScript dosyas\u0131ndaki hata ay\u0131klamada daha belirgin hale gelir. E\u011fer kullan\u0131c\u0131lar sitenizin eski bir s\u00fcr\u00fcm\u00fcn\u00fc g\u00f6rmeye devam ederse, bu hem onlar\u0131n deneyimini olumsuz etkiler hem de sizin g\u00fcvenilirli\u011finizi zedeler. Hatta bazen, belirli bir API endpoint&#8217;inin yanl\u0131\u015f \u00f6nbellek ayarlar\u0131 nedeniyle s\u00fcrekli eski verileri d\u00f6nd\u00fcrd\u00fc\u011f\u00fcn\u00fc fark edebilirsiniz, bu da dinamik uygulamalar i\u00e7in ciddi bir engel te\u015fkil eder. Bu durum, \u00f6zellikle s\u00fcrekli g\u00fcncellenen ve kritik veriler bar\u0131nd\u0131ran e-ticaret siteleri veya haber portallar\u0131 i\u00e7in b\u00fcy\u00fck bir risk olu\u015fturur. \u0130\u015fte bu y\u00fczden, Firebase Hosting&#8217;deki \u00f6nbellekleme mekanizmalar\u0131n\u0131 derinlemesine anlamak ve onlar\u0131 do\u011fru bir \u015fekilde y\u00f6netmek, sorunsuz bir geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcreci i\u00e7in vazge\u00e7ilmezdir. Bu rehberde, bu s\u00fcre\u00e7leri ad\u0131m ad\u0131m ele alacak ve size pratik \u00e7\u00f6z\u00fcmler sunaca\u011f\u0131z.<\/p>\n<h2>Firebase Hosting ve \u00d6nbellekleme Temelleri: Nas\u0131l \u00c7al\u0131\u015f\u0131r, Neleri Bilmeliyiz?<\/h2>\n<p>Firebase Hosting, h\u0131zl\u0131 ve g\u00fcvenilir web siteleri i\u00e7in tasarlanm\u0131\u015f bir platformdur. Temelinde Google&#8217;\u0131n global CDN altyap\u0131s\u0131n\u0131 kullan\u0131r. Peki bu ne anlama geliyor? Sitenizi Firebase&#8217;e da\u011f\u0131tt\u0131\u011f\u0131n\u0131zda, statik dosyalar\u0131n\u0131z (HTML, CSS, JavaScript, resimler vb.) d\u00fcnya genelindeki bir\u00e7ok sunucuya yay\u0131l\u0131r. Bir kullan\u0131c\u0131 sitenize eri\u015fmeye \u00e7al\u0131\u015ft\u0131\u011f\u0131nda, ona co\u011frafi olarak en yak\u0131n sunucudan yan\u0131t verilir. Bu, gecikmeyi azalt\u0131r ve y\u00fckleme s\u00fcrelerini \u00f6nemli \u00f6l\u00e7\u00fcde h\u0131zland\u0131r\u0131r. Bu sistemin kalbinde ise \u00f6nbellekleme mekanizmas\u0131 yer al\u0131r.<\/p>\n<p>\u00d6nbellekleme, verilerin ge\u00e7ici olarak depolanmas\u0131 anlam\u0131na gelir, b\u00f6ylece sonraki taleplerde ayn\u0131 verilerin orijinal kayna\u011f\u0131ndan tekrar al\u0131nmas\u0131na gerek kalmaz. Firebase Hosting&#8217;de iki ana \u00f6nbellekleme t\u00fcr\u00fcyle kar\u015f\u0131la\u015f\u0131r\u0131z:<\/p>\n<ol>\n<li>\n        <strong>CDN \u00d6nbelle\u011fi (Edge Cache):<\/strong> Bu, Firebase&#8217;in global CDN&#8217;indeki sunucular\u0131n dosyalar\u0131n\u0131z\u0131 depolamas\u0131d\u0131r. Bir dosya ilk kez istendi\u011finde, CDN onu orijinal depolama alan\u0131n\u0131zdan (\u00f6rne\u011fin Google Cloud Storage&#8217;dan) al\u0131r ve kendi sunucusunda saklar. Sonraki talepler i\u00e7in, dosya do\u011frudan CDN&#8217;den sunulur. Bu, sunucu y\u00fck\u00fcn\u00fc azalt\u0131r ve kullan\u0131c\u0131ya daha h\u0131zl\u0131 yan\u0131t verir. CDN \u00f6nbelle\u011finin ne kadar s\u00fcreyle ge\u00e7erli kalaca\u011f\u0131n\u0131 HTTP <code>Cache-Control<\/code> ba\u015fl\u0131klar\u0131yla belirlersiniz.\n    <\/li>\n<li>\n        <strong>Taray\u0131c\u0131 \u00d6nbelle\u011fi (Client-side Cache):<\/strong> Kullan\u0131c\u0131n\u0131n web taray\u0131c\u0131s\u0131 da sitenizin dosyalar\u0131n\u0131 kendi bilgisayar\u0131nda \u00f6nbelle\u011fe alabilir. Bir kullan\u0131c\u0131 sitenizi tekrar ziyaret etti\u011finde, taray\u0131c\u0131 daha \u00f6nce indirdi\u011fi dosyalar\u0131 kullanabilir, bu da sitenin an\u0131nda y\u00fcklenmesini sa\u011flar. Taray\u0131c\u0131 \u00f6nbelle\u011fi de <code>Cache-Control<\/code> ba\u015fl\u0131klar\u0131 ile y\u00f6netilir.\n    <\/li>\n<\/ol>\n<p>Bu iki \u00f6nbellekleme katman\u0131, sitenizin performans\u0131n\u0131 art\u0131rmak i\u00e7in birlikte \u00e7al\u0131\u015f\u0131r. Ancak, bu iki katman\u0131n da kendi \u00f6nbellek s\u00fcreleri ve ge\u00e7erlilik kurallar\u0131 vard\u0131r. E\u011fer bir dosyan\u0131n i\u00e7eri\u011fini de\u011fi\u015ftirirseniz, hem CDN&#8217;in hem de taray\u0131c\u0131n\u0131n eski s\u00fcr\u00fcm\u00fc \u00f6nbelle\u011finde tutuyor olmas\u0131 olas\u0131d\u0131r. Bu durumda, kullan\u0131c\u0131lar sitenizin g\u00fcncel halini g\u00f6remeyecektir. Bu sorunu \u00e7\u00f6zmek i\u00e7in, \u00f6nbellek ba\u015fl\u0131klar\u0131n\u0131 do\u011fru yap\u0131land\u0131rman\u0131z ve gerekti\u011finde \u00f6nbelle\u011fi ge\u00e7ersiz k\u0131lma (cache invalidation) stratejilerini uygulaman\u0131z gerekir.<\/p>\n<p><code>Cache-Control<\/code> ba\u015fl\u0131\u011f\u0131, HTTP yan\u0131t\u0131nda sunucu taraf\u0131ndan g\u00f6nderilen ve hem taray\u0131c\u0131ya hem de ara sunuculara (CDN gibi) bir kayna\u011f\u0131n nas\u0131l \u00f6nbelle\u011fe al\u0131nmas\u0131 gerekti\u011fini s\u00f6yleyen \u00e7ok \u00f6nemli bir bilgidir. \u00d6rne\u011fin, <code>Cache-Control: public, max-age=3600<\/code> bir dosyan\u0131n 3600 saniye (1 saat) boyunca hem CDN hem de taray\u0131c\u0131 taraf\u0131ndan \u00f6nbelle\u011fe al\u0131nabilece\u011fini belirtir. E\u011fer bu s\u00fcreyi \u00e7ok uzun tutarsan\u0131z ve s\u0131k s\u0131k dosya g\u00fcncelliyorsan\u0131z, kullan\u0131c\u0131lar eski i\u00e7eri\u011fi g\u00f6rmeye devam eder. \u00d6te yandan, s\u00fcreyi \u00e7ok k\u0131sa tutarsan\u0131z, her seferinde dosyalar\u0131n yeniden indirilmesi performans\u0131 d\u00fc\u015f\u00fcrebilir. Bu nedenle, farkl\u0131 dosya t\u00fcrleri i\u00e7in farkl\u0131 \u00f6nbellekleme stratejileri uygulamak ak\u0131ll\u0131ca olacakt\u0131r. \u00d6rne\u011fin, \u00e7ok s\u0131k de\u011fi\u015fen HTML dosyalar\u0131 i\u00e7in k\u0131sa bir <code>max-age<\/code> veya <code>no-cache<\/code> kullan\u0131rken, statik resimler veya fontlar i\u00e7in uzun bir <code>max-age<\/code> kullanabilirsiniz.<\/p>\n<p>Do\u011fru \u00f6nbellekleme stratejisi, sitenizin performans\u0131n\u0131 optimize ederken, kullan\u0131c\u0131lar\u0131n her zaman en g\u00fcncel i\u00e7eri\u011fi g\u00f6rmesini de sa\u011flar. Bu dengeyi kurmak, Firebase Hosting ile \u00e7al\u0131\u015f\u0131rken \u00f6\u011frenilmesi gereken en \u00f6nemli becerilerden biridir. \u00d6zellikle tek sayfa uygulamalar\u0131 (SPA) ve progresif web uygulamalar\u0131 (PWA) geli\u015ftirirken, \u00f6nbellekleme stratejileri uygulaman\u0131z\u0131n genel davran\u0131\u015f\u0131 \u00fczerinde do\u011frudan bir etkiye sahip olabilir. Firebase Hosting&#8217;in sundu\u011fu esnek yap\u0131land\u0131rma se\u00e7eneklerini kullanarak, bu \u00f6nbellekleme ba\u015fl\u0131klar\u0131n\u0131 projenizin ihtiya\u00e7lar\u0131na g\u00f6re uyarlayabilir ve olas\u0131 sorunlar\u0131n \u00f6n\u00fcne ge\u00e7ebilirsiniz.<\/p>\n<h2>&#8220;Hatal\u0131 G\u00fcncellemeler&#8221; Vakas\u0131: \u00d6nbellek Yanl\u0131\u015f Yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131nda Neler Olur?<\/h2>\n<p>Bu hikaye, Firebase Hosting ile \u00e7al\u0131\u015fmaya yeni ba\u015flayan bir ekibin, e-ticaret sitelerinin ana sayfas\u0131ndaki &#8220;En Yeni \u00dcr\u00fcnler&#8221; b\u00f6l\u00fcm\u00fcn\u00fc g\u00fcncelleme maceras\u0131yla ba\u015flar. Ama\u00e7, ana sayfadaki \u00fcr\u00fcn listesini dinamik olarak yenilemek ve kullan\u0131c\u0131lara her zaman en taze \u00fcr\u00fcnleri sunmakt\u0131. Geli\u015ftiriciler, sitenin HTML&#8217;ini, CSS&#8217;ini ve JavaScript&#8217;ini g\u00fcncellediler, yeni \u00fcr\u00fcn verilerini API&#8217;ye eklediler ve her \u015feyin kusursuz \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in yerel ortamda titizlikle test ettiler. Sonra b\u00fcy\u00fck bir gururla <code>firebase deploy<\/code> komutunu \u00e7al\u0131\u015ft\u0131rd\u0131lar ve de\u011fi\u015fikliklerin yay\u0131na girdi\u011fini d\u00fc\u015f\u00fcnd\u00fcler.<\/p>\n<p>Ancak birka\u00e7 saat sonra, destek ekibi kullan\u0131c\u0131lardan gelen \u015fikayetlerle dolup ta\u015fmaya ba\u015flad\u0131: &#8220;Ana sayfada hala eski \u00fcr\u00fcnleri g\u00f6r\u00fcyorum!&#8221;, &#8220;Yeni ekledi\u011finiz indirimi g\u00f6remiyorum!&#8221;, &#8220;Siteniz g\u00fcncellenmiyor mu?&#8221;. Geli\u015ftiriciler ilk ba\u015fta kullan\u0131c\u0131lar\u0131n taray\u0131c\u0131 \u00f6nbelle\u011fini temizlemedi\u011fini d\u00fc\u015f\u00fcnd\u00fcler ve bunu onlara \u00f6nerdiler. Fakat sorun devam etti. Kendi taray\u0131c\u0131lar\u0131nda da eski i\u00e7eri\u011fi g\u00f6rmeye ba\u015flad\u0131klar\u0131nda, durumun ciddiyetini anlad\u0131lar. \u0130\u015fte o an, \u00f6nbellek kabusunun ger\u00e7ek oldu\u011funu fark ettiler.<\/p>\n<p>Sorunun temelinde, <code>firebase.json<\/code> dosyas\u0131ndaki eksik veya hatal\u0131 <code>Cache-Control<\/code> ayarlar\u0131 yat\u0131yordu. Ekip, sitenin genel performans\u0131 i\u00e7in t\u00fcm statik dosyalar\u0131n uzun s\u00fcre \u00f6nbelle\u011fe al\u0131nmas\u0131n\u0131 sa\u011flayan varsay\u0131lan bir yap\u0131land\u0131rma kullanm\u0131\u015ft\u0131. Bu, resimler, fontlar ve stil dosyalar\u0131 i\u00e7in harikayd\u0131, ancak dinamik i\u00e7eri\u011fi bar\u0131nd\u0131ran veya g\u00fcncel verilere ba\u011f\u0131ml\u0131 olan HTML ve JavaScript dosyalar\u0131 i\u00e7in bir felaketti. \u00d6zellikle ana HTML dosyas\u0131 (<code>index.html<\/code>) \u00e7ok uzun s\u00fcre (\u00f6rne\u011fin, 1 y\u0131l) \u00f6nbelle\u011fe al\u0131nm\u0131\u015ft\u0131. Bu da demek oluyordu ki, kullan\u0131c\u0131lar sitenin ana sayfas\u0131n\u0131 ziyaret etti\u011finde, taray\u0131c\u0131lar\u0131 ve CDN, <code>index.html<\/code> dosyas\u0131n\u0131n eski s\u00fcr\u00fcm\u00fcn\u00fc h\u0131zla servis ediyordu, yeni s\u00fcr\u00fcm\u00fc ise g\u00f6rmezden geliyordu.<\/p>\n<p>Peki bu hatal\u0131 yap\u0131land\u0131rma nas\u0131l d\u00fczeltildi ve ekip neler \u00f6\u011frendi?<\/p>\n<ol>\n<li>\n        <strong>Sorunun Te\u015fhisi:<\/strong> Geli\u015ftiriciler, sitelerini farkl\u0131 taray\u0131c\u0131larda ve gizli modda test ettiler. Geli\u015ftirici ara\u00e7lar\u0131n\u0131 (Developer Tools) kullanarak a\u011f isteklerini incelediler. <code>Network<\/code> sekmesinde, <code>index.html<\/code> i\u00e7in yap\u0131lan istekte <code>Cache-Control<\/code> ba\u015fl\u0131\u011f\u0131n\u0131n <code>max-age=31536000<\/code> (1 y\u0131l) olarak ayarland\u0131\u011f\u0131n\u0131 ve \u00e7o\u011fu zaman <code>(from cache)<\/code> olarak geldi\u011fini g\u00f6rd\u00fcler. Bu, taray\u0131c\u0131n\u0131n veya CDN&#8217;in dosyay\u0131 \u00e7ok uzun s\u00fcre \u00f6nbellekte tuttu\u011funu g\u00f6steriyordu.\n    <\/li>\n<li>\n        <strong>H\u0131zl\u0131 Ge\u00e7ici \u00c7\u00f6z\u00fcm:<\/strong> Durumu an\u0131nda \u00e7\u00f6zmek i\u00e7in, Firebase konsolundan projenin &#8220;Hosting&#8221; b\u00f6l\u00fcm\u00fcne gidip, &#8220;Deployment History&#8221; k\u0131sm\u0131ndan son da\u011f\u0131t\u0131m\u0131n &#8220;Rollback&#8221; edilmesi gerekiyordu. Ancak bu, sorunun k\u00f6k\u00fcn\u00fc \u00e7\u00f6zm\u00fcyordu.\n    <\/li>\n<li>\n        <strong>Kal\u0131c\u0131 \u00c7\u00f6z\u00fcm:<\/strong> Ekip, <code>firebase.json<\/code> dosyas\u0131n\u0131 inceledi ve <code>hosting<\/code> b\u00f6l\u00fcm\u00fcndeki <code>headers<\/code> yap\u0131land\u0131rmas\u0131n\u0131 g\u00fcncelledi. Ana HTML dosyas\u0131 i\u00e7in (<code>index.html<\/code>) <code>Cache-Control<\/code> ba\u015fl\u0131\u011f\u0131n\u0131 <code>max-age=0, no-cache, no-store, must-revalidate<\/code> olarak ayarlad\u0131lar. Bu, taray\u0131c\u0131 ve CDN&#8217;e dosyan\u0131n asla \u00f6nbelle\u011fe al\u0131nmamas\u0131 veya her seferinde sunucudan do\u011frulanmas\u0131 gerekti\u011fini s\u00f6yl\u00fcyordu. Di\u011fer statik dosyalar (CSS, JS, resimler) i\u00e7in ise versiyonlama (cache busting) teknikleri kullanarak uzun s\u00fcreli \u00f6nbelleklemenin avantajlar\u0131n\u0131 korudular.<\/li>\n<\/ol>\n<p>Bu vaka, \u00f6nbelleklemenin g\u00fcc\u00fcn\u00fc ve ayn\u0131 zamanda potansiyel tehlikelerini a\u00e7\u0131k\u00e7a ortaya koydu. Do\u011fru yap\u0131land\u0131r\u0131lmad\u0131\u011f\u0131nda, performans art\u0131r\u0131c\u0131 bir \u00f6zellik, sitenizin g\u00fcncel kalmas\u0131n\u0131 engelleyen bir engele d\u00f6n\u00fc\u015febilir. Bu olaydan sonra ekip, <code>Cache-Control<\/code> ba\u015fl\u0131klar\u0131n\u0131n \u00f6nemini ve her dosya t\u00fcr\u00fc i\u00e7in \u00f6zel stratejiler belirlemenin ne kadar kritik oldu\u011funu bir daha asla unutmad\u0131. Ayr\u0131ca, da\u011f\u0131t\u0131m \u00f6ncesi kapsaml\u0131 \u00f6nbellek testi rutinlerini s\u00fcre\u00e7lerine dahil ettiler.<\/p>\n<blockquote class=\"expert-tip\"><p>\n  Uzman \u0130pucu: Da\u011f\u0131t\u0131m sonras\u0131, sitenizi farkl\u0131 cihazlarda (mobil, masa\u00fcst\u00fc) ve farkl\u0131 taray\u0131c\u0131larda (Chrome, Firefox, Safari) gizli modda kontrol etmek, \u00f6nbellek sorunlar\u0131n\u0131 erken te\u015fhis etmenin en etkili yollar\u0131ndan biridir. Ayr\u0131ca, geli\u015ftirici ara\u00e7lar\u0131ndaki &#8220;Disable cache&#8221; se\u00e7ene\u011fini kullanarak test yapmak da faydal\u0131d\u0131r.\n<\/p><\/blockquote>\n<h2><code>firebase.json<\/code> ile \u00d6nbellek Y\u00f6netimi: Cache-Control Ba\u015fl\u0131klar\u0131n\u0131 Nas\u0131l Ayarlar\u0131z?<\/h2>\n<p>Firebase Hosting&#8217;de \u00f6nbellek davran\u0131\u015f\u0131n\u0131 kontrol etmenin anahtar\u0131, projenizin k\u00f6k dizininde bulunan <code>firebase.json<\/code> dosyas\u0131d\u0131r. Bu dosya, uygulaman\u0131z\u0131n da\u011f\u0131t\u0131m\u0131n\u0131 ve hosting ayarlar\u0131n\u0131 tan\u0131mlayan g\u00fc\u00e7l\u00fc bir yap\u0131land\u0131rma arac\u0131d\u0131r. \u00d6zellikle <code>hosting<\/code> b\u00f6l\u00fcm\u00fcn\u00fcn alt\u0131ndaki <code>headers<\/code> dizisi, HTTP yan\u0131t ba\u015fl\u0131klar\u0131n\u0131 \u00f6zelle\u015ftirmenize olanak tan\u0131r ve <code>Cache-Control<\/code> ba\u015fl\u0131klar\u0131n\u0131 burada ayarlayarak \u00f6nbellekleme stratejinizi belirleyebilirsiniz.<\/p>\n<p>Farkl\u0131 dosya t\u00fcrleri ve kullan\u0131m senaryolar\u0131 i\u00e7in \u00f6zel \u00f6nbellekleme kurallar\u0131 tan\u0131mlamak esast\u0131r. \u0130\u015fte yayg\u0131n senaryolar ve \u00f6rnek <code>firebase.json<\/code> yap\u0131land\u0131rmalar\u0131:<\/p>\n<h3>1. HTML Dosyalar\u0131 i\u00e7in S\u0131n\u0131rl\u0131 veya Hi\u00e7 \u00d6nbellekleme<\/h3>\n<p>Uygulaman\u0131z\u0131n temel HTML dosyas\u0131 (genellikle <code>index.html<\/code>), genellikle en s\u0131k g\u00fcncellenen veya en kritik i\u00e7eri\u011fi bar\u0131nd\u0131ran dosyalardan biridir. Kullan\u0131c\u0131lar\u0131n her zaman en g\u00fcncel HTML&#8217;i g\u00f6rmesini sa\u011flamak i\u00e7in, bu dosya i\u00e7in k\u0131sa s\u00fcreli veya hi\u00e7 \u00f6nbellekleme \u00f6nermiyoruz. <code>max-age=0, no-cache, no-store, must-revalidate<\/code> ba\u015fl\u0131\u011f\u0131, taray\u0131c\u0131lar\u0131n ve CDN&#8217;in bu dosyay\u0131 asla \u00f6nbelle\u011fe almamas\u0131n\u0131 veya her talepte sunucudan do\u011frulamalar\u0131n\u0131 sa\u011flar.<\/p>\n<pre><code>\n{\n  \"hosting\": {\n    \"public\": \"public\",\n    \"ignore\": [\n      \"firebase.json\",\n      \"**\/.*\",\n      \"<strong>\/node_modules\/<\/strong>\"\n    ],\n    \"headers\": [\n      {\n        \"source\": \"\/index.html\",\n        \"headers\": [\n          {\n            \"key\": \"Cache-Control\",\n            \"value\": \"max-age=0, no-cache, no-store, must-revalidate\"\n          }\n        ]\n      },\n      {\n        \"source\": \"**\/*.html\",\n        \"headers\": [\n          {\n            \"key\": \"Cache-Control\",\n            \"value\": \"max-age=0, no-cache, no-store, must-revalidate\"\n          }\n        ]\n      }\n    ]\n  }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte, <code>\/index.html<\/code> ve t\u00fcm di\u011fer <code>.html<\/code> dosyalar\u0131 i\u00e7in \u00f6nbellekleme tamamen devre d\u0131\u015f\u0131 b\u0131rak\u0131lm\u0131\u015ft\u0131r. <code>max-age=0<\/code> s\u00fcrenin 0 saniye oldu\u011funu belirtir, <code>no-cache<\/code> taray\u0131c\u0131n\u0131n her zaman sunucudan do\u011frulamas\u0131 gerekti\u011fini s\u00f6yler, <code>no-store<\/code> ise dosyan\u0131n hi\u00e7bir yerde depolanmamas\u0131n\u0131 emreder. <code>must-revalidate<\/code> ise \u00f6nbelle\u011fin s\u00fcresi dolsa bile, tekrar kullanmadan \u00f6nce mutlaka sunucu ile do\u011frulanmas\u0131 gerekti\u011fini belirtir. Bu ayar, \u00f6zellikle tek sayfa uygulamalar\u0131n\u0131n (SPA) ana HTML dosyas\u0131n\u0131n her zaman g\u00fcncel kalmas\u0131 i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h3>2. Statik Kaynaklar (CSS, JS, Resimler) i\u00e7in Uzun S\u00fcreli \u00d6nbellekleme<\/h3>\n<p>Statik dosyalar (stil sayfalar\u0131, JavaScript kodlar\u0131, resimler, fontlar) genellikle \u00e7ok s\u0131k de\u011fi\u015fmez. Bunlar i\u00e7in uzun s\u00fcreli \u00f6nbellekleme, sitenizin performans\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. Ancak, bu dosyalar\u0131 g\u00fcncelledi\u011finizde, kullan\u0131c\u0131lar\u0131n yeni s\u00fcr\u00fcmlerini g\u00f6rmesini sa\u011flamak i\u00e7in \"cache busting\" ad\u0131 verilen bir tekni\u011fe ihtiyac\u0131n\u0131z olacakt\u0131r. Bu teknik, dosya adlar\u0131na veya URL'lere bir versiyon numaras\u0131 veya hash eklemeyi i\u00e7erir (\u00f6rn: <code>app.1a2b3c.css<\/code> veya <code>main.js?v=2<\/code>). Bu sayede, dosyan\u0131n i\u00e7eri\u011fi de\u011fi\u015fti\u011finde URL de de\u011fi\u015fir ve taray\u0131c\u0131\/CDN bunu yepyeni bir dosya olarak alg\u0131layarak \u00f6nbelle\u011findeki eski s\u00fcr\u00fcm\u00fc kullanmaz.<\/p>\n<pre><code>\n{\n  \"hosting\": {\n    \"public\": \"public\",\n    \"ignore\": [\n      \"firebase.json\",\n      \"**\/.*\",\n      \"<strong>\/node_modules\/<\/strong>\"\n    ],\n    \"headers\": [\n      {\n        \"source\": \"\/index.html\",\n        \"headers\": [\n          {\n            \"key\": \"Cache-Control\",\n            \"value\": \"max-age=0, no-cache, no-store, must-revalidate\"\n          }\n        ]\n      },\n      {\n        \"source\": \"**\/*.@(css|js|webp|gif|jpg|jpeg|png|svg|ico|eot|ttf|woff|woff2)\",\n        \"headers\": [\n          {\n            \"key\": \"Cache-Control\",\n            \"value\": \"public, max-age=31536000\"\n          }\n        ]\n      },\n      {\n        \"source\": \"**\/*.json\",\n        \"headers\": [\n          {\n            \"key\": \"Cache-Control\",\n            \"value\": \"max-age=3600\"\n          }\n        ]\n      }\n    ]\n  }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte:<\/p>\n<ul>\n<li>\n        <code>**\/*.@(css|js|webp|gif|jpg|jpeg|png|svg|ico|eot|ttf|woff|woff2)<\/code> ifadesi, belirtilen t\u00fcm dosya uzant\u0131lar\u0131na sahip dosyalar\u0131 hedefler.\n    <\/li>\n<li>\n        <code>public, max-age=31536000<\/code> ba\u015fl\u0131\u011f\u0131, bu dosyalar\u0131n 1 y\u0131l boyunca (31,536,000 saniye) hem CDN hem de taray\u0131c\u0131 taraf\u0131ndan \u00f6nbelle\u011fe al\u0131nabilece\u011fini belirtir. Bu sayede, kullan\u0131c\u0131lar sitenizi tekrar ziyaret ettiklerinde bu dosyalar\u0131 yeniden indirmek zorunda kalmazlar.\n    <\/li>\n<li>\n        <code>**\/*.json<\/code> dosyalar\u0131 i\u00e7in ise 1 saatlik (3600 saniye) bir \u00f6nbellekleme s\u00fcresi belirlenmi\u015ftir. Bu, API'lerden al\u0131nan dinamik verilerin \u00f6nbelle\u011fe al\u0131nmas\u0131 gerekti\u011finde, ancak \u00e7ok uzun s\u00fcre ge\u00e7erli kalmamas\u0131 istendi\u011finde faydal\u0131 olabilir.\n    <\/li>\n<\/ul>\n<h3>3. G\u00fcvenlik Ba\u015fl\u0131klar\u0131 ve Mobil Uyum (\u0130leri Seviye)<\/h3>\n<p><code>Cache-Control<\/code> ba\u015fl\u0131klar\u0131n\u0131n yan\u0131 s\u0131ra, g\u00fcvenlik i\u00e7in di\u011fer HTTP ba\u015fl\u0131klar\u0131n\u0131 da ekleyebilirsiniz. Ayr\u0131ca, mobil uyumlu HTML \u00e7\u0131kt\u0131s\u0131 i\u00e7in do\u011frudan <code>firebase.json<\/code> i\u00e7inde bir yap\u0131land\u0131rma olmasa da, <code>Cache-Control<\/code> stratejileri mobil kullan\u0131c\u0131 deneyimini do\u011frudan etkiler. H\u0131zl\u0131 y\u00fcklenen siteler, mobil kullan\u0131c\u0131lar i\u00e7in olmazsa olmazd\u0131r. <code>firebase.json<\/code>'da ayr\u0131ca g\u00fcvenlik ba\u015fl\u0131klar\u0131 da tan\u0131mlayabiliriz:<\/p>\n<pre><code>\n{\n  \"hosting\": {\n    \"public\": \"public\",\n    \"ignore\": [\n      \"firebase.json\",\n      \"**\/.*\",\n      \"<strong>\/node_modules\/<\/strong>\"\n    ],\n    \"headers\": [\n      {\n        \"source\": \"\/index.html\",\n        \"headers\": [\n          {\n            \"key\": \"Cache-Control\",\n            \"value\": \"max-age=0, no-cache, no-store, must-revalidate\"\n          }\n        ]\n      },\n      {\n        \"source\": \"**\/*.@(css|js|webp|gif|jpg|jpeg|png|svg|ico|eot|ttf|woff|woff2)\",\n        \"headers\": [\n          {\n            \"key\": \"Cache-Control\",\n            \"value\": \"public, max-age=31536000\"\n          }\n        ]\n      },\n      {\n        \"source\": \"**\",\n        \"headers\": [\n          {\n            \"key\": \"X-Frame-Options\",\n            \"value\": \"DENY\"\n          },\n          {\n            \"key\": \"X-Content-Type-Options\",\n            \"value\": \"nosniff\"\n          },\n          {\n            \"key\": \"Content-Security-Policy\",\n            \"value\": \"default-src 'self' https:\/\/*.firebaseio.com; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';\"\n          }\n        ]\n      }\n    ]\n  }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte, <code>**<\/code> (t\u00fcm dosyalar) i\u00e7in \u00e7e\u015fitli g\u00fcvenlik ba\u015fl\u0131klar\u0131 eklenmi\u015ftir. Bu ba\u015fl\u0131klar, sitenizi XSS, clickjacking gibi sald\u0131r\u0131lara kar\u015f\u0131 korumaya yard\u0131mc\u0131 olur. Firebase Hosting, bu ba\u015fl\u0131klar\u0131 otomatik olarak uygular. Mobil uyumluluk, sitenizin HTML ve CSS yap\u0131s\u0131yla ilgilidir. Ancak do\u011fru \u00f6nbellekleme, sitenizin mobil cihazlarda da h\u0131zla y\u00fcklenmesini sa\u011flayarak dolayl\u0131 yoldan mobil deneyimi iyile\u015ftirir.<\/p>\n<pre><code class=\"language-css\">\n\/* Mobil uyumlu tasar\u0131m i\u00e7in \u00f6rnek bir CSS media query *\/\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n    padding: 15px;\n  }\n  .header-menu {\n    flex-direction: column;\n  }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Bu CSS kodu, mobil cihazlarda (geni\u015fli\u011fi 768 pikselden az olan ekranlarda) belirli elementlerin nas\u0131l g\u00f6r\u00fcnece\u011fini ayarlayan basit bir \u00f6rnektir. <code>firebase.json<\/code> do\u011frudan bu t\u00fcr CSS'i y\u00f6netmese de, do\u011fru \u00f6nbellekleme stratejileri, bu CSS dosyas\u0131n\u0131n mobil cihazlarda h\u0131zl\u0131ca \u00f6nbelle\u011fe al\u0131nmas\u0131n\u0131 ve kullan\u0131lmas\u0131n\u0131 sa\u011flar.<\/p>\n<p><code>firebase.json<\/code> dosyas\u0131ndaki <code>headers<\/code> b\u00f6l\u00fcm\u00fcn\u00fc dikkatlice yap\u0131land\u0131rarak, uygulaman\u0131z\u0131n performans\u0131n\u0131 art\u0131rabilir ve \u00f6nbellek sorunlar\u0131ndan kaynaklanan can s\u0131k\u0131c\u0131 durumlar\u0131n \u00f6n\u00fcne ge\u00e7ebilirsiniz. Her da\u011f\u0131t\u0131m \u00f6ncesinde bu ayarlar\u0131 g\u00f6zden ge\u00e7irmek ve uygulaman\u0131z\u0131n ihtiya\u00e7lar\u0131na g\u00f6re ayarlamak, sorunsuz bir kullan\u0131c\u0131 deneyimi i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<h2>CDN ve Taray\u0131c\u0131 \u00d6nbelle\u011fi Aras\u0131ndaki Farklar: Derinlemesine Bir Bak\u0131\u015f<\/h2>\n<p>\u00d6nbellekleme, web performans\u0131n\u0131 art\u0131rman\u0131n vazge\u00e7ilmez bir par\u00e7as\u0131d\u0131r. Ancak bu s\u00fcrecin nas\u0131l i\u015fledi\u011fini tam olarak anlamak i\u00e7in, CDN (Content Delivery Network) \u00f6nbelle\u011fi ile taray\u0131c\u0131 (istemci) \u00f6nbelle\u011fi aras\u0131ndaki farklar\u0131 bilmek \u00f6nemlidir. Her ikisi de ayn\u0131 amaca hizmet etse de (kaynaklar\u0131n daha h\u0131zl\u0131 sunulmas\u0131), farkl\u0131 katmanlarda ve farkl\u0131 kurallarla \u00e7al\u0131\u015f\u0131rlar.<\/p>\n<h3>CDN \u00d6nbelle\u011fi (Edge Cache)<\/h3>\n<p>CDN \u00f6nbelle\u011fi, sunucu taraf\u0131nda, genellikle son kullan\u0131c\u0131ya co\u011frafi olarak yak\u0131n olan \"edge\" sunucularda bulunur. Firebase Hosting, Google'\u0131n k\u00fcresel CDN altyap\u0131s\u0131n\u0131 kullan\u0131r. Bu ne anlama geliyor? Sitenizin dosyalar\u0131n\u0131 da\u011f\u0131tt\u0131\u011f\u0131n\u0131zda, bu dosyalar d\u00fcnya genelindeki bir\u00e7ok veri merkezine kopyalan\u0131r. Bir kullan\u0131c\u0131 sitenizi ziyaret etti\u011finde:<\/p>\n<ol>\n<li>Kullan\u0131c\u0131n\u0131n iste\u011fi, ona en yak\u0131n CDN sunucusuna y\u00f6nlendirilir.<\/li>\n<li>CDN sunucusu, istenen dosyay\u0131 \u00f6nbelle\u011finde arar.<\/li>\n<li>E\u011fer dosya \u00f6nbellekte varsa ve ge\u00e7erliyse (yani <code>Cache-Control<\/code> ba\u015fl\u0131\u011f\u0131ndaki <code>max-age<\/code> s\u00fcresi dolmam\u0131\u015fsa), dosya do\u011frudan bu CDN sunucusundan kullan\u0131c\u0131ya g\u00f6nderilir. Bu i\u015flem \u00e7ok h\u0131zl\u0131 ger\u00e7ekle\u015fir.<\/li>\n<li>E\u011fer dosya \u00f6nbellekte yoksa veya s\u00fcresi dolmu\u015fsa, CDN sunucusu dosyay\u0131 orijinal kayna\u011f\u0131ndan (Firebase Storage veya sizin uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 sunucu) \u00e7eker, kendi \u00f6nbelle\u011fine kaydeder ve ard\u0131ndan kullan\u0131c\u0131ya g\u00f6nderir.<\/li>\n<\/ol>\n<p>CDN \u00f6nbelle\u011fi, bir\u00e7ok kullan\u0131c\u0131ya ayn\u0131 anda hizmet verebildi\u011fi i\u00e7in olduk\u00e7a etkilidir. Ayn\u0131 dosya, binlerce farkl\u0131 kullan\u0131c\u0131 taraf\u0131ndan istendi\u011finde bile sadece bir kez orijinal kaynaktan \u00e7ekilir ve ard\u0131ndan h\u0131zl\u0131 bir \u015fekilde da\u011f\u0131t\u0131l\u0131r. Bu, ana sunucunuzun y\u00fck\u00fcn\u00fc azalt\u0131r ve genel performans\u0131 art\u0131r\u0131r. Ancak, CDN \u00f6nbelle\u011finin s\u00fcresi \u00e7ok uzun ayarlan\u0131rsa, bir dosyay\u0131 g\u00fcncelledi\u011finizde kullan\u0131c\u0131lar hala eski s\u00fcr\u00fcm\u00fc CDN'den alabilir. Firebase'de <code>firebase deploy<\/code> komutu, CDN'deki eski \u00f6nbelle\u011fi otomatik olarak ge\u00e7ersiz k\u0131lmaya \u00e7al\u0131\u015fsa da, bu s\u00fcre\u00e7 bazen birka\u00e7 dakika s\u00fcrebilir ve hatta baz\u0131 durumlarda tam olarak garantili de\u011fildir (\u00f6zellikle \u00e7ok uzun <code>max-age<\/code> s\u00fcreleri belirlendiyse).<\/p>\n<h3>Taray\u0131c\u0131 \u00d6nbelle\u011fi (Client-side Cache)<\/h3>\n<p>Taray\u0131c\u0131 \u00f6nbelle\u011fi ise kullan\u0131c\u0131n\u0131n kendi bilgisayar\u0131nda, web taray\u0131c\u0131s\u0131 taraf\u0131ndan y\u00f6netilir. Bir kullan\u0131c\u0131 bir web sitesini ziyaret etti\u011finde, taray\u0131c\u0131 HTML, CSS, JavaScript, resimler gibi kaynaklar\u0131 indirir. Bu kaynaklar i\u00e7in <code>Cache-Control<\/code> ba\u015fl\u0131\u011f\u0131 uygun \u015fekilde ayarlanm\u0131\u015fsa, taray\u0131c\u0131 bu dosyalar\u0131 yerel diskinde saklar. Kullan\u0131c\u0131 ayn\u0131 sayfay\u0131 veya siteyi tekrar ziyaret etti\u011finde:<\/p>\n<ol>\n<li>Taray\u0131c\u0131, istenen dosya i\u00e7in kendi \u00f6nbelle\u011fine bakar.<\/li>\n<li>E\u011fer dosya \u00f6nbellekte varsa ve ge\u00e7erliyse (<code>max-age<\/code> s\u00fcresi dolmam\u0131\u015fsa), taray\u0131c\u0131 dosyay\u0131 sunucuya sormadan do\u011frudan kendi \u00f6nbelle\u011finden kullan\u0131r. Bu, sayfan\u0131n an\u0131nda y\u00fcklenmesini sa\u011flar.<\/li>\n<li>E\u011fer dosyan\u0131n s\u00fcresi dolmu\u015fsa veya \u00f6nbellekte yoksa, taray\u0131c\u0131 dosyay\u0131 sunucudan (veya CDN'den) tekrar talep eder. E\u011fer sunucu <code>304 Not Modified<\/code> yan\u0131t\u0131 verirse (yani dosya de\u011fi\u015fmemi\u015fse), taray\u0131c\u0131 yine kendi \u00f6nbelle\u011findeki s\u00fcr\u00fcm\u00fc kullan\u0131r.<\/li>\n<\/ol>\n<p>Taray\u0131c\u0131 \u00f6nbelle\u011fi, bireysel kullan\u0131c\u0131 deneyimini do\u011frudan etkiler. Do\u011fru kullan\u0131ld\u0131\u011f\u0131nda, tekrar eden ziyaretlerde sitenin neredeyse an\u0131nda y\u00fcklenmesini sa\u011flayarak kullan\u0131c\u0131 memnuniyetini art\u0131r\u0131r. Ancak, CDN \u00f6nbelle\u011finde oldu\u011fu gibi, taray\u0131c\u0131 \u00f6nbelle\u011finin s\u00fcresi \u00e7ok uzun ayarlan\u0131rsa ve dosya versiyonlama (cache busting) kullan\u0131lmazsa, kullan\u0131c\u0131lar g\u00fcncellemeleri ka\u00e7\u0131rabilirler.<\/p>\n<h3>\u0130ki \u00d6nbelle\u011fin Bir Arada \u00c7al\u0131\u015fmas\u0131 ve Sorunlar\u0131<\/h3>\n<p>Her iki \u00f6nbellek t\u00fcr\u00fc de <code>Cache-Control<\/code> HTTP ba\u015fl\u0131klar\u0131 taraf\u0131ndan y\u00f6nlendirilir. Bir istek \u00f6nce taray\u0131c\u0131 \u00f6nbelle\u011fine, ard\u0131ndan CDN \u00f6nbelle\u011fine, en sonunda da origin sunucuya gider. Bu katmanl\u0131 yap\u0131 genellikle performans i\u00e7in harikad\u0131r. Ancak sorunlar, bu katmanlar aras\u0131ndaki senkronizasyon eksikli\u011finden kaynaklan\u0131r:<\/p>\n<ul>\n<li>Bir dosyay\u0131 g\u00fcncellediniz, ancak taray\u0131c\u0131 \u00f6nbelle\u011fi hala eski s\u00fcr\u00fcm\u00fc g\u00f6steriyor.<\/li>\n<li>Taray\u0131c\u0131 \u00f6nbelle\u011fini temizlediniz, ancak CDN hala eski s\u00fcr\u00fcm\u00fc servis ediyor.<\/li>\n<li>Hem taray\u0131c\u0131 hem de CDN'de eski bir s\u00fcr\u00fcm\u00fcn tak\u0131l\u0131 kalmas\u0131, en zor te\u015fhis edilen durumlardan biridir.<\/li>\n<\/ul>\n<p>Bu sorunlar\u0131 a\u015fmak i\u00e7in:<\/p>\n<ul>\n<li>Kritik ve s\u0131k de\u011fi\u015fen dosyalar (HTML gibi) i\u00e7in taray\u0131c\u0131 ve CDN \u00f6nbelle\u011fini m\u00fcmk\u00fcn oldu\u011funca k\u0131sa tutun veya devre d\u0131\u015f\u0131 b\u0131rak\u0131n (<code>max-age=0, no-cache, no-store<\/code>).<\/li>\n<li>Statik dosyalar (CSS, JS, resimler) i\u00e7in uzun s\u00fcreli \u00f6nbellekleme kullan\u0131n, ancak bu dosyalar\u0131n adlar\u0131na veya URL'lerine her g\u00fcncellemede de\u011fi\u015fen bir versiyonlama (cache busting) parametresi ekleyin (\u00f6rn: <code>\/assets\/main.12345.css<\/code>). Bu, taray\u0131c\u0131n\u0131n ve CDN'in her zaman yeni bir dosyay\u0131 indirmesini sa\u011flar.<\/li>\n<\/ul>\n<p>Bu dengeyi do\u011fru kurmak, hem h\u0131zl\u0131 hem de her zaman g\u00fcncel bir web sitesi sunman\u0131n anahtar\u0131d\u0131r. Firebase Hosting'in <code>firebase.json<\/code> dosyas\u0131, bu kontrol\u00fc size vererek \u00f6nbellek stratejinizi hassas bir \u015fekilde ayarlaman\u0131z\u0131 sa\u011flar. Bu sayede, hem performanstan \u00f6d\u00fcn vermezsiniz hem de kullan\u0131c\u0131lar\u0131n\u0131z\u0131n g\u00fcncel i\u00e7eri\u011fi ka\u00e7\u0131rma riskini minimize edersiniz.<\/p>\n<h2>Ger\u00e7ek Zamanl\u0131 Senaryolar ve Geli\u015fmi\u015f Stratejiler: Dinamik \u0130\u00e7erik ve API \u00d6nbellekleme<\/h2>\n<p>Statik siteler i\u00e7in \u00f6nbellekleme stratejileri olduk\u00e7a basittir, ancak i\u015f dinamik i\u00e7erik sunan veya API'lerle etkile\u015fime giren uygulamalara geldi\u011finde, durum karma\u015f\u0131kla\u015fabilir. Firebase Hosting, asl\u0131nda statik dosyalar\u0131 bar\u0131nd\u0131rmak i\u00e7in tasarlanm\u0131\u015ft\u0131r, ancak Firebase Functions gibi di\u011fer hizmetlerle entegre edildi\u011finde dinamik i\u00e7erik sunma kabiliyeti de kazan\u0131r. Bu senaryolarda \u00f6nbellekleme sorunlar\u0131n\u0131 \u00f6nlemek ve performans\u0131 optimize etmek i\u00e7in daha geli\u015fmi\u015f stratejilere ihtiyac\u0131m\u0131z var.<\/p>\n<h3>1. Dinamik \u0130\u00e7erik ve API Yan\u0131tlar\u0131 i\u00e7in Firebase Functions ile \u00d6nbellekleme<\/h3>\n<p>E\u011fer Firebase Functions kullanarak dinamik API endpoint'leri veya sunucu taraf\u0131nda i\u015flenen sayfalar sunuyorsan\u0131z, <code>Cache-Control<\/code> ba\u015fl\u0131klar\u0131n\u0131 Function'\u0131n\u0131z\u0131n yan\u0131tlar\u0131nda da ayarlaman\u0131z gerekir. Bu, Function'\u0131n\u0131z\u0131n \u00fcretti\u011fi dinamik verilerin CDN veya taray\u0131c\u0131 taraf\u0131ndan nas\u0131l \u00f6nbelle\u011fe al\u0131naca\u011f\u0131n\u0131 kontrol etmenizi sa\u011flar. \u00d6rne\u011fin, s\u0131k de\u011fi\u015fen veriler i\u00e7in k\u0131sa bir \u00f6nbellek s\u00fcresi veya hi\u00e7 \u00f6nbellek kullanmamak isteyebilirsiniz:<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ Firebase Function \u00f6rne\u011fi\nconst functions = require(\"firebase-functions\");\n\nexports.dynamicContent = functions.https.onRequest((req, res) => {\n  \/\/ Dinamik i\u00e7erik olu\u015ftur\n  const data = {\n    timestamp: new Date().toISOString(),\n    message: \"Bu i\u00e7erik dinamik olarak olu\u015fturuldu.\"\n  };\n\n  \/\/ Cache-Control ba\u015fl\u0131\u011f\u0131n\u0131 ayarla\n  \/\/ 5 dakika boyunca CDN ve taray\u0131c\u0131 taraf\u0131ndan \u00f6nbelle\u011fe al\u0131nabilir\n  res.set(\"Cache-Control\", \"public, max-age=300, s-maxage=600\"); \n\n  res.status(200).json(data);\n});\n<\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki \u00f6rnekte, <code>Cache-Control: public, max-age=300, s-maxage=600<\/code> ba\u015fl\u0131\u011f\u0131 kullan\u0131lm\u0131\u015ft\u0131r. <code>max-age=300<\/code> taray\u0131c\u0131 \u00f6nbelle\u011fi i\u00e7in 5 dakikal\u0131k bir s\u00fcre belirlerken, <code>s-maxage=600<\/code> ise CDN (Shared Cache) i\u00e7in 10 dakikal\u0131k bir s\u00fcre belirler. <code>s-maxage<\/code>, \u00f6zellikle CDN'ler i\u00e7in daha uzun bir \u00f6nbellekleme s\u00fcresi sa\u011flamak istedi\u011finizde kullan\u0131\u015fl\u0131d\u0131r, \u00e7\u00fcnk\u00fc CDN'ler bir\u00e7ok kullan\u0131c\u0131ya ayn\u0131 anda hizmet verirken taray\u0131c\u0131 \u00f6nbelle\u011fi bireyseldir. Bu sayede, Function'\u0131n\u0131z s\u0131k \u00e7al\u0131\u015fmaz, ancak kullan\u0131c\u0131lar nispeten g\u00fcncel verileri h\u0131zl\u0131ca alabilir.<\/p>\n<h3>2. Client-Side Cache Busting ve Service Workers<\/h3>\n<p>Tek sayfa uygulamalar\u0131 (SPA) i\u00e7in, JavaScript ve CSS dosyalar\u0131n\u0131n versiyonlanmas\u0131 (cache busting) en yayg\u0131n ve etkili y\u00f6ntemdir. Webpack, Rollup gibi build ara\u00e7lar\u0131, dosya adlar\u0131na otomatik olarak hash ekleyebilir (\u00f6rn: <code>app.b1a2c3d4.js<\/code>). Bu sayede, dosya i\u00e7eri\u011fi de\u011fi\u015fti\u011finde ad\u0131 da de\u011fi\u015fir ve taray\u0131c\u0131 ile CDN yeni dosyay\u0131 indirmek zorunda kal\u0131r. <\/p>\n<p>Service Workers (Hizmet \u00c7al\u0131\u015fanlar\u0131) ise daha da ileri giderek, uygulaman\u0131z\u0131n taray\u0131c\u0131 \u00f6nbelle\u011fini tamamen programatik olarak kontrol etmenizi sa\u011flar. Service Worker'lar, a\u011f isteklerini yakalayabilir, \u00f6nbelle\u011fe alabilir ve hatta \u00e7evrimd\u0131\u015f\u0131 \u00e7al\u0131\u015fma yetene\u011fi sa\u011flayabilirler. \u00d6rne\u011fin, bir \"stale-while-revalidate\" stratejisi uygulayabilirsiniz:<\/p>\n<ol>\n<li>\u0130stek geldi\u011finde \u00f6nbellekten an\u0131nda bir yan\u0131t ver.<\/li>\n<li>Arka planda a\u011fdan yeni veriyi al.<\/li>\n<li>Yeni veri geldi\u011finde \u00f6nbelle\u011fi g\u00fcncelle ve bir sonraki istekte yeni veriyi kullan.<\/li>\n<\/ol>\n<p>Bu, kullan\u0131c\u0131ya her zaman an\u0131nda bir yan\u0131t verirken, arka planda i\u00e7eri\u011fin g\u00fcncel kalmas\u0131n\u0131 sa\u011flar. Workbox gibi k\u00fct\u00fcphaneler, Service Worker'lar\u0131 Firebase Hosting ile kolayca entegre etmenize yard\u0131mc\u0131 olur.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ Service Worker kayd\u0131 (ana JS dosyas\u0131nda)\nif ('serviceWorker' in navigator) {\n  window.addEventListener('load', () => {\n    navigator.serviceWorker.register('\/service-worker.js')\n      .then(registration => {\n        console.log('Service Worker kay\u0131tl\u0131: ', registration);\n      })\n      .catch(registrationError => {\n        console.log('Service Worker kayd\u0131 ba\u015far\u0131s\u0131z: ', registrationError);\n      });\n  });\n}\n\n\/\/ service-worker.js i\u00e7eri\u011fi (\u00f6rnek - Workbox kullanmadan)\nconst CACHE_NAME = 'my-app-cache-v1';\nconst urlsToCache = [\n  '\/',\n  '\/index.html',\n  '\/styles\/main.css',\n  '\/scripts\/app.js',\n  '\/images\/logo.png'\n];\n\nself.addEventListener('install', event => {\n  event.waitUntil(\n    caches.open(CACHE_NAME)\n      .then(cache => {\n        return cache.addAll(urlsToCache);\n      })\n  );\n});\n\nself.addEventListener('fetch', event => {\n  event.respondWith(\n    caches.match(event.request)\n      .then(response => {\n        if (response) {\n          return response; \/\/ \u00d6nbellekten yan\u0131t ver\n        }\n        return fetch(event.request); \/\/ A\u011fdan getir\n      })\n  );\n});\n<\/pre>\n<p><\/code><\/p>\n<p>Bu basit Service Worker \u00f6rne\u011fi, belirtilen URL'leri \u00f6nbelle\u011fe al\u0131r ve \u00e7evrimd\u0131\u015f\u0131 oldu\u011funda bunlar\u0131 \u00f6nbellekten sunar. Ger\u00e7ek d\u00fcnya senaryolar\u0131nda, Workbox gibi daha geli\u015fmi\u015f k\u00fct\u00fcphaneler kullanarak, \u00f6nbellekleme stratejilerini (network-first, cache-first, stale-while-revalidate vb.) \u00e7ok daha kolay bir \u015fekilde uygulayabilirsiniz.<\/p>\n<h3>3. \"Revalidate on Deploy\" ve Versiyonlama<\/h3>\n<p>Firebase Hosting, her da\u011f\u0131t\u0131mda yeni bir versiyon ID'si olu\u015fturur. Bu, dosyalar\u0131n\u0131z\u0131n yeni bir \"s\u00fcr\u00fcm\" olarak kabul edilmesini sa\u011flar ve CDN'in genellikle eski \u00f6nbelle\u011fi ge\u00e7ersiz k\u0131lmas\u0131n\u0131 tetikler. Ancak bu, taray\u0131c\u0131 \u00f6nbelle\u011fi i\u00e7in her zaman ge\u00e7erli de\u011fildir. Bu y\u00fczden, statik dosyalar i\u00e7in versiyonlama (\u00f6rne\u011fin dosya ad\u0131nda hash kullanma) en g\u00fcvenilir y\u00f6ntemdir. B\u00f6ylece her da\u011f\u0131t\u0131mda <code>index.html<\/code> dosyan\u0131z yeni JavaScript ve CSS dosyalar\u0131na (yeni hashli adlar\u0131yla) referans verecek ve taray\u0131c\u0131 da bunlar\u0131 yeni dosyalar olarak g\u00f6r\u00fcp indirecektir.<\/p>\n<p>Firebase Hosting'in sa\u011flad\u0131\u011f\u0131 bu katmanl\u0131 \u00f6nbellekleme yap\u0131lar\u0131n\u0131 do\u011fru anlay\u0131p y\u00f6netmek, uygulaman\u0131z\u0131n sadece h\u0131zl\u0131 de\u011fil, ayn\u0131 zamanda her zaman g\u00fcncel kalmas\u0131n\u0131 sa\u011flar. Dinamik i\u00e7erik ve API \u00f6nbelleklemesi konusunda dikkatli olmak, \u00f6zellikle kullan\u0131c\u0131 deneyimini do\u011frudan etkileyen kritik anlarda sizi b\u00fcy\u00fck sorunlardan kurtarabilir.<\/p>\n<h2>Kesin \u00c7\u00f6z\u00fcm Yollar\u0131: \u00d6nbelle\u011fi Temizleme ve Yay\u0131ndan Kald\u0131rma Teknikleri<\/h2>\n<p>Her ne kadar do\u011fru \u00f6nbellek stratejileri belirlemek sorunlar\u0131n \u00e7o\u011funu engellese de, bazen i\u015fler beklendi\u011fi gibi gitmez ve \"\u00f6nbelle\u011fi temizleme\" veya \"ge\u00e7ersiz k\u0131lma\" ihtiyac\u0131 do\u011far. Firebase Hosting, bu t\u00fcr durumlar i\u00e7in baz\u0131 mekanizmalar sunar.<\/p>\n<h3>1. Da\u011f\u0131t\u0131m (Deployment) Yaparak CDN \u00d6nbelle\u011fini Ge\u00e7ersiz K\u0131lma<\/h3>\n<p>Firebase Hosting'in en temel \u00f6nbellek ge\u00e7ersiz k\u0131lma mekanizmas\u0131, yeni bir da\u011f\u0131t\u0131m (deployment) yapmakt\u0131r. Her <code>firebase deploy<\/code> komutu \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131\u011f\u0131nda, Firebase yeni bir da\u011f\u0131t\u0131m versiyonu olu\u015fturur ve eski dosyalar\u0131n\u0131zla yenilerini de\u011fi\u015ftirir. Firebase'in CDN'i, yeni bir da\u011f\u0131t\u0131m yap\u0131ld\u0131\u011f\u0131nda, g\u00fcncellenen dosyalar\u0131n \u00f6nbelle\u011fini otomatik olarak ge\u00e7ersiz k\u0131lmaya (invalidate etmeye) \u00e7al\u0131\u015f\u0131r. Bu, CDN'in eski dosyalar\u0131 art\u0131k sunmamas\u0131n\u0131 ve yeni dosyalar\u0131 orijinal kaynaktan \u00e7ekmesini sa\u011flar.<\/p>\n<p>Ancak, bu ge\u00e7ersiz k\u0131lma i\u015flemi an\u0131nda ger\u00e7ekle\u015fmeyebilir. K\u00fcresel CDN a\u011f\u0131n\u0131n b\u00fcy\u00fckl\u00fc\u011f\u00fc nedeniyle, de\u011fi\u015fikliklerin t\u00fcm edge sunucular\u0131na yay\u0131lmas\u0131 birka\u00e7 dakika s\u00fcrebilir. Bu s\u00fcre zarf\u0131nda, baz\u0131 kullan\u0131c\u0131lar hala eski i\u00e7eri\u011fi g\u00f6rebilir. Bu nedenle, kritik g\u00fcncellemelerden sonra biraz beklemek veya kullan\u0131c\u0131lar\u0131 taray\u0131c\u0131 \u00f6nbelleklerini temizlemeye y\u00f6nlendirmek gerekebilir.<\/p>\n<h3>2. Cache Busting (\u00d6nbellek Bozma) ile Taray\u0131c\u0131 \u00d6nbelle\u011fini Y\u00f6netme<\/h3>\n<p>Taray\u0131c\u0131 \u00f6nbelle\u011fi, CDN'den ba\u011f\u0131ms\u0131z olarak \u00e7al\u0131\u015f\u0131r ve CDN'in ge\u00e7ersiz k\u0131lma mekanizmas\u0131ndan etkilenmez. Bu y\u00fczden, taray\u0131c\u0131 \u00f6nbelle\u011finin sorun \u00e7\u0131karmas\u0131n\u0131 engellemek i\u00e7in \"cache busting\" tekniklerini kullanmak en iyi yoldur. En yayg\u0131n y\u00f6ntemler \u015funlard\u0131r:<\/p>\n<ul>\n<li>\n        <strong>Dosya Ad\u0131na Hash Ekleme:<\/strong> Her dosya g\u00fcncellemesinde, dosyan\u0131n i\u00e7eri\u011finin bir hash'ini (karma de\u011feri) dosya ad\u0131na eklemek (\u00f6rn: <code>main.css<\/code> yerine <code>main.a1b2c3d4.css<\/code>). Build ara\u00e7lar\u0131 (Webpack, Vite, Parcel) bu i\u015flemi otomatik olarak yapar. Ana HTML dosyan\u0131z bu hash'li dosyalara referans verdi\u011finde, taray\u0131c\u0131 bunlar\u0131 tamamen yeni dosyalar olarak alg\u0131lar ve eski \u00f6nbelle\u011fi kullanmaz.\n    <\/li>\n<li>\n        <strong>Sorgu Parametresi Ekleme:<\/strong> Daha az tavsiye edilse de, dosya URL'sine bir sorgu parametresi eklemek (\u00f6rn: <code>main.js?v=2<\/code>). Her g\u00fcncellemede bu versiyon numaras\u0131n\u0131 art\u0131r\u0131rs\u0131n\u0131z. Ancak baz\u0131 ara sunucular sorgu parametresi i\u00e7eren URL'leri farkl\u0131 \u015fekilde \u00f6nbelle\u011fe alabilir veya hi\u00e7 \u00f6nbelle\u011fe almayabilir, bu y\u00fczden hash ekleme y\u00f6ntemi daha g\u00fcvenilirdir.\n    <\/li>\n<\/ul>\n<p>Bu y\u00f6ntemler, \u00f6zellikle JavaScript ve CSS dosyalar\u0131 i\u00e7in kritiktir. <code>firebase.json<\/code>'da <code>max-age=31536000<\/code> gibi uzun s\u00fcreli \u00f6nbellekleme ba\u015fl\u0131klar\u0131 belirledi\u011finizde, bu tekniklerle dosyalar\u0131n g\u00fcncel kalmas\u0131n\u0131 sa\u011flars\u0131n\u0131z.<\/p>\n<h3>3. <code>Cache-Control<\/code> Ba\u015fl\u0131klar\u0131n\u0131 <code>max-age=0, no-cache, no-store<\/code> Olarak Ayarlayarak An\u0131nda Ge\u00e7ersiz K\u0131lma<\/h3>\n<p>E\u011fer bir dosyan\u0131n kesinlikle \u00f6nbelle\u011fe al\u0131nmamas\u0131n\u0131 veya her zaman sunucudan do\u011frulanmas\u0131n\u0131 istiyorsan\u0131z, <code>firebase.json<\/code>'da veya Firebase Functions yan\u0131t\u0131nda bu ba\u015fl\u0131klar\u0131 kullanabilirsiniz:<\/p>\n<pre><code class=\"language-json\">\n{\n  \"hosting\": {\n    \/\/ ...\n    \"headers\": [\n      {\n        \"source\": \"\/path\/to\/critical.html\",\n        \"headers\": [\n          {\n            \"key\": \"Cache-Control\",\n            \"value\": \"max-age=0, no-cache, no-store, must-revalidate\"\n          }\n        ]\n      }\n    ]\n  }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Bu ayar, belirtilen dosyan\u0131n hem taray\u0131c\u0131 hem de CDN taraf\u0131ndan asla \u00f6nbelle\u011fe al\u0131nmamas\u0131n\u0131 veya her zaman sunucu ile yeniden do\u011frulanmas\u0131n\u0131 emreder. Bu, g\u00fcncellemelerin an\u0131nda etkili olmas\u0131n\u0131 sa\u011flaman\u0131n en kesin yoludur, ancak her istekte dosyan\u0131n yeniden indirilmesi performans\u0131 d\u00fc\u015f\u00fcrecektir. Bu nedenle, bu stratejiyi yaln\u0131zca ger\u00e7ekten kritik ve an\u0131nda g\u00fcncel olmas\u0131 gereken dosyalar i\u00e7in kullanmal\u0131s\u0131n\u0131z.<\/p>\n<h3>4. Taray\u0131c\u0131 \u00d6nbelle\u011fini Manuel Olarak Temizleme (Kullan\u0131c\u0131 Taraf\u0131nda)<\/h3>\n<p>En son \u00e7are olarak veya kullan\u0131c\u0131lar\u0131n\u0131za bilgi vermek amac\u0131yla, taray\u0131c\u0131 \u00f6nbelle\u011fini manuel olarak temizlemelerini \u00f6nerebilirsiniz. Bu, kullan\u0131c\u0131lar\u0131n eski i\u00e7erikten kurtulmalar\u0131n\u0131 sa\u011flar. Ad\u0131mlar genellikle \u015f\u00f6yledir:<\/p>\n<ul>\n<li><strong>Chrome:<\/strong> Ayarlar > Gizlilik ve g\u00fcvenlik > Tarama verilerini temizle.<\/li>\n<li><strong>Firefox:<\/strong> Ayarlar > Gizlilik ve G\u00fcvenlik > \u00c7erezler ve Site Verileri > Verileri Temizle.<\/li>\n<li><strong>Safari:<\/strong> Safari > Tercihler > Gizlilik > Web Sitesi Verilerini Y\u00f6net > T\u00fcm Web Sitesi Verilerini Kald\u0131r.<\/li>\n<\/ul>\n<p>Bu, bir geli\u015ftirici i\u00e7in ideal bir \u00e7\u00f6z\u00fcm olmasa da, bazen kullan\u0131c\u0131lar\u0131n kendi sorunlar\u0131n\u0131 \u00e7\u00f6zmelerine yard\u0131mc\u0131 olmak i\u00e7in son bir se\u00e7enek olabilir.<\/p>\n<blockquote class=\"expert-tip\"><p>\n  Uzman \u0130pucu: Da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinize otomatik bir \"cache busting\" ad\u0131m\u0131 eklemek (\u00f6rne\u011fin, bir build script'i ile dosya adlar\u0131na hash eklemek) hem CDN hem de taray\u0131c\u0131 \u00f6nbelle\u011fi sorunlar\u0131n\u0131 k\u00f6kten \u00e7\u00f6zerek sizi manuel m\u00fcdahalelerden kurtar\u0131r. Bu, modern web geli\u015ftirme pratiklerinin vazge\u00e7ilmez bir par\u00e7as\u0131d\u0131r.\n<\/p><\/blockquote>\n<p>\u00d6nbellekleme, web performans\u0131n\u0131n kilit bir bile\u015fenidir, ancak do\u011fru y\u00f6netilmedi\u011finde ciddi sorunlara yol a\u00e7abilir. Firebase Hosting'in sa\u011flad\u0131\u011f\u0131 ara\u00e7lar\u0131 ve bu teknikleri do\u011fru kullanarak, sitenizin hem h\u0131zl\u0131 hem de her zaman g\u00fcncel kalmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/p>\n<h2>Sonu\u00e7: Ak\u0131ll\u0131 \u00d6nbellekleme ile Sorunsuz Da\u011f\u0131t\u0131m\u0131n Anahtar\u0131<\/h2>\n<p>Firebase Hosting, h\u0131z\u0131 ve basitli\u011fi ile geli\u015ftiricilerin favorisi olmay\u0131 s\u00fcrd\u00fcr\u00fcyor. Ancak, bu platformun sundu\u011fu g\u00fc\u00e7l\u00fc CDN altyap\u0131s\u0131, beraberinde \u00f6nbellekleme y\u00f6netimi konusunda belirli sorumluluklar\u0131 da getiriyor. Bir web uygulamas\u0131n\u0131 da\u011f\u0131t\u0131rken, amac\u0131m\u0131z sadece kodumuzu sunuculara g\u00f6ndermek de\u011fil, ayn\u0131 zamanda kullan\u0131c\u0131lar\u0131m\u0131z\u0131n her zaman en g\u00fcncel ve en h\u0131zl\u0131 deneyimi ya\u015famas\u0131n\u0131 sa\u011flamakt\u0131r. \u00d6nbellek sorunlar\u0131, bu amaca ula\u015fmam\u0131z\u0131 engelleyen sinsi bir d\u00fc\u015fman olabilir, ancak yukar\u0131da ele ald\u0131\u011f\u0131m\u0131z stratejilerle bu d\u00fc\u015fman\u0131 kolayca alt edebiliriz.<\/p>\n<p>Ak\u0131ll\u0131 bir \u00f6nbellekleme stratejisi, uygulaman\u0131z\u0131n performans\u0131n\u0131 optimize ederken, hatal\u0131 veya eski i\u00e7eri\u011fin kullan\u0131c\u0131lara ula\u015fmas\u0131n\u0131 engeller. Bunun anahtar\u0131, <code>firebase.json<\/code> dosyas\u0131ndaki <code>Cache-Control<\/code> ba\u015fl\u0131klar\u0131n\u0131 do\u011fru yap\u0131land\u0131rmaktan ve statik dosyalar i\u00e7in versiyonlama (cache busting) tekniklerini uygulamaktan ge\u00e7er. Kritik HTML dosyalar\u0131 i\u00e7in k\u0131sa veya hi\u00e7 \u00f6nbellekleme uygularken, de\u011fi\u015fmeyen statik kaynaklar i\u00e7in uzun s\u00fcreli \u00f6nbelleklemenin avantajlar\u0131ndan yararlanmal\u0131y\u0131z. Dinamik i\u00e7erik ve API yan\u0131tlar\u0131 i\u00e7in ise Firebase Functions ile entegre \u00f6nbellekleme ayarlar\u0131, her zaman g\u00fcncel verilerin sunulmas\u0131n\u0131 garanti eder.<\/p>\n<p>Unutmay\u0131n, her da\u011f\u0131t\u0131m bir f\u0131rsatt\u0131r; sadece kodunuzu g\u00fcncellemekle kalmaz, ayn\u0131 zamanda \u00f6nbellekleme stratejinizi de g\u00f6zden ge\u00e7irirsiniz. Geli\u015ftirme s\u00fcre\u00e7lerinize, da\u011f\u0131t\u0131m sonras\u0131 \u00f6nbellek kontrollerini ve olas\u0131 senaryolar\u0131 test etmeyi dahil etmek, gelecekteki kabuslar\u0131n \u00f6n\u00fcne ge\u00e7ecektir. Firebase Hosting, bu kontrolleri size sunarak, web uygulamalar\u0131n\u0131z \u00fczerinde tam kontrol sa\u011flar. Bu bilgileri do\u011fru uygulayarak, hem geli\u015ftirici olarak zaman\u0131n\u0131z\u0131 kurtaracak hem de kullan\u0131c\u0131lar\u0131n\u0131za kesintisiz ve g\u00fcncel bir deneyim sunacaks\u0131n\u0131z. Ak\u0131ll\u0131 \u00f6nbellekleme, sorunsuz da\u011f\u0131t\u0131m\u0131n ve ba\u015far\u0131l\u0131 bir web uygulamas\u0131n\u0131n temel ta\u015f\u0131d\u0131r.<\/p>\n<h2>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<h3>1. Firebase Hosting'de \u00f6nbellek temizleme (cache invalidation) i\u015flemini manuel olarak nas\u0131l tetikleyebilirim?<\/h3>\n<p>Firebase Hosting'de belirli bir dosyay\u0131 veya t\u00fcm \u00f6nbelle\u011fi manuel olarak an\u0131nda temizlemek i\u00e7in do\u011frudan bir d\u00fc\u011fme veya komut yoktur. En etkili y\u00f6ntem, yeni bir da\u011f\u0131t\u0131m (<code>firebase deploy<\/code>) yapmakt\u0131r. Bu, Firebase CDN'indeki g\u00fcncellenen dosyalar\u0131n \u00f6nbelle\u011fini otomatik olarak ge\u00e7ersiz k\u0131lmaya \u00e7al\u0131\u015f\u0131r. E\u011fer HTML dosyalar\u0131 i\u00e7in <code>max-age=0, no-cache, no-store, must-revalidate<\/code> gibi ba\u015fl\u0131klar ayarlad\u0131ysan\u0131z, bu dosyalar her zaman yeniden do\u011frulanacakt\u0131r. Statik dosyalar i\u00e7in (CSS\/JS) ise \"cache busting\" (dosya adlar\u0131na hash ekleme) y\u00f6ntemini kullanmak, taray\u0131c\u0131 ve CDN'in yeni versiyonu indirmesini sa\u011flar.<\/p>\n<h3>2. <code>Cache-Control: max-age=0<\/code> ile <code>no-cache<\/code> aras\u0131ndaki fark nedir?<\/h3>\n<p><code>max-age=0<\/code>, kayna\u011f\u0131n \u00f6nbellek s\u00fcresinin 0 saniye oldu\u011funu belirtir, yani \u00f6nbelle\u011fin an\u0131nda s\u00fcresi dolmu\u015ftur. Taray\u0131c\u0131 veya CDN, her zaman kayna\u011f\u0131 yeniden do\u011frulamak i\u00e7in sunucuya bir istek g\u00f6ndermelidir (<code>If-None-Match<\/code> veya <code>If-Modified-Since<\/code> ba\u015fl\u0131klar\u0131yla). <code>no-cache<\/code> ise, bir kayna\u011f\u0131n \u00f6nbelle\u011fe al\u0131nabilece\u011fini, ancak her kullan\u0131mdan \u00f6nce sunucuyla ge\u00e7erlili\u011finin do\u011frulanmas\u0131 gerekti\u011fini belirtir. Yani, \u00f6nbellekteki s\u00fcr\u00fcm ge\u00e7erli olsa bile, sunucuya gidip g\u00fcncel olup olmad\u0131\u011f\u0131n\u0131 sormadan kullan\u0131lamaz. \u0130kisi de benzer bir sonu\u00e7 verirken, <code>no-cache<\/code>, sunucu taraf\u0131nda <code>304 Not Modified<\/code> yan\u0131t\u0131 al\u0131narak bant geni\u015fli\u011finden tasarruf edilmesini sa\u011flayabilir. En kat\u0131 ve g\u00fcvenli se\u00e7enek genellikle <code>max-age=0, no-cache, no-store, must-revalidate<\/code> kombinasyonudur.<\/p>\n<h3>3. Firebase Hosting'de <code>firebase.json<\/code>'daki <code>headers<\/code> ayarlar\u0131 ne kadar s\u00fcrede etkili olur?<\/h3>\n<p><code>firebase.json<\/code> dosyas\u0131nda yapt\u0131\u011f\u0131n\u0131z de\u011fi\u015fiklikler, yeni bir <code>firebase deploy<\/code> komutu \u00e7al\u0131\u015ft\u0131r\u0131l\u0131p da\u011f\u0131t\u0131m tamamland\u0131ktan sonra etkili olur. Da\u011f\u0131t\u0131m tamamland\u0131\u011f\u0131nda, Firebase'in CDN'i yeni yap\u0131land\u0131rmay\u0131 ve g\u00fcncellenen dosyalar\u0131 yaymaya ba\u015flar. Bu s\u00fcrecin d\u00fcnya genelindeki t\u00fcm CDN noktalar\u0131na yay\u0131lmas\u0131 genellikle birka\u00e7 dakika s\u00fcrer. Bu s\u00fcre zarf\u0131nda, baz\u0131 kullan\u0131c\u0131lar hala eski \u00f6nbellek kurallar\u0131na veya dosyalara g\u00f6re hizmet alabilir.<\/p>\n<h3>4. S\u0131k g\u00fcncellenen dinamik veriler i\u00e7in Firebase Hosting'i nas\u0131l optimize edebilirim?<\/h3>\n<p>Firebase Hosting statik dosyalar i\u00e7in optimize edilmi\u015ftir. S\u0131k g\u00fcncellenen dinamik veriler i\u00e7in do\u011frudan hosting yerine Firebase Functions kullanmal\u0131s\u0131n\u0131z. Firebase Functions'\u0131n\u0131zdan HTTP yan\u0131t\u0131 d\u00f6nerken, <code>Cache-Control<\/code> ba\u015fl\u0131\u011f\u0131n\u0131 uygun \u015fekilde ayarlayarak dinamik i\u00e7eri\u011fin \u00f6nbellek davran\u0131\u015f\u0131n\u0131 kontrol edebilirsiniz. \u00d6rne\u011fin, verilerin \u00e7ok s\u0131k de\u011fi\u015fti\u011fi durumlarda <code>Cache-Control: no-cache, no-store<\/code> kullanabilir veya belirli bir s\u00fcre (\u00f6rn: <code>max-age=60<\/code>) \u00f6nbelle\u011fe al\u0131nmas\u0131n\u0131 sa\u011flayabilirsiniz. Ayr\u0131ca, client-side caching i\u00e7in Service Workers kullanarak daha geli\u015fmi\u015f stratejiler de uygulayabilirsiniz.<\/p>\n","protected":false},"excerpt":{"rendered":"Firebase Hosting, h\u0131zl\u0131 ve g\u00fcvenilir web siteleri da\u011f\u0131tmak i\u00e7in harika bir platform olsa da, bazen \u00f6nbellekleme mekanizmalar\u0131 geli\u015ftiricilerin&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-31223","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Firebase Hosting \u00d6nbellek Sorunlar\u0131: \u00c7\u00f6z\u00fcm Rehberi<\/title>\n<meta name=\"description\" content=\"Firebase Hosting, h\u0131zl\u0131 ve g\u00fcvenilir web siteleri da\u011f\u0131tmak i\u00e7in harika bir platform olsa da, bazen \u00f6nbellekleme mekanizmalar\u0131 geli\u015ftiricilerin kabusu haline gelebilir. Bu makale, Firebase Hosting&#039;deki \u00f6nbellek sorunlar\u0131n\u0131n nedenlerini, \u00e7\u00f6z\u00fcmlerini ve sizi bu sinsi tuzaktan nas\u0131l kurtaraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m anlat\u0131yor.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Firebase Hosting \u00d6nbellek Sorunlar\u0131: \u00c7\u00f6z\u00fcm Rehberi\" \/>\n<meta property=\"og:description\" content=\"Firebase Hosting, h\u0131zl\u0131 ve g\u00fcvenilir web siteleri da\u011f\u0131tmak i\u00e7in harika bir platform olsa da, bazen \u00f6nbellekleme mekanizmalar\u0131 geli\u015ftiricilerin kabusu haline gelebilir. Bu makale, Firebase Hosting&#039;deki \u00f6nbellek sorunlar\u0131n\u0131n nedenlerini, \u00e7\u00f6z\u00fcmlerini ve sizi bu sinsi tuzaktan nas\u0131l kurtaraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m anlat\u0131yor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-07T08:02:09+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"31 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Firebase Hosting \u00d6nbellek Sorunlar\u0131: \u00c7\u00f6z\u00fcm Rehberi\",\"datePublished\":\"2025-10-07T08:02:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/\"},\"wordCount\":5796,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/\",\"name\":\"Firebase Hosting \u00d6nbellek Sorunlar\u0131: \u00c7\u00f6z\u00fcm Rehberi\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-07T08:02:09+00:00\",\"description\":\"Firebase Hosting, h\u0131zl\u0131 ve g\u00fcvenilir web siteleri da\u011f\u0131tmak i\u00e7in harika bir platform olsa da, bazen \u00f6nbellekleme mekanizmalar\u0131 geli\u015ftiricilerin kabusu haline gelebilir. Bu makale, Firebase Hosting'deki \u00f6nbellek sorunlar\u0131n\u0131n nedenlerini, \u00e7\u00f6z\u00fcmlerini ve sizi bu sinsi tuzaktan nas\u0131l kurtaraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m anlat\u0131yor.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Firebase Hosting \u00d6nbellek Sorunlar\u0131: \u00c7\u00f6z\u00fcm Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Firebase Hosting \u00d6nbellek Sorunlar\u0131: \u00c7\u00f6z\u00fcm Rehberi","description":"Firebase Hosting, h\u0131zl\u0131 ve g\u00fcvenilir web siteleri da\u011f\u0131tmak i\u00e7in harika bir platform olsa da, bazen \u00f6nbellekleme mekanizmalar\u0131 geli\u015ftiricilerin kabusu haline gelebilir. Bu makale, Firebase Hosting'deki \u00f6nbellek sorunlar\u0131n\u0131n nedenlerini, \u00e7\u00f6z\u00fcmlerini ve sizi bu sinsi tuzaktan nas\u0131l kurtaraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m anlat\u0131yor.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Firebase Hosting \u00d6nbellek Sorunlar\u0131: \u00c7\u00f6z\u00fcm Rehberi","og_description":"Firebase Hosting, h\u0131zl\u0131 ve g\u00fcvenilir web siteleri da\u011f\u0131tmak i\u00e7in harika bir platform olsa da, bazen \u00f6nbellekleme mekanizmalar\u0131 geli\u015ftiricilerin kabusu haline gelebilir. Bu makale, Firebase Hosting'deki \u00f6nbellek sorunlar\u0131n\u0131n nedenlerini, \u00e7\u00f6z\u00fcmlerini ve sizi bu sinsi tuzaktan nas\u0131l kurtaraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m anlat\u0131yor.","og_url":"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-07T08:02:09+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"31 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Firebase Hosting \u00d6nbellek Sorunlar\u0131: \u00c7\u00f6z\u00fcm Rehberi","datePublished":"2025-10-07T08:02:09+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/"},"wordCount":5796,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/","name":"Firebase Hosting \u00d6nbellek Sorunlar\u0131: \u00c7\u00f6z\u00fcm Rehberi","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-07T08:02:09+00:00","description":"Firebase Hosting, h\u0131zl\u0131 ve g\u00fcvenilir web siteleri da\u011f\u0131tmak i\u00e7in harika bir platform olsa da, bazen \u00f6nbellekleme mekanizmalar\u0131 geli\u015ftiricilerin kabusu haline gelebilir. Bu makale, Firebase Hosting'deki \u00f6nbellek sorunlar\u0131n\u0131n nedenlerini, \u00e7\u00f6z\u00fcmlerini ve sizi bu sinsi tuzaktan nas\u0131l kurtaraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m anlat\u0131yor.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/firebase-hosting-onbellek-sorunlari-cozum-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Firebase Hosting \u00d6nbellek Sorunlar\u0131: \u00c7\u00f6z\u00fcm Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31223","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=31223"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31223\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31223"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31223"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31223"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}