﻿
{"id":26701,"date":"2023-11-12T11:50:41","date_gmt":"2023-11-12T11:50:41","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=26701"},"modified":"2023-11-12T11:50:41","modified_gmt":"2023-11-12T11:50:41","slug":"angular-17-defer-deferrable-views","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/angular-17-defer-deferrable-views\/","title":{"rendered":"Angular 17 &#8211; @defer Deferrable Views"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde Angular 17 ile <a target=\"_blank\" href=\"https:\/\/www.gencayyildiz.com\/blog\/angular-8-dynamic-imports-for-lazy-loading\/\" rel=\"noopener\">component lazy loading<\/a> davran\u0131\u015f\u0131na kar\u015f\u0131n yeni bir yol olarak gelmi\u015f olan <code>@defer<\/code> syntax&#8217;\u0131 ile birlikte <em>Deferrable Views<\/em> \u00f6zelli\u011fini inceliyor olaca\u011f\u0131z.<\/p>\n<h3>@defer Nedir? Nas\u0131l Bir \u0130\u015fleve Sahiptir?<\/h3>\n<p><code>@defer<\/code> syntax&#8217;\u0131 component&#8217;lere lazy loading davran\u0131\u015f\u0131n\u0131 uygulaman\u0131n yeni bir yolunu sa\u011flayan \u00f6zelliktir. \u0130\u015flevsel olarak, bir ko\u015fula kar\u015f\u0131n lazy loading ile y\u00fcklenecek bir template blo\u011fu tan\u0131mlanmas\u0131na olanak tan\u0131maktad\u0131r. Bu blok i\u00e7erisinde bulunan t\u00fcm component, pipe, directive ve library&#8217;ler lazy loading ile y\u00fcklenecektir.<\/p>\n<blockquote><p><em>Mevcut lazy loading davran\u0131\u015f\u0131 Router mekanizmas\u0131na ba\u011fl\u0131yken, <code>@defer<\/code> ile gelecek olan davran\u0131\u015f selector \u00fczerinden kullan\u0131lan component&#8217;ler ve kapsad\u0131klar\u0131 i\u00e7erikleri i\u00e7in ge\u00e7erlidir.<\/em><\/p><\/blockquote>\n<p>Misal olarak a\u015fa\u011f\u0131daki \u00e7al\u0131\u015fmay\u0131 ele al\u0131rsak e\u011fer;<\/p>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@Component({\r\n  selector: 'app-child2',\r\n  standalone: true,\r\n  imports: &#x5B;CommonModule],\r\n  template: `Child2 Component`\r\n})\r\nexport class Child2Component {\r\n\r\n}\r\n<\/pre>\n<\/div>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@Component({\r\n  selector: 'app-child1',\r\n  standalone: true,\r\n  imports: &#x5B;CommonModule, Child2Component, ExamplePipe],\r\n  template: `Child1 Component\r\n    &lt;br&gt;\r\n    &lt;app-child2&gt;&lt;\/app-child2&gt;\r\n  `\r\n})\r\nexport class Child1Component {\r\n\r\n}\r\n<\/pre>\n<\/div>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@Component({\r\n  selector: 'app-home',\r\n  standalone: true,\r\n  imports: &#x5B;CommonModule, Child1Component, ExampleDirective],\r\n  template: `Home Component\r\n  &lt;br&gt;\r\n  &lt;app-child1&gt;&lt;\/app-child1&gt;\r\n  `\r\n})\r\nexport class HomeComponent {\r\n\r\n}\r\n<\/pre>\n<\/div>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere &#8216;Child2Component&#8217; &#8216;Child1Component&#8217;te, &#8216;Child1Component&#8217; ise &#8216;HomeComponent&#8217;te kullan\u0131lmaktad\u0131r. Ayr\u0131ca bu component&#8217;lere dikkat ederseniz &#8216;ExamplePipe&#8217; ve &#8216;ExampleDirective&#8217; yap\u0131lar\u0131 da e\u015flik etmektedir. Ve nihai olarak &#8216;HomeComponent&#8217;in de &#8216;AppComponent&#8217;te a\u015fa\u011f\u0131daki gibi kullan\u0131ld\u0131\u011f\u0131n\u0131 varsayal\u0131m.<\/p>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n@Component({\r\n  selector: 'app-root',\r\n  standalone: true,\r\n  imports: &#x5B;CommonModule, RouterOutlet, HomeComponent],\r\n  template: `\r\n    &lt;button&gt;Change State&lt;\/button&gt;\r\n    @if(state){\r\n      &lt;app-home&gt;&lt;\/app-home&gt;\r\n    }\r\n  `\r\n})\r\nexport class AppComponent {\r\n  state: boolean = false;\r\n  ngOnInit() {\r\n    const button = document.getElementsByTagName(&quot;button&quot;);\r\n    fromEvent(button, &quot;click&quot;).subscribe(() =&gt; {\r\n      this.state = !this.state;\r\n    })\r\n  }\r\n}\r\n<\/pre>\n<\/div>\n<p>Yukar\u0131daki kullan\u0131ma g\u00f6z atarsan\u0131z e\u011fer &#8216;HomeComponent&#8217; sayfan\u0131n ilk y\u00fcklendi\u011fi anda g\u00f6z\u00fckmemekte ve state de\u011fi\u015fkeninin de\u011ferine g\u00f6re bu durum opsiyonel bir \u015fekilde devam etmektedir. \u015eimdi <em>-madem g\u00f6z\u00fckmeyecekti o zaman bu component&#8217;i lazy loading ile y\u00fckleyeydik-<\/em> dedi\u011finizi duyar gibiyim. Ki makbul olanda budur. \u0130\u015fte bu durumda <code>@defer<\/code> \u00f6zelli\u011fi ile ilgili component&#8217;i ve bu component&#8217;in kulland\u0131\u011f\u0131 t\u00fcm alt component, pipe ve directive&#8217;leri kullan\u0131c\u0131n\u0131n ger\u00e7ekten ihtiyac\u0131 oldu\u011fu durumda rahatl\u0131kla y\u00fckleyebilirsiniz.<\/p>\n<p>\u015e\u00f6yle ki;<\/p>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &lt;button&gt;Change State&lt;\/button&gt;\r\n    @defer(when state){\r\n      &lt;app-home&gt;&lt;\/app-home&gt;\r\n    }\r\n<\/pre>\n<\/div>\n<p>\u0130\u015fte bu kadar \ud83d\ude42<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/Angular-17-@defer-Deferrable-Views.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/Angular-17-@defer-Deferrable-Views.gif\" alt=\"Angular 17 - @defer Deferrable Views\" width=\"692\" height=\"182\" class=\"aligncenter size-full wp-image-26706\" \/><\/a>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere <code>@defer<\/code> kontrol\u00fc ile ilgili component(ve alt component&#8217;ler ile birlikte pipe ve directive&#8217;ler) ko\u015ful sa\u011fland\u0131\u011f\u0131nda y\u00fcklenecektir ve b\u00f6ylece performansl\u0131 bir \u00e7al\u0131\u015fma sergilenmi\u015f olacakt\u0131r.<\/p>\n<p>\u015eimdi <code>@defer<\/code> syntax&#8217;\u0131n\u0131n ba\u015fka bir ilgin\u00e7 \u00f6zelli\u011fine odaklanal\u0131m. Ertelenmi\u015f blok(deferred block) y\u00fcklenene kadar placeholder&#8217;\u0131n g\u00f6r\u00fcnt\u00fclenmesini&#8230;<\/p>\n<h3>@placeholder, @loading ve @error<\/h3>\n<p><code>@defer<\/code> ile y\u00fckleme ko\u015fulu kar\u015f\u0131lanana kadar farkl\u0131 bir g\u00f6r\u00fcnt\u00fcde bulunmak istiyorsan\u0131z e\u011fer <code>@placeholder<\/code>&#8216;\u0131 kullanabilirsiniz. Daha sonra y\u00fckleme ko\u015fulu kar\u015f\u0131land\u0131\u011f\u0131 taktirde component y\u00fcklenene kadar <code>@loading<\/code>&#8216;den istifade edebilir ve y\u00fckleme s\u00fcrecinde bir hatayla kar\u015f\u0131la\u015f\u0131l\u0131rsa e\u011fer <code>@error<\/code> blo\u011funda gerekli \u00f6nlemleri alabilirsiniz.<\/p>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n      @defer(when state){\r\n        &lt;app-home&gt;&lt;\/app-home&gt;\r\n      }\r\n      @placeholder {\r\n        ...***...\r\n      }\r\n      @loading {\r\n        &lt;marquee&gt;Loading...&lt;\/marquee&gt;\r\n      }\r\n      @error {\r\n        Error\r\n      }\r\n<\/pre>\n<\/div>\n<blockquote><p><em style=\"color:green;\">Burada unutulmamas\u0131 gereken, <code>@defer<\/code> i\u00e7eri\u011fi lazy loading&#8217;le y\u00fcklerken; <code>@placeholder<\/code>, <code>@loading<\/code> ve <code>@error<\/code> eagerly loading ile y\u00fckleme ger\u00e7ekle\u015ftirmektedir.<\/em><\/p><\/blockquote>\n<p>Ayr\u0131ca kimi durumlarda <code>@defer<\/code> blo\u011funun y\u00fcklenmesi olduk\u00e7a h\u0131zl\u0131 olabilece\u011finden dolay\u0131 <code>@loading<\/code> blo\u011funun \u00e7ok h\u0131zl\u0131 g\u00f6r\u00fcnt\u00fclenip gizlenmesi ve bu durumdan kaynakl\u0131 bir titre\u015fim etkisi riski s\u00f6z konusu olabilmektedir. \u0130\u015fte bu duruma \u00f6nlem ama\u00e7l\u0131 y\u00fcklemenin ka\u00e7 milisaniye sonra g\u00f6r\u00fcnt\u00fclenece\u011fini belirtmek i\u00e7in <code>@loading<\/code> blo\u011funda <code>after<\/code> se\u00e7ene\u011fini kullanabilirsiniz.<\/p>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n      @defer(when state){\r\n        &lt;app-home&gt;&lt;\/app-home&gt;\r\n      }\r\n      @placeholder {\r\n        ...***...\r\n      }\r\n      @loading(after 150ms;) {\r\n        &lt;marquee&gt;Loading...&lt;\/marquee&gt;\r\n      }\r\n<\/pre>\n<\/div>\n<p><code>after<\/code>, <code>@defer<\/code> i\u00e7eri\u011finin y\u00fcklenmesi belirtilen zamansal de\u011ferden daha az s\u00fcrd\u00fc\u011f\u00fc taktirde <code>@loading<\/code> blo\u011funu hi\u00e7bir zaman g\u00f6r\u00fcnt\u00fclemeyecektir. B\u00f6ylece olas\u0131 titre\u015fim etkisi ortadan kald\u0131r\u0131lm\u0131\u015f olacakt\u0131r.<\/p>\n<p>Ayr\u0131ca <code>minimum<\/code> se\u00e7ene\u011fi ile de y\u00fckleme i\u00e7in minimum s\u00fcreyi belirleyebilirsiniz. Yani, <code>@defer<\/code> i\u00e7eri\u011finin y\u00fcklenmesi <code>minimum<\/code> de\u011ferinden daha h\u0131zl\u0131ysa o taktirde <code>@loading<\/code> i\u00e7eri\u011fi bu s\u00fcre zarf\u0131nda g\u00f6r\u00fcnt\u00fclenecektir.<\/p>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n      @defer(when state){\r\n        &lt;app-home&gt;&lt;\/app-home&gt;\r\n      }\r\n      @placeholder {\r\n        ...***...\r\n      }\r\n      @loading(minimum 150ms;) {\r\n        &lt;marquee&gt;Loading...&lt;\/marquee&gt;\r\n      }\r\n<\/pre>\n<\/div>\n<p>Tabi isterseniz t\u00fcm bu se\u00e7enekleri a\u015fa\u011f\u0131daki gibi k\u00fcm\u00fclatif bir \u015fekilde de kullanabilirsiniz;<\/p>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n      @defer(when state){\r\n        &lt;app-home&gt;&lt;\/app-home&gt;\r\n      }\r\n      @placeholder {\r\n        ...***...\r\n      }\r\n      @loading(after 50ms;minimum 500ms;) {\r\n        &lt;marquee&gt;Loading...&lt;\/marquee&gt;\r\n      }\r\n<\/pre>\n<\/div>\n<p><code>minimum<\/code> se\u00e7ene\u011fi ayr\u0131ca <code>@placeholder<\/code> i\u00e7in de kullan\u0131labilmektedir. Bu hi\u00e7bir ko\u015ful olmaks\u0131z\u0131n y\u00fcklemenin hemen ger\u00e7ekle\u015fti\u011fi durumlarda, olas\u0131 titre\u015fim etkisini \u00f6nlemek i\u00e7in yararl\u0131 olabilir.<\/p>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    @placeholder(minimum 500ms) {\r\n      ...***...\r\n    }\r\n<\/pre>\n<\/div>\n<h3>@defer Ko\u015fullar\u0131<\/h3>\n<p>Angular 17&#8217;de <code>@defer<\/code> \u00f6zelli\u011fi ile bir\u00e7ok mant\u0131kta ko\u015fullu davran\u0131\u015f sergilenebilmektedir. \u015eimdi gelin bunlar\u0131 tek tek inceleyelim;<\/p>\n<ul>\n<li><strong><em>Ko\u015fulsuz\/<code>on idle<\/code><\/em><\/strong><br \/>\nHi\u00e7bir ko\u015fulun olmad\u0131\u011f\u0131 durumdur.<\/p>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    @defer{\r\n      &lt;app-home&gt;&lt;\/app-home&gt;\r\n    }\r\n<\/pre>\n<\/div>\n<p>ya da<\/p>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    @defer(on idle){\r\n      &lt;app-home&gt;&lt;\/app-home&gt;\r\n    }\r\n<\/pre>\n<\/div>\n<p>\u015feklinde ifade edilir.\n<\/li>\n<li><strong>Boolean Ko\u015fulu\/<code>when<\/code><\/strong><br \/>\nTemplate&#8217;te y\u00fcklenecek blo\u011fu basit bir boolean t\u00fcrden de\u011fere ba\u011flayan ko\u015fuldur.<\/p>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    @defer(when state){\r\n      &lt;app-home&gt;&lt;\/app-home&gt;\r\n    }\r\n<\/pre>\n<\/div>\n<p><code>@defer<\/code> se\u00e7ene\u011finin <code>when<\/code> ko\u015fulu built-in gelen <code>*ngIf<\/code> direktifinin davran\u0131\u015f\u0131na benzetilebilir. \u0130kisinin aras\u0131ndaki radikal fark, <code>*ngIf<\/code> ile yap\u0131lan kontrolde boolean de\u011fer false oldu\u011fu taktirde ilgili template g\u00f6rselden kald\u0131r\u0131l\u0131rken, <code>@defer<\/code>&#8216;\u0131n <code>when<\/code> ko\u015fulunda ise kald\u0131r\u0131lmayacakt\u0131r. Sade ve sadece ko\u015ful ger\u00e7ekle\u015fti\u011fi taktirde ilgili blok y\u00fcklenecek \u015fekilde i\u015flevsellik g\u00f6sterecektir.\n<\/li>\n<li><strong><code>on immediate<\/code><\/strong><br \/>\n<code>on immediate<\/code> ko\u015fulu ile ilgili blo\u011fun y\u00fcklenmesi hemen tetiklenebilmektedir.<\/p>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    @defer(on immediate){\r\n      &lt;app-home&gt;&lt;\/app-home&gt;\r\n    }\r\n<\/pre>\n<\/div>\n<\/li>\n<li><strong><code>on timer<\/code><\/strong><br \/>\n\u0130lgili blo\u011fun belirli bir s\u00fcre sonra y\u00fcklenmesini tetikler.<\/p>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    @defer(on timer(10s)){\r\n      &lt;app-home&gt;&lt;\/app-home&gt;\r\n    }\r\n    @placeholder {\r\n      ...***...\r\n    }\r\n<\/pre>\n<\/div>\n<\/li>\n<li><strong><code>on hover<\/code><\/strong><br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/Angular-17-@defer-Deferrable-Views-1.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2023\/11\/Angular-17-@defer-Deferrable-Views-1.gif\" alt=\"Angular 17 - @defer Deferrable Views\" width=\"360\" height=\"202\" class=\"alignleft size-full wp-image-26710\" \/><\/a><code>on hover<\/code> ko\u015fulu ile kullan\u0131c\u0131n\u0131n template reference variable ile belirtilen html nesnesinin \u00fczerine geldi\u011finde <code>@defer<\/code> i\u00e7eri\u011finin y\u00fcklenmesi tetiklenmektedir.<\/p>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &lt;div #trigger&gt;\r\n      Hover me\r\n    &lt;\/div&gt;    \r\n    @defer(on hover(trigger)){\r\n      &lt;app-home&gt;&lt;\/app-home&gt;\r\n    }\r\n    @placeholder {\r\n      ...***...\r\n    }\r\n<\/pre>\n<\/div>\n<\/li>\n<li><strong><code>on interaction<\/code><\/strong><br \/>\n<code>on hover<\/code>&#8216;a benzer \u015fekilde <code>on interaction<\/code> ile de kullan\u0131c\u0131n\u0131n belirtilen html nesnesiyle click ya da keydown event&#8217;leriyle etkile\u015fime girdi\u011fi taktirde <code>@defer<\/code> i\u00e7eri\u011finin y\u00fcklenmesi tetiklenmektedir.<\/p>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &lt;div #trigger&gt;\r\n      Click me\r\n    &lt;\/div&gt;    \r\n    @defer(on interaction(trigger)){\r\n      &lt;app-home&gt;&lt;\/app-home&gt;\r\n    }\r\n    @placeholder {\r\n      ...***...\r\n    }\r\n<\/pre>\n<\/div>\n<\/li>\n<li><strong><code>on viewport<\/code><\/strong><br \/>\nBelirtilen html \u00f6\u011fesi g\u00f6r\u00fcn\u00fcr hale geldi\u011fi anda <code>@defer<\/code> blo\u011funun y\u00fcklemesini tetikler.<\/p>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &lt;div #hi&gt;\r\n      Hi\r\n    &lt;\/div&gt;    \r\n    @defer(on viewport(hi)){\r\n      &lt;app-home&gt;&lt;\/app-home&gt;\r\n    }\r\n    @placeholder {\r\n      ...***...\r\n    }\r\n<\/pre>\n<\/div>\n<\/li>\n<\/ul>\n<p>T\u00fcm bu ko\u015fullar\u0131 k\u00fcm\u00fclatif olarak kullanmak istiyorsan\u0131z e\u011fer a\u015fa\u011f\u0131daki gibi ,(virg\u00fcl) ile \u00e7oklu bir kullan\u0131m sergileyebilirsiniz.<\/p>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &lt;div #trigger&gt;\r\n      Hover me\r\n    &lt;\/div&gt;    \r\n    @defer(on hover(trigger), timer(10s)){\r\n      &lt;app-home&gt;&lt;\/app-home&gt;\r\n    }\r\n    @placeholder {\r\n      ...***...\r\n    }\r\n<\/pre>\n<\/div>\n<p>Buradaki \u00e7al\u0131\u015fmaya g\u00f6z atarsan\u0131z, <code>@defer<\/code> i\u00e7eri\u011fi ya <code>on hover(trigger)<\/code> ko\u015fuluyla ilgili html \u00f6\u011fesinin \u00fczerine fareyle gelince y\u00fcklenecek ya da <code>timer(10s)<\/code> ko\u015fuluyla da 10 saniyeye kadar kendili\u011finden y\u00fcklenecektir.<\/p>\n<h3>Prefetching<\/h3>\n<p><code>@defer<\/code> \u00f6zelli\u011finin <code>prefetch<\/code> \u00f6zelli\u011fi ile bir component&#8217;in y\u00fcklenme maliyetini \u00f6nceden kar\u015f\u0131layarak, yukar\u0131daki sat\u0131rlarda g\u00f6rd\u00fc\u011f\u00fcm\u00fcz herhangi bir ko\u015fulla g\u00f6r\u00fcnt\u00fcleme i\u015flemini ger\u00e7ekle\u015ftirebiliriz. Misal olarak a\u015fa\u011f\u0131daki gibi <code>prefetch on idle<\/code> komutu ile i\u00e7eri\u011fi \u00f6nceden y\u00fckleyebilir ve <code>on interaction(trigger)<\/code> komutu ile de ilgili html \u00f6\u011fesine t\u0131klan\u0131nca g\u00f6sterebilirsiniz.<\/p>\n<div style=\"font-size:12px\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    &lt;div #trigger&gt;\r\n      Hover me\r\n    &lt;\/div&gt;    \r\n    @defer(on interaction(trigger); prefetch on idle){\r\n      &lt;app-home&gt;&lt;\/app-home&gt;\r\n    }\r\n    @placeholder {\r\n      ...***...\r\n    }\r\n<\/pre>\n<\/div>\n<p>Nihai olarak;<br \/>\nB\u00f6ylece Angular \u00e7al\u0131\u015fmalar\u0131m\u0131za olduk\u00e7a pratik ve etkili bir nitelik kazand\u0131racak olan <code>@defer<\/code> syntax&#8217;\u0131n\u0131 tam teferruatl\u0131 incelemi\u015f bulunuyoruz. Nacizane olarak kanaatim odur ki; son zamanlardaki gelen yeniliklerden anla\u015f\u0131lan(<span style=\"font-size:12px\"><a href=\"https:\/\/www.gencayyildiz.com\/blog\/angular-16-signals-yapilanmasini-detayli-inceleyelim\/\" rel=\"noopener\" target=\"_blank\">Signals<\/a>, <a href=\"https:\/\/www.gencayyildiz.com\/blog\/angular-17deki-yenilikler\/\" rel=\"noopener\" target=\"_blank\">Control Flow Syntax<\/a> ve mevzu bahis @defer vs.<\/span>), Angular ekibinin, bu mimarinin yar\u0131n\u0131n SPA teknolojilerindeki sancaktarl\u0131\u011f\u0131n\u0131 garanti alt\u0131na alma niyetinde ve ciddiyetindeler oldu\u011fudur. O y\u00fczden Angular&#8217;la umutlu bir \u015fekilde yola devam \ud83d\ude42<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde Angular 17 ile component lazy loading davran\u0131\u015f\u0131na kar\u015f\u0131n yeni bir yol olarak gelmi\u015f olan @defer syntax&#8217;\u0131 ile birlikte Deferrable Views \u00f6zelli\u011fini inceliyor olaca\u011f\u0131z. @defer Nedir? Nas\u0131l Bir \u0130\u015fleve Sahiptir? @defer syntax&#8217;\u0131&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":26698,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4958],"tags":[4962,4978,4966,4965,4960,4963,4969,4968,4967,4964,4973,4974,4972,4975,4977,4971,4970,4961,3779,4976],"class_list":["post-26701","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-angular-17","tag-defer","tag-defer-prefetching","tag-loading","tag-placeholder","tag-angular-17","tag-angular-17-defer","tag-angular-17-error","tag-angular-17-loading","tag-angular-17-placeholder","tag-angular-17-defferable-views","tag-angular-17-on-hover","tag-angular-17-on-interaction","tag-angular-17-on-timer","tag-angular-17-on-viewport","tag-angular-17-prefetching","tag-angular-on-idle","tag-angular-on-immediate","tag-deferrable-views","tag-error","tag-prefetching"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/26701","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=26701"}],"version-history":[{"count":9,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/26701\/revisions"}],"predecessor-version":[{"id":26712,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/26701\/revisions\/26712"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/26698"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=26701"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=26701"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=26701"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}