{"id":35335,"date":"2025-11-28T12:40:42","date_gmt":"2025-11-28T09:40:42","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=35335"},"modified":"2025-11-28T12:40:42","modified_gmt":"2025-11-28T09:40:42","slug":"angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/","title":{"rendered":"Angular Uygulamalar\u0131nda Lazy Loading Rotalar\u0131 Nas\u0131l Kullan\u0131l\u0131r?"},"content":{"rendered":"<p><body><\/p>\n<h2>Angular Uygulamalar\u0131nda Lazy Loading Rotalar\u0131 Nas\u0131l Kullan\u0131l\u0131r?<\/h2>\n<p>Angular, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in g\u00fc\u00e7l\u00fc ve pop\u00fcler bir \u00e7er\u00e7evedir. B\u00fcy\u00fck \u00f6l\u00e7ekli ve \u00f6zellik a\u00e7\u0131s\u0131ndan zengin uygulamalar olu\u015ftururken kar\u015f\u0131la\u015f\u0131lan en \u00f6nemli zorluklardan biri, uygulaman\u0131n ba\u015flang\u0131\u00e7 y\u00fckleme s\u00fcresini optimize etmektir. Kullan\u0131c\u0131lar, h\u0131zl\u0131 a\u00e7\u0131lan ve an\u0131nda yan\u0131t veren uygulamalar\u0131 tercih eder. \u0130\u015fte tam bu noktada &#8220;Lazy Loading&#8221; (Tembel Y\u00fckleme) devreye girer ve Angular uygulamalar\u0131n\u0131n performans\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. Bu makalede, Angular&#8217;da lazy loading rotalar\u0131n\u0131 nas\u0131l kullanaca\u011f\u0131m\u0131z\u0131, faydalar\u0131n\u0131, teknik detaylar\u0131n\u0131 ve en iyi uygulama y\u00f6ntemlerini derinlemesine inceleyece\u011fiz.<\/p>\n<h3>Angular Uygulamalar\u0131nda Performans Sorunlar\u0131 ve Lazy Loading&#8217;in Rol\u00fc<\/h3>\n<p>Geleneksel olarak, bir web uygulamas\u0131 ba\u015flat\u0131ld\u0131\u011f\u0131nda, t\u00fcm uygulama kodu, bile\u015fenleri, mod\u00fclleri ve ba\u011f\u0131ml\u0131l\u0131klar\u0131 tek bir b\u00fcy\u00fck JavaScript paketi (bundle) halinde taray\u0131c\u0131ya y\u00fcklenir. Bu yakla\u015f\u0131m, k\u00fc\u00e7\u00fck uygulamalar i\u00e7in sorun te\u015fkil etmezken, \u00f6zellikler eklendik\u00e7e ve uygulama b\u00fcy\u00fcd\u00fck\u00e7e ciddi performans sorunlar\u0131na yol a\u00e7abilir:<\/p>\n<p>*   <strong>Y\u00fcksek Ba\u015flang\u0131\u00e7 Y\u00fckleme S\u00fcresi:<\/strong> Kullan\u0131c\u0131lar, uygulaman\u0131n ilk a\u00e7\u0131l\u0131\u015f\u0131nda t\u00fcm paketin indirilmesini beklemek zorunda kal\u0131r. Bu durum, \u00f6zellikle yava\u015f internet ba\u011flant\u0131lar\u0131nda veya mobil cihazlarda k\u00f6t\u00fc bir kullan\u0131c\u0131 deneyimine neden olur.<br \/>\n*   <strong>B\u00fcy\u00fck Paket Boyutu:<\/strong> T\u00fcm kodun tek bir pakette olmas\u0131, dosya boyutunun artmas\u0131na ve dolay\u0131s\u0131yla a\u011f \u00fczerinden aktar\u0131m s\u00fcresinin uzamas\u0131na neden olur.<br \/>\n*   <strong>Gereksiz Kaynak T\u00fcketimi:<\/strong> Kullan\u0131c\u0131n\u0131n o anda ihtiya\u00e7 duymad\u0131\u011f\u0131 veya hi\u00e7 kullanmayaca\u011f\u0131 kod par\u00e7alar\u0131 bile ba\u015flang\u0131\u00e7ta y\u00fcklenir. Bu, hem bant geni\u015fli\u011fini hem de taray\u0131c\u0131n\u0131n belle\u011fini gereksiz yere t\u00fcketir.<\/p>\n<p>Lazy loading, bu sorunlara zarif bir \u00e7\u00f6z\u00fcm sunar. Temel fikir, uygulaman\u0131n t\u00fcm b\u00f6l\u00fcmlerini ba\u015flang\u0131\u00e7ta y\u00fcklemek yerine, yaln\u0131zca kullan\u0131c\u0131n\u0131n o anda ihtiya\u00e7 duydu\u011fu veya talep etti\u011fi mod\u00fclleri y\u00fcklemektir. Bu, uygulaman\u0131n ba\u015flang\u0131\u00e7 paket boyutunu \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r ve ilk y\u00fckleme s\u00fcresini h\u0131zland\u0131r\u0131r.<\/p>\n<h3>Lazy Loading Nedir?<\/h3>\n<p>Lazy loading, bir web uygulamas\u0131n\u0131n belirli b\u00f6l\u00fcmlerinin (genellikle mod\u00fcllerin) yaln\u0131zca ihtiya\u00e7 duyuldu\u011funda, yani kullan\u0131c\u0131 ilgili rotaya navigasyon yapt\u0131\u011f\u0131nda y\u00fcklenmesi prensibidir. Angular ba\u011flam\u0131nda, bu, Angular Router&#8217;\u0131n belirli bir rotaya gidildi\u011finde ilgili mod\u00fcl\u00fc dinamik olarak y\u00fcklemesini sa\u011flamak anlam\u0131na gelir.<\/p>\n<p>Taray\u0131c\u0131, lazy loading ile yap\u0131land\u0131r\u0131lm\u0131\u015f bir Angular uygulamas\u0131n\u0131 ilk ba\u015flatt\u0131\u011f\u0131nda, yaln\u0131zca uygulaman\u0131n \u00e7ekirdek (core) mod\u00fcl\u00fc ve ba\u015flang\u0131\u00e7 rotalar\u0131 i\u00e7in gerekli olan kod paketini indirir. Di\u011fer t\u00fcm \u00f6zellik mod\u00fclleri ayr\u0131 JavaScript paketlerine b\u00f6l\u00fcn\u00fcr ve bu paketler, kullan\u0131c\u0131 ilgili \u00f6zellik mod\u00fcl\u00fcne y\u00f6nlendirildi\u011finde arka planda indirilir. Bu i\u015flem, kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fcn daha h\u0131zl\u0131 g\u00f6r\u00fcnmesini ve uygulaman\u0131n daha duyarl\u0131 hissetmesini sa\u011flar.<\/p>\n<h3>Lazy Loading&#8217;in Avantajlar\u0131<\/h3>\n<p>Lazy loading kullanman\u0131n Angular uygulamalar\u0131n\u0131za sa\u011flad\u0131\u011f\u0131 temel avantajlar \u015funlard\u0131r:<\/p>\n<h4>Daha H\u0131zl\u0131 Ba\u015flang\u0131\u00e7 S\u00fcresi<\/h4>\n<p>Uygulaman\u0131n ba\u015flang\u0131\u00e7ta y\u00fcklemesi gereken kod miktar\u0131 azald\u0131\u011f\u0131 i\u00e7in, taray\u0131c\u0131 daha az veri indirir ve daha k\u0131sa s\u00fcrede uygulamay\u0131 ba\u015flat\u0131r. Bu, \u00f6zellikle ilk izlenim a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir.<\/p>\n<h4>Daha K\u00fc\u00e7\u00fck Ba\u015flang\u0131\u00e7 Paket Boyutu<\/h4>\n<p>Lazy loading, uygulaman\u0131n genel paket boyutunu de\u011fi\u015ftirmez ancak ba\u015flang\u0131\u00e7ta indirilen paketin boyutunu k\u00fc\u00e7\u00fclt\u00fcr. Bu, daha h\u0131zl\u0131 a\u011f aktar\u0131m\u0131 ve daha az bant geni\u015fli\u011fi kullan\u0131m\u0131 anlam\u0131na gelir.<\/p>\n<h4>Geli\u015ftirilmi\u015f Kullan\u0131c\u0131 Deneyimi<\/h4>\n<p>Kullan\u0131c\u0131lar, uygulaman\u0131n an\u0131nda yan\u0131t verdi\u011fini ve h\u0131zl\u0131 y\u00fcklendi\u011fini g\u00f6rd\u00fcklerinde daha olumlu bir deneyim ya\u015farlar. Bekleme s\u00fcrelerinin azalmas\u0131, kullan\u0131c\u0131 memnuniyetini art\u0131r\u0131r.<\/p>\n<h4>Kaynak Kullan\u0131m\u0131n\u0131n Optimizasyonu<\/h4>\n<p>Yaln\u0131zca ihtiya\u00e7 duyulan kodun y\u00fcklenmesi, taray\u0131c\u0131n\u0131n belle\u011fini ve i\u015flem g\u00fcc\u00fcn\u00fc daha verimli kullanmas\u0131n\u0131 sa\u011flar. Bu, \u00f6zellikle kaynaklar\u0131 s\u0131n\u0131rl\u0131 olan cihazlarda veya \u00e7ok say\u0131da sekmenin a\u00e7\u0131k oldu\u011fu durumlarda faydal\u0131d\u0131r.<\/p>\n<h4>Mod\u00fclerlik ve Bak\u0131m Kolayl\u0131\u011f\u0131<\/h4>\n<p>Lazy loading, uygulaman\u0131z\u0131 daha k\u00fc\u00e7\u00fck, ba\u011f\u0131ms\u0131z mod\u00fcllere ay\u0131rmay\u0131 te\u015fvik eder. Bu mod\u00fcler yap\u0131, kodun daha d\u00fczenli olmas\u0131n\u0131, geli\u015ftirmenin ve bak\u0131m\u0131n kolayla\u015fmas\u0131n\u0131 sa\u011flar. Her bir mod\u00fcl kendi i\u00e7inde daha y\u00f6netilebilir hale gelir.<\/p>\n<h3>Lazy Loading Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h3>\n<p>Angular&#8217;da lazy loading, Angular Router ve modern JavaScript&#8217;in dinamik import (ES2020 standard\u0131) \u00f6zelli\u011fi sayesinde ger\u00e7ekle\u015fir.<\/p>\n<p>1.  <strong>Router Yap\u0131land\u0131rmas\u0131:<\/strong> Angular Router, bir rotan\u0131n <code>loadChildren<\/code> \u00f6zelli\u011fi ile yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131nda, bu rotaya gidildi\u011finde ilgili mod\u00fcl\u00fc dinamik olarak y\u00fcklemesi gerekti\u011fini anlar.<br \/>\n2.  <strong>Dinamik Import:<\/strong> <code>loadChildren<\/code> \u00f6zelli\u011fi, bir Promise d\u00f6nd\u00fcren bir fonksiyon al\u0131r. Bu fonksiyon i\u00e7inde <code>import()<\/code> s\u00f6zdizimi kullan\u0131l\u0131r. \u00d6rne\u011fin: <code>import('.\/path\/to\/module\/module.module').then(m => m.ModuleName)<\/code>. Bu <code>import()<\/code> ifadesi, belirtilen mod\u00fcl\u00fc ayr\u0131 bir JavaScript dosyas\u0131 olarak y\u00fckler.<br \/>\n3.  <strong>Webpack&#8217;in Rol\u00fc (Code Splitting):<\/strong> Geli\u015ftirme s\u00fcrecinde, Angular CLI ve alt\u0131nda yatan Webpack (veya Vite gibi di\u011fer bundler&#8217;lar), <code>import()<\/code> ifadelerini alg\u0131lar ve bu mod\u00fclleri ana uygulama paketinden ay\u0131rarak ayr\u0131 JavaScript paketleri (chunk&#8217;lar) halinde derler. Bu i\u015fleme &#8220;code splitting&#8221; denir.<br \/>\n4.  <strong>Talep \u00dczerine Y\u00fckleme:<\/strong> Kullan\u0131c\u0131, lazy loading ile yap\u0131land\u0131r\u0131lm\u0131\u015f bir rotaya navigasyon yapt\u0131\u011f\u0131nda, Angular Router, ilgili mod\u00fcl\u00fcn paketini sunucudan dinamik olarak ister. Paket indirildikten sonra, mod\u00fcl kaydedilir ve rotan\u0131n bile\u015fenleri olu\u015fturulur.<\/p>\n<h3>Angular&#8217;da Lazy Loading Uygulama Ad\u0131mlar\u0131<\/h3>\n<p>Angular&#8217;da lazy loading rotalar\u0131 uygulamak olduk\u00e7a basittir. Ad\u0131m ad\u0131m nas\u0131l yap\u0131laca\u011f\u0131n\u0131 g\u00f6relim:<\/p>\n<h4>Ad\u0131m 1: Uygulama Yap\u0131s\u0131n\u0131 Haz\u0131rlama (Mod\u00fcller Olu\u015fturma)<\/h4>\n<p>Lazy loading i\u00e7in ilk ad\u0131m, uygulaman\u0131z\u0131 mant\u0131ksal olarak ayr\u0131 \u00f6zellik mod\u00fcllerine b\u00f6lmektir. Her bir \u00f6zellik mod\u00fcl\u00fc, kendi bile\u015fenlerini, servislerini ve rotalar\u0131n\u0131 i\u00e7erecektir.<\/p>\n<p>Yeni bir lazy loading mod\u00fcl\u00fc olu\u015fturmak i\u00e7in Angular CLI&#8217;\u0131 kullanabiliriz:<\/p>\n<pre><code class=\"language-bash\">ng generate module Admin --route admin --module app<\/code><\/pre>\n<p>Bu komut \u015funlar\u0131 yapar:<br \/>\n*   <code>src\/app\/admin<\/code> klas\u00f6r\u00fcnde <code>AdminModule<\/code> ve <code>AdminRoutingModule<\/code> dosyalar\u0131n\u0131 olu\u015fturur.<br \/>\n*   <code>app-routing.module.ts<\/code> dosyas\u0131na <code>admin<\/code> rotas\u0131 i\u00e7in lazy loading yap\u0131land\u0131rmas\u0131n\u0131 otomatik olarak ekler.<\/p>\n<p>E\u011fer manuel olarak yapmak isterseniz:<br \/>\n1.  Bir \u00f6zellik mod\u00fcl\u00fc olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">ng generate module Admin<\/code><\/pre>\n<p>2.  Bu mod\u00fcl i\u00e7in bir y\u00f6nlendirme mod\u00fcl\u00fc olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">ng generate module Admin\/admin-routing --flat false --module Admin<\/code><\/pre>\n<p>    <code>--flat false<\/code> ile <code>admin-routing.module.ts<\/code> dosyas\u0131n\u0131n <code>Admin<\/code> klas\u00f6r\u00fc i\u00e7inde ayr\u0131 bir klas\u00f6rde (<code>admin-routing<\/code>) olu\u015fturulmas\u0131n\u0131 sa\u011flar\u0131z. <code>--module Admin<\/code> ile bu y\u00f6nlendirme mod\u00fcl\u00fcn\u00fcn <code>AdminModule<\/code>&#8216;e import edilmesini sa\u011flar\u0131z.<\/p>\n<h4>Ad\u0131m 2: Router Yap\u0131land\u0131rmas\u0131 (<code>app-routing.module.ts<\/code>)<\/h4>\n<p>Ana y\u00f6nlendirme mod\u00fcl\u00fcn\u00fczde (<code>app-routing.module.ts<\/code>), lazy loading yapmak istedi\u011finiz mod\u00fcl i\u00e7in bir rota tan\u0131mlars\u0131n\u0131z. Burada kilit nokta <code>loadChildren<\/code> \u00f6zelli\u011fini kullanmakt\u0131r.<\/p>\n<pre><code class=\"language-typescript\">\/\/ src\/app\/app-routing.module.ts\nimport { NgModule } from '@angular\/core';\nimport { RouterModule, Routes } from '@angular\/router';\n\nconst routes: Routes = [\n  { path: '', redirectTo: '\/home', pathMatch: 'full' },\n  { path: 'home', component: HomeComponent }, \/\/ \u00d6rnek bir home component\n  {\n    path: 'admin',\n    loadChildren: () => import('.\/admin\/admin.module').then(m => m.AdminModule)\n  },\n  {\n    path: 'products',\n    loadChildren: () => import('.\/products\/products.module').then(m => m.ProductsModule)\n  },\n  { path: '<em><\/em>', component: NotFoundComponent } \/\/ 404 sayfas\u0131\n];\n\n@NgModule({\n  imports: [RouterModule.forRoot(routes)],\n  exports: [RouterModule]\n})\nexport class AppRoutingModule { }<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte:<br \/>\n*   <code>admin<\/code> yoluna gidildi\u011finde, <code>admin.module<\/code> dosyas\u0131 dinamik olarak y\u00fcklenir ve <code>AdminModule<\/code> kullan\u0131l\u0131r.<br \/>\n*   <code>products<\/code> yoluna gidildi\u011finde ise <code>products.module<\/code> dosyas\u0131 y\u00fcklenir ve <code>ProductsModule<\/code> kullan\u0131l\u0131r.<br \/>\n*   <code>import('.\/admin\/admin.module')<\/code> ifadesi, ilgili mod\u00fcl\u00fcn bulundu\u011fu dosya yolunu belirtir.<br \/>\n*   <code>.then(m => m.AdminModule)<\/code> k\u0131sm\u0131, Promise \u00e7\u00f6z\u00fcld\u00fc\u011f\u00fcnde, y\u00fcklenen mod\u00fcl dosyas\u0131ndan <code>AdminModule<\/code> s\u0131n\u0131f\u0131n\u0131 al\u0131r.<\/p>\n<h4>Ad\u0131m 3: \u00d6zellik Mod\u00fcl\u00fc Router Yap\u0131land\u0131rmas\u0131 (<code>feature-routing.module.ts<\/code>)<\/h4>\n<p>Her bir lazy loaded mod\u00fcl\u00fcn kendi i\u00e7inde de bir y\u00f6nlendirme mod\u00fcl\u00fc olmal\u0131d\u0131r. Bu mod\u00fcl, ilgili \u00f6zelli\u011fin bile\u015fenleri aras\u0131ndaki navigasyonu y\u00f6netir. Burada <code>RouterModule.forChild()<\/code> metodunu kullanmak \u00f6nemlidir. <code>forChild()<\/code> metodu, k\u00f6k y\u00f6nlendiricinin (root router) bir alt k\u00fcmesini yap\u0131land\u0131r\u0131r ve mevcut y\u00f6nlendirici \u00f6rneklerine yeni rotalar\u0131 ekler.<\/p>\n<pre><code class=\"language-typescript\">\/\/ src\/app\/admin\/admin-routing.module.ts\nimport { NgModule } from '@angular\/core';\nimport { RouterModule, Routes } from '@angular\/router';\nimport { AdminDashboardComponent } from '.\/admin-dashboard\/admin-dashboard.component';\nimport { AdminUsersComponent } from '.\/admin-users\/admin-users.component';\n\nconst routes: Routes = [\n  {\n    path: '', \/\/ 'admin' yolu zaten ana router'da tan\u0131mland\u0131\u011f\u0131 i\u00e7in burada bo\u015f b\u0131rak\u0131l\u0131r\n    component: AdminDashboardComponent,\n    children: [\n      { path: 'dashboard', component: AdminDashboardComponent },\n      { path: 'users', component: AdminUsersComponent },\n      { path: '', redirectTo: 'dashboard', pathMatch: 'full' }\n    ]\n  }\n];\n\n@NgModule({\n  imports: [RouterModule.forChild(routes)],\n  exports: [RouterModule]\n})\nexport class AdminRoutingModule { }<\/code><\/pre>\n<p>Ve <code>AdminModule<\/code> i\u00e7inde <code>AdminRoutingModule<\/code>&#8216;i i\u00e7e aktarmay\u0131 unutmay\u0131n:<\/p>\n<pre><code class=\"language-typescript\">\/\/ src\/app\/admin\/admin.module.ts\nimport { NgModule } from '@angular\/core';\nimport { CommonModule } from '@angular\/common';\n\nimport { AdminRoutingModule } from '.\/admin-routing.module';\nimport { AdminDashboardComponent } from '.\/admin-dashboard\/admin-dashboard.component';\nimport { AdminUsersComponent } from '.\/admin-users\/admin-users.component';\n\n@NgModule({\n  declarations: [\n    AdminDashboardComponent,\n    AdminUsersComponent\n  ],\n  imports: [\n    CommonModule,\n    AdminRoutingModule \/\/ AdminRoutingModule'i buraya import ediyoruz\n  ]\n})\nexport class AdminModule { }<\/code><\/pre>\n<h4>Ad\u0131m 4: Navigasyon<\/h4>\n<p>Lazy loaded mod\u00fcllere y\u00f6nlendirme yapmak i\u00e7in <code>routerLink<\/code> direktifini veya <code>router.navigate()<\/code> metodunu kullanabilirsiniz, t\u0131pk\u0131 di\u011fer rotalarda oldu\u011fu gibi.<\/p>\n<pre><code class=\"language-html\"><!-- src\/app\/app.component.html -->\n<nav>\n  <a routerLink=\"\/home\">Ana Sayfa<\/a> |\n  <a routerLink=\"\/admin\">Admin Paneli<\/a> |\n  <a routerLink=\"\/products\">\u00dcr\u00fcnler<\/a>\n<\/nav>\n<router-outlet><\/router-outlet><\/code><\/pre>\n<p>Kullan\u0131c\u0131 &#8220;Admin Paneli&#8221; ba\u011flant\u0131s\u0131na t\u0131klad\u0131\u011f\u0131nda, <code>admin<\/code> rotas\u0131 aktif hale gelir, <code>AdminModule<\/code> dinamik olarak y\u00fcklenir ve <code>AdminDashboardComponent<\/code> ekranda g\u00f6r\u00fcn\u00fcr.<\/p>\n<h3>Preloading Stratejileri (\u00d6n Y\u00fckleme Stratejileri)<\/h3>\n<p>Lazy loading, ba\u015flang\u0131\u00e7 y\u00fckleme s\u00fcresini h\u0131zland\u0131rsa da, bir dezavantaj\u0131 vard\u0131r: kullan\u0131c\u0131 bir lazy loaded rotaya ilk kez t\u0131klad\u0131\u011f\u0131nda, mod\u00fcl\u00fcn indirilmesi i\u00e7in k\u0131sa bir gecikme ya\u015fanabilir. Bu gecikme, kullan\u0131c\u0131 deneyimini hafif\u00e7e olumsuz etkileyebilir. \u0130\u015fte bu noktada &#8220;Preloading&#8221; (\u00d6n Y\u00fckleme) stratejileri devreye girer.<\/p>\n<p>Preloading, uygulaman\u0131n ba\u015flang\u0131\u00e7ta y\u00fcklendikten sonra veya belirli bir bo\u015fta kalma s\u00fcresi boyunca, lazy loaded mod\u00fclleri arka planda indirmesi anlam\u0131na gelir. B\u00f6ylece, kullan\u0131c\u0131 bu mod\u00fcllere y\u00f6nlendirildi\u011finde, mod\u00fcller zaten indirilmi\u015f ve haz\u0131r oldu\u011fu i\u00e7in an\u0131nda eri\u015filebilir olur.<\/p>\n<p>Angular Router, \u00e7e\u015fitli preloading stratejileri sunar:<\/p>\n<p>1.  <strong><code>NoPreloading<\/code> (Varsay\u0131lan):<\/strong> Hi\u00e7bir lazy loaded mod\u00fcl \u00f6nceden y\u00fcklenmez. Mod\u00fcller yaln\u0131zca talep edildi\u011finde y\u00fcklenir.<br \/>\n2.  <strong><code>PreloadAllModules<\/code>:<\/strong> Uygulama ba\u015flat\u0131ld\u0131ktan sonra, t\u00fcm lazy loaded mod\u00fcller arka planda otomatik olarak y\u00fcklenir. Bu, t\u00fcm mod\u00fcllerin h\u0131zl\u0131ca eri\u015filebilir olmas\u0131n\u0131 sa\u011flar ancak ba\u015flang\u0131\u00e7 sonras\u0131 a\u011f trafi\u011fini ve kaynak t\u00fcketimini art\u0131rabilir.<br \/>\n3.  <strong>Custom Preloading Strategy (\u00d6zel \u00d6n Y\u00fckleme Stratejisi):<\/strong> Geli\u015ftiricilerin kendi mant\u0131klar\u0131n\u0131 kullanarak hangi mod\u00fcllerin ne zaman \u00f6nceden y\u00fcklenece\u011fine karar vermesini sa\u011flar. \u00d6rne\u011fin, sadece belirli mod\u00fclleri y\u00fckleyebilir, kullan\u0131c\u0131n\u0131n bant geni\u015fli\u011fine g\u00f6re y\u00fckleme yapabilir veya belirli bir zamanda y\u00fckleme yapabilirsiniz.<\/p>\n<h4>Preloading Stratejileri Nas\u0131l Uygulan\u0131r?<\/h4>\n<p>Preloading stratejisini <code>AppRoutingModule<\/code> i\u00e7indeki <code>RouterModule.forRoot()<\/code> metoduna ikinci bir parametre olarak ekleyerek yap\u0131land\u0131rabilirsiniz.<\/p>\n<pre><code class=\"language-typescript\">\/\/ src\/app\/app-routing.module.ts\nimport { NgModule } from '@angular\/core';\nimport { RouterModule, Routes, PreloadAllModules, NoPreloading } from '@angular\/router';\n\nconst routes: Routes = [\n  \/\/ ... rotalar\u0131n\u0131z ...\n];\n\n@NgModule({\n  imports: [\n    RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules })\n    \/\/ Veya: RouterModule.forRoot(routes, { preloadingStrategy: NoPreloading })\n  ],\n  exports: [RouterModule]\n})\nexport class AppRoutingModule { }<\/code><\/pre>\n<p><code>PreloadAllModules<\/code> kullanmak, \u00e7o\u011fu orta \u00f6l\u00e7ekli uygulama i\u00e7in iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. Ancak, daha karma\u015f\u0131k senaryolar i\u00e7in \u00f6zel bir strateji olu\u015fturman\u0131z gerekebilir.<\/p>\n<h4>\u00d6zel \u00d6n Y\u00fckleme Stratejisi \u00d6rne\u011fi<\/h4>\n<p>\u00d6zel bir \u00f6n y\u00fckleme stratejisi olu\u015fturmak i\u00e7in <code>PreloadingStrategy<\/code> aray\u00fcz\u00fcn\u00fc uygulayan bir servis olu\u015fturman\u0131z gerekir. Bu servis, her bir lazy loaded rota i\u00e7in <code>preload<\/code> metodunu \u00e7a\u011f\u0131r\u0131r.<\/p>\n<pre><code class=\"language-typescript\">\/\/ src\/app\/custom-preloading-strategy.service.ts\nimport { Injectable } from '@angular\/core';\nimport { PreloadingStrategy, Route } from '@angular\/router';\nimport { Observable, of } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CustomPreloadingStrategyService implements PreloadingStrategy {\n  preload(route: Route, fn: () => Observable<any>): Observable<any> {\n    if (route.data && route.data['preload']) {\n      console.log('Preloading: ' + route.path);\n      return fn(); \/\/ Mod\u00fcl\u00fc y\u00fckle\n    }\n    return of(null); \/\/ Mod\u00fcl\u00fc y\u00fckleme\n  }\n}<\/code><\/pre>\n<p>Bu \u00f6zel stratejiyi kullanmak i\u00e7in, rotalar\u0131n <code>data<\/code> \u00f6zelli\u011fine <code>preload: true<\/code> eklemeniz ve <code>AppRoutingModule<\/code> i\u00e7inde stratejiyi belirtmeniz gerekir:<\/p>\n<pre><code class=\"language-typescript\">\/\/ src\/app\/app-routing.module.ts\nimport { NgModule } from '@angular\/core';\nimport { RouterModule, Routes } from '@angular\/router';\nimport { CustomPreloadingStrategyService } from '.\/custom-preloading-strategy.service';\n\nconst routes: Routes = [\n  { path: '', redirectTo: '\/home', pathMatch: 'full' },\n  { path: 'home', component: HomeComponent },\n  {\n    path: 'admin',\n    loadChildren: () => import('.\/admin\/admin.module').then(m => m.AdminModule),\n    data: { preload: true } \/\/ Bu mod\u00fcl\u00fc \u00f6nceden y\u00fckle\n  },\n  {\n    path: 'products',\n    loadChildren: () => import('.\/products\/products.module').then(m => m.ProductsModule),\n    data: { preload: false } \/\/ Bu mod\u00fcl\u00fc \u00f6nceden y\u00fckleme\n  },\n  { path: '<em><\/em>', component: NotFoundComponent }\n];\n\n@NgModule({\n  imports: [\n    RouterModule.forRoot(routes, { preloadingStrategy: CustomPreloadingStrategyService })\n  ],\n  exports: [RouterModule],\n  providers: [CustomPreloadingStrategyService] \/\/ Servisi sa\u011flay\u0131n\n})\nexport class AppRoutingModule { }<\/code><\/pre>\n<p>Bu \u00f6rnekte, sadece <code>admin<\/code> mod\u00fcl\u00fc \u00f6nceden y\u00fcklenecek, <code>products<\/code> mod\u00fcl\u00fc ise talep edildi\u011finde y\u00fcklenecektir. Bu, uygulaman\u0131z\u0131n ihtiya\u00e7lar\u0131na g\u00f6re \u00e7ok esnek bir kontrol sa\u011flar.<\/p>\n<h3>Lazy Loading ve Mod\u00fcl \u0130leti\u015fimi<\/h3>\n<p>Lazy loaded mod\u00fcller, uygulaman\u0131n di\u011fer b\u00f6l\u00fcmlerinden ba\u011f\u0131ms\u0131z olarak \u00e7al\u0131\u015facak \u015fekilde tasarlanm\u0131\u015ft\u0131r. Ancak, baz\u0131 durumlarda bu mod\u00fcllerin di\u011fer mod\u00fcllerle veya ana uygulama ile ileti\u015fim kurmas\u0131 gerekebilir.<\/p>\n<h4>Shared Mod\u00fcllerin Y\u00f6netimi<\/h4>\n<p>Birden fazla lazy loaded mod\u00fcl taraf\u0131ndan kullan\u0131lan bile\u015fenler, direktifler veya pipe&#8217;lar varsa, bunlar\u0131 bir <code>SharedModule<\/code> i\u00e7inde toplamak en iyi uygulamad\u0131r. <code>SharedModule<\/code>, bu ortak \u00f6\u011feleri d\u0131\u015fa aktar\u0131r ve di\u011fer mod\u00fcller taraf\u0131ndan i\u00e7e aktar\u0131labilir.<\/p>\n<p><strong>\u00d6nemli:<\/strong> <code>SharedModule<\/code>&#8216;\u00fc lazy loaded mod\u00fcllere <code>imports<\/code> dizisi arac\u0131l\u0131\u011f\u0131yla i\u00e7e aktar\u0131n. Ancak, <code>SharedModule<\/code> i\u00e7inde servis sa\u011flay\u0131c\u0131lar\u0131 (<code>providers<\/code>) tan\u0131mlamay\u0131n. Servisler, genellikle <code>AppModule<\/code> i\u00e7inde veya <code>providedIn: 'root'<\/code> ile global olarak sa\u011flanmal\u0131d\u0131r. E\u011fer bir servisi lazy loaded bir mod\u00fcl\u00fcn <code>providers<\/code> dizisinde tan\u0131mlarsan\u0131z, o servis yaln\u0131zca o mod\u00fcl y\u00fcklendi\u011finde kullan\u0131labilir olur ve her mod\u00fcl kendi servis \u00f6rne\u011fine sahip olur.<\/p>\n<h4>Ortak Servislerin Sa\u011flanmas\u0131<\/h4>\n<p>Uygulama genelinde kullan\u0131lacak servisler (\u00f6rne\u011fin, kimlik do\u011frulama servisi, API servisi), genellikle <code>AppModule<\/code>&#8216;\u00fcn <code>providers<\/code> dizisinde tan\u0131mlan\u0131r veya Angular 6 ve sonras\u0131 i\u00e7in <code>providedIn: 'root'<\/code> ile i\u015faretlenir. Bu, servisin tek bir \u00f6rnek olarak (singleton) t\u00fcm uygulama boyunca eri\u015filebilir olmas\u0131n\u0131 sa\u011flar. Lazy loaded mod\u00fcller de bu global servislere eri\u015febilir.<\/p>\n<pre><code class=\"language-typescript\">\/\/ src\/app\/services\/auth.service.ts\nimport { Injectable } from '@angular\/core';\n\n@Injectable({\n  providedIn: 'root' \/\/ Servis uygulama genelinde tek \u00f6rnek olarak sa\u011flan\u0131r\n})\nexport class AuthService {\n  \/\/ ...\n}<\/code><\/pre>\n<h4>State Y\u00f6netimi (Ngrx gibi) ile Entegrasyon<\/h4>\n<p>E\u011fer uygulaman\u0131z Ngrx gibi bir state y\u00f6netim k\u00fct\u00fcphanesi kullan\u0131yorsa, lazy loaded mod\u00fcller kendi alt state&#8217;lerini tan\u0131mlayabilir ve bunlar\u0131 ana state&#8217;e dinamik olarak ekleyebilir. Ngrx&#8217;in <code>forFeature<\/code> metodu bu senaryo i\u00e7in tasarlanm\u0131\u015ft\u0131r.<\/p>\n<pre><code class=\"language-typescript\">\/\/ src\/app\/admin\/admin.module.ts\nimport { NgModule } from '@angular\/core';\nimport { CommonModule } from '@angular\/common';\nimport { StoreModule } from '@ngrx\/store';\nimport { adminReducer } from '.\/state\/admin.reducer';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    AdminRoutingModule,\n    StoreModule.forFeature('admin', adminReducer) \/\/ Lazy loaded mod\u00fcl\u00fcn state'ini ekle\n  ],\n  \/\/ ...\n})\nexport class AdminModule { }<\/code><\/pre>\n<p>Bu, lazy loaded mod\u00fcllerin kendi state&#8217;lerini y\u00f6netirken, ana uygulaman\u0131n state&#8217;ini \u015fi\u015firmemesini sa\u011flar.<\/p>\n<h3>Lazy Loading En \u0130yi Uygulamalar\u0131 (Best Practices)<\/h3>\n<p>Lazy loading&#8217;den en iyi \u015fekilde faydalanmak i\u00e7in baz\u0131 en iyi uygulamalar\u0131 takip etmek \u00f6nemlidir:<\/p>\n<p>*   <strong>Mod\u00fcl S\u0131n\u0131rlar\u0131n\u0131 Do\u011fru Belirleme:<\/strong> Uygulaman\u0131z\u0131n her bir ana \u00f6zelli\u011fini veya b\u00f6l\u00fcm\u00fcn\u00fc ayr\u0131 bir mod\u00fcl olarak d\u00fc\u015f\u00fcn\u00fcn. \u00d6rne\u011fin, &#8220;Admin Paneli&#8221;, &#8220;Kullan\u0131c\u0131 Profilleri&#8221;, &#8220;\u00dcr\u00fcn Katalo\u011fu&#8221; gibi mant\u0131ksal olarak ayr\u0131labilir b\u00f6l\u00fcmler lazy loaded mod\u00fcller i\u00e7in iyi adaylard\u0131r.<br \/>\n*   <strong>Payla\u015f\u0131lan Mod\u00fclleri Dikkatli Y\u00f6netme:<\/strong> Birden fazla lazy loaded mod\u00fcl taraf\u0131ndan kullan\u0131lan ortak bile\u015fenleri, direktifleri ve pipe&#8217;lar\u0131 bir <code>SharedModule<\/code> i\u00e7inde toplay\u0131n. Bu <code>SharedModule<\/code>&#8216;\u00fc her lazy loaded mod\u00fcle <code>imports<\/code> dizisi arac\u0131l\u0131\u011f\u0131yla i\u00e7e aktar\u0131n. Ancak, <code>SharedModule<\/code>&#8216;\u00fcn kendisini lazy load etmeyin ve i\u00e7inde servis sa\u011flay\u0131c\u0131lar\u0131 tan\u0131mlamaktan ka\u00e7\u0131n\u0131n.<br \/>\n*   <strong>K\u00fc\u00e7\u00fck ve Odaklanm\u0131\u015f Mod\u00fcller Olu\u015fturma:<\/strong> Her bir lazy loaded mod\u00fcl\u00fcn tek bir sorumlulu\u011fu olmal\u0131 ve m\u00fcmk\u00fcn oldu\u011funca k\u00fc\u00e7\u00fck tutulmal\u0131d\u0131r. Bu, hem kodun anla\u015f\u0131l\u0131rl\u0131\u011f\u0131n\u0131 art\u0131r\u0131r hem de paket boyutlar\u0131n\u0131 daha y\u00f6netilebilir k\u0131lar.<br \/>\n*   <strong>Preloading Stratejilerini Ak\u0131ll\u0131ca Kullanma:<\/strong> <code>PreloadAllModules<\/code> genellikle iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. Ancak, uygulaman\u0131z \u00e7ok say\u0131da lazy loaded mod\u00fcl i\u00e7eriyorsa veya belirli mod\u00fcllerin \u00f6ncelikli olarak y\u00fcklenmesi gerekiyorsa, \u00f6zel bir preloading stratejisi olu\u015fturmay\u0131 d\u00fc\u015f\u00fcn\u00fcn. Kullan\u0131c\u0131 davran\u0131\u015flar\u0131n\u0131 analiz ederek en \u00e7ok ziyaret edilen rotalar\u0131 \u00f6nceden y\u00fcklemek mant\u0131kl\u0131 olabilir.<br \/>\n*   <strong>Performans \u0130zleme ve Optimizasyon:<\/strong> Lazy loading uyguland\u0131ktan sonra bile, uygulaman\u0131z\u0131n performans\u0131n\u0131 d\u00fczenli olarak izleyin. Taray\u0131c\u0131 geli\u015ftirici ara\u00e7lar\u0131n\u0131 (Network sekmesi) kullanarak paket boyutlar\u0131n\u0131 ve y\u00fckleme s\u00fcrelerini kontrol edin. Gerekirse daha fazla optimizasyon (\u00f6rne\u011fin, a\u011fa\u00e7 sallama &#8211; tree-shaking, s\u0131k\u0131\u015ft\u0131rma) yap\u0131n.<br \/>\n*   <strong>Route Guard&#8217;lar ile Entegrasyon (<code>canLoad<\/code>):<\/strong> <code>canLoad<\/code> guard&#8217;\u0131, bir mod\u00fcl\u00fcn y\u00fcklenmeden \u00f6nce belirli ko\u015fullar\u0131 kontrol etmenizi sa\u011flar. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n belirli bir mod\u00fcl\u00fc y\u00fckleme yetkisi yoksa, mod\u00fcl\u00fcn indirilmesini tamamen engelleyebilirsiniz. Bu, hassas verileri i\u00e7eren mod\u00fcller i\u00e7in g\u00fcvenlik katman\u0131 sa\u011flar.<\/p>\n<pre><code class=\"language-typescript\">\/\/ src\/app\/auth.guard.ts\nimport { Injectable } from '@angular\/core';\nimport { CanLoad, Route, UrlSegment, UrlTree, Router } from '@angular\/router';\nimport { Observable } from 'rxjs';\nimport { AuthService } from '.\/services\/auth.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AuthGuard implements CanLoad {\n  constructor(private authService: AuthService, private router: Router) {}\n\n  canLoad(\n    route: Route,\n    segments: UrlSegment[]): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\n    \n    if (this.authService.isAuthenticated()) {\n      return true;\n    } else {\n      this.router.navigate(['\/login']);\n      return false;\n    }\n  }\n}<\/code><\/pre>\n<p>Ve <code>app-routing.module.ts<\/code> i\u00e7inde kullan\u0131m\u0131:<\/p>\n<pre><code class=\"language-typescript\">\/\/ src\/app\/app-routing.module.ts\nimport { AuthGuard } from '.\/auth.guard';\n\nconst routes: Routes = [\n  \/\/ ...\n  {\n    path: 'admin',\n    loadChildren: () => import('.\/admin\/admin.module').then(m => m.AdminModule),\n    canLoad: [AuthGuard] \/\/ Mod\u00fcl y\u00fcklenmeden \u00f6nce AuthGuard'\u0131 \u00e7al\u0131\u015ft\u0131r\n  },\n  \/\/ ...\n];<\/code><\/pre>\n<h3>S\u0131k Kar\u015f\u0131la\u015f\u0131lan Sorunlar ve \u00c7\u00f6z\u00fcmleri<\/h3>\n<p>Lazy loading ile \u00e7al\u0131\u015f\u0131rken kar\u015f\u0131la\u015fabilece\u011finiz baz\u0131 yayg\u0131n sorunlar ve \u00e7\u00f6z\u00fcmleri:<\/p>\n<p>*   <strong>Mod\u00fcl Bulunamad\u0131 Hatalar\u0131:<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> <code>Cannot find module '.\/admin\/admin.module'<\/code> gibi hatalar alabilirsiniz.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> <code>loadChildren<\/code> i\u00e7indeki yolun do\u011fru oldu\u011fundan ve dosya ad\u0131n\u0131n b\u00fcy\u00fck\/k\u00fc\u00e7\u00fck harf duyarl\u0131l\u0131\u011f\u0131na dikkat etti\u011finizden emin olun. Ayr\u0131ca, <code>AdminModule<\/code> s\u0131n\u0131f\u0131n\u0131n do\u011fru \u015fekilde d\u0131\u015fa aktar\u0131ld\u0131\u011f\u0131ndan emin olun.<br \/>\n*   <strong>Ba\u011f\u0131ml\u0131l\u0131k Sorunlar\u0131 (Ortak Servisler):<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> Lazy loaded bir mod\u00fclde bir servis kullanmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131zda, servisin yeni bir \u00f6rne\u011finin olu\u015fturuldu\u011funu veya tan\u0131ms\u0131z oldu\u011funu fark edebilirsiniz.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Uygulama genelinde tek bir \u00f6rnek olarak sa\u011flanmas\u0131 gereken servisleri <code>AppModule<\/code>&#8216;\u00fcn <code>providers<\/code> dizisinde veya <code>providedIn: 'root'<\/code> ile sa\u011flay\u0131n. Bir servisi sadece belirli bir lazy loaded mod\u00fcle \u00f6zg\u00fc yapmak istiyorsan\u0131z, o mod\u00fcl\u00fcn <code>providers<\/code> dizisinde tan\u0131mlayabilirsiniz, ancak bu durumda di\u011fer mod\u00fcller bu servisin farkl\u0131 bir \u00f6rne\u011fine sahip olacakt\u0131r.<br \/>\n*   <strong>Yanl\u0131\u015f <code>forChild<\/code> \/ <code>forRoot<\/code> Kullan\u0131m\u0131:<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> <code>RouterModule.forRoot()<\/code>&#8216;u birden fazla mod\u00fclde kullanmak veya lazy loaded mod\u00fcllerde <code>RouterModule.forChild()<\/code> yerine <code>forRoot()<\/code> kullanmak beklenmedik y\u00f6nlendirme davran\u0131\u015flar\u0131na veya hatalara yol a\u00e7abilir.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> <code>RouterModule.forRoot()<\/code> yaln\u0131zca uygulaman\u0131n k\u00f6k y\u00f6nlendirme mod\u00fcl\u00fcnde (<code>AppRoutingModule<\/code>) bir kez kullan\u0131lmal\u0131d\u0131r. Di\u011fer t\u00fcm \u00f6zellik mod\u00fcllerinde (lazy loaded veya eager loaded olsun) <code>RouterModule.forChild()<\/code> kullan\u0131lmal\u0131d\u0131r.<br \/>\n*   <strong>Yava\u015f Y\u00fckleme S\u00fcreleri (Preloading Olmadan):<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> Lazy loaded mod\u00fcllere ilk navigasyonda belirgin bir gecikme ya\u015fanmas\u0131.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Uygulaman\u0131z\u0131n ihtiya\u00e7lar\u0131na uygun bir preloading stratejisi uygulay\u0131n. <code>PreloadAllModules<\/code> ile ba\u015flayabilir veya daha \u00f6zelle\u015ftirilmi\u015f bir strateji geli\u015ftirebilirsiniz.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Lazy loading, Angular uygulamalar\u0131n\u0131n performans\u0131n\u0131 ve kullan\u0131c\u0131 deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131ran vazge\u00e7ilmez bir optimizasyon tekni\u011fidir. Uygulaman\u0131z\u0131n ba\u015flang\u0131\u00e7 y\u00fckleme s\u00fcresini k\u0131saltarak, daha k\u00fc\u00e7\u00fck ilk paket boyutlar\u0131 sunarak ve kaynaklar\u0131 daha verimli kullanarak, modern web uygulamalar\u0131n\u0131n beklentilerini kar\u015f\u0131laman\u0131za yard\u0131mc\u0131 olur.<\/p>\n<p>Do\u011fru mod\u00fcl yap\u0131s\u0131n\u0131 olu\u015fturmak, <code>loadChildren<\/code> \u00f6zelli\u011fini etkin bir \u015fekilde kullanmak ve preloading stratejilerini ak\u0131ll\u0131ca uygulamak, Angular uygulaman\u0131z\u0131n \u00f6l\u00e7eklenebilirli\u011fini ve bak\u0131m kolayl\u0131\u011f\u0131n\u0131 da art\u0131racakt\u0131r. Uygulaman\u0131z b\u00fcy\u00fcd\u00fck\u00e7e, lazy loading&#8217;in sundu\u011fu faydalar daha da belirgin hale gelecektir. Bu makaledeki ad\u0131mlar\u0131 ve en iyi uygulamalar\u0131 takip ederek, Angular uygulamalar\u0131n\u0131z\u0131 daha h\u0131zl\u0131, daha duyarl\u0131 ve daha kullan\u0131c\u0131 dostu hale getirebilirsiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Angular Uygulamalar\u0131nda Lazy Loading Rotalar\u0131 Nas\u0131l Kullan\u0131l\u0131r?\nAngular, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in g\u00fc\u00e7l\u00fc ve pop\u00fcler bir \u00e7","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":[1488],"tags":[],"class_list":{"0":"post-35335","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-angular","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>Angular Uygulamalar\u0131nda Lazy Loading Rotalar\u0131 Nas\u0131l Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\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\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Angular Uygulamalar\u0131nda Lazy Loading Rotalar\u0131 Nas\u0131l Kullan\u0131l\u0131r?\" \/>\n<meta property=\"og:description\" content=\"Angular Uygulamalar\u0131nda Lazy Loading Rotalar\u0131 Nas\u0131l Kullan\u0131l\u0131r? Angular, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in g\u00fc\u00e7l\u00fc ve pop\u00fcler bir \u00e7\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-28T09:40:42+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=\"18 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Angular Uygulamalar\u0131nda Lazy Loading Rotalar\u0131 Nas\u0131l Kullan\u0131l\u0131r?\",\"datePublished\":\"2025-11-28T09:40:42+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/\"},\"wordCount\":2818,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Angular\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/\",\"name\":\"Angular Uygulamalar\u0131nda Lazy Loading Rotalar\u0131 Nas\u0131l Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-28T09:40:42+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Angular Uygulamalar\u0131nda Lazy Loading Rotalar\u0131 Nas\u0131l Kullan\u0131l\u0131r?\"}]},{\"@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":"Angular Uygulamalar\u0131nda Lazy Loading Rotalar\u0131 Nas\u0131l Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","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\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/","og_locale":"tr_TR","og_type":"article","og_title":"Angular Uygulamalar\u0131nda Lazy Loading Rotalar\u0131 Nas\u0131l Kullan\u0131l\u0131r?","og_description":"Angular Uygulamalar\u0131nda Lazy Loading Rotalar\u0131 Nas\u0131l Kullan\u0131l\u0131r? Angular, modern web uygulamalar\u0131 geli\u015ftirmek i\u00e7in g\u00fc\u00e7l\u00fc ve pop\u00fcler bir \u00e7","og_url":"https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-28T09:40:42+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"18 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Angular Uygulamalar\u0131nda Lazy Loading Rotalar\u0131 Nas\u0131l Kullan\u0131l\u0131r?","datePublished":"2025-11-28T09:40:42+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/"},"wordCount":2818,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Angular"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/","url":"https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/","name":"Angular Uygulamalar\u0131nda Lazy Loading Rotalar\u0131 Nas\u0131l Kullan\u0131l\u0131r? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-28T09:40:42+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/angular-uygulamalarinda-lazy-loading-rotalari-nasil-kullanilir\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Angular Uygulamalar\u0131nda Lazy Loading Rotalar\u0131 Nas\u0131l Kullan\u0131l\u0131r?"}]},{"@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\/35335","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=35335"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35335\/revisions"}],"predecessor-version":[{"id":35336,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35335\/revisions\/35336"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35335"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35335"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}