Herkese Merhabalar. Bildiğiniz üzere bu ay Angular 17 yepyeni bir imaj çalışması ile birlikte yayına çıkarıldı. Yeni versiyon ile birlikte hem framework içerisinde yeni özellikler ve performans iyileştirmeleri gelirken hem de Angular ekosisteminde bir takım yenilikler de bizi bekliyor.
Uzun zamandır ben dahil bir çok Angular geliştiricinin yakındığı konulardan birisi dökümantasyonun çok yetersiz olmasıydı. Rakipleri React ve Vue’ye nazaran Angular çok yetersiz bir dökümana sahipti ve aradığımız bir çok şeyi genel de medium yazılarından, çeşitli bloglardan veya youtube videolardan izleyerek öğrenmek zorunda kalıyorduk. Doğal olarak Angular da uzmanlaşmak için çok fazla araştırma yapmamız gerekiyordu. Bu nedenle yapılan bu yeniliklerin özellikle Angular ekosistemi ile yeni tanışan arkadaşlar için oldukça önem arz edeceğini düşünüyorum.
Bu şekilde düşünenin sadece ben olmadığıma inanıyorum. Keza DevFest İstanbul etkinliğinde konuşmacı olarak katılan Selin Tunç tarafından yapılan oturumda hem 17. versiyonda hem de Angular ekosisteminde gerçekleşen bu yenilikler The New Age Of Angular adı altında tanıtıldı. Gerçekten de Angular için yeni bir çağın başladığını söyleyebiliriz.
Şu an beta versiyonu ile çıkış yapan angular.dev aşağıda belirttimiz imkanları bize sağlıyor.
Yukarıda bahsettiğimiz üzere 17. versiyon ile birlikte Angular ekosisteminde köklü değişiklikler ve iyileştirmeler başlıyor. Bu değişimlerden bir tanesi ise AngularJS ile birlikte aşina olduğumuz Angular logosu. Artık yeni logomuz aşağıda paylaştığım material & neon logo ile değiştirilmiş. İlerleyen süreçlerde Angular 2+ versiyonlarda yeni logoyu bol bol göreceğiz 🙂
Yeni versiyon ile birlikte bir çok yeni ve sıradışı özellikler bizleri bekliyoruz. Eğer daha önce farklı template teknolojileri ile çalıştıysanız sizler için aşina gelebilir. Ancak bazı arkadaşlar için süpriz olacağına inanıyorum 🙂
Yeni versiyon ile birlikte template yönetiminde aşina olduğumuz directive tabanlı control flow elementlerinin daha farklı varyantları ile tanışıyoruz. Daha öncesinde blade, twig ve benzeri view engine ile çalıştıysanız, hocam resmen çalmışlar diyebilirsiniz 😀 Gelin örnekler ile açıklayalım.
Normal oda koşullarında kondisyonel bir yapı kurmak için if ve else directive kullanıyorduk.
Ancak yeni control flow elementlerini kullanarak bu yapıyı aşağıdaki gibi düzenleyebiliriz.
Gördüğünüz üzere herhangi bir directive kullanmadan, container veya template etkiletlerini kullanmadan daha pratik bir şekilde kondisyonel ifadeler (conditional statements) oluşturabiliyoruz. Tek yapmamız gereken keywordlerin başında @ işareti kullanmak. Popülar bir PHP frameworkü olan Laravel, Blade adlı bir view engine içeriyor. Daha öncesinde blade ile view geliştiren arkadaşlar var ise, bu yeni yapıya daha hızlı uyum sağlayabilir diye düşünüyorum ve evet güzel esinlenmişler 😀
Yeni Switch Case Yapısı
Yeni Döngü (For-Loop) Yapısı
Gördüğünüz üzere control flow yönetiminde kullanılan bir çok ifade – statement için alternatif varyasyonlar söz konusu. Yeni gelen bu özellikleri farklı bir syntax sugar olarak düşünebiliriz. Yeni gelen bu özellikler angular ekosistemini daha komplex mi yapacak yoksa templatelerimizi daha da sadeleştirecek mi zamanla göreceğiz.
Başlamadan önce eğer daha önce duymamış olan varsa kısaca bahsedelim. Defer – Lazy loading olarak belirttiğimiz kavramlar kullanmak duyduğumuz bir verinin başlangıçta değil, ihtiyaç halinde yüklenmesi gibi bir anlama gelmektedir.
Lazy loadingi hepimiz biliyoruz ve Angular ile uygulama geliştirirken sıklıkla kullanıyoruz. Ancak şu ana kadar defer edebildiğimiz sadece tanımladığımız routelerimiz ve routelerimize bağladığımız modüller ile sınırlıydı. Ancak 17. versiyon ile birlikte sadece route modüllerini değil view’ları da lazy load edebileceğiz.
Eğer daha önce SEO ile ilgili çalışmalar yaptıysanız PageSpeed Insight adlı toolu duymuşsunuzdir diye tahmin ediyorum. Daha önce duymamış olanlarınız varsa şu şekilde açıklayabilirim. Bu tool ile geliştirdiğimiz web uygulamasındaki performans sorunlarını tespit edebiliyoruz ve bilinen performans önceliklerinden birisi ise kullanıcının sayfa ilk yüklendiğinde karşısına çıkan ekranın olabilecek en hızlı şekilde yüklenmesi.
Örneğin çok büyük bir sayfayı tarayıcımızda açtık ve sayfanın footer alanına gitmek için bir süre aşağı kaydırmamız gerekiyor. Ancak sayfa ilk yüklendiğinde aşağıda olan alanların yüklenmesi bizim için elzem değil. Çünkü görmüyorum bile 🙂 Görebilmek için sayfayı scroll etmem gerekiyor. Dolayısıyla içeriği fazla olan bir sayfayı açtığımda tarayıcı bütün sayfayı oluşturabilmek için gereğinden fazla bir efor ve zaman harcıyor ve ben görebilmem gereken ilk content alanı için beklemek zorunda kalıyorum. Oysaki ilk yüklenen ekran/viewport dışında kalan alanlar benim ve diğer kullanıcılar için öncelikli değil.
İşte bu sorunu çözmek için Angular ekibi Deferrable views adını verdiğimiz yeni bir feature ile karşımıza çıkıyor.
Bu senaryoda yeni versiyon ile birlikte gelen @defer etiketini kullanarak ilgili componentin sadece ekranda görünür olduğu sırada yüklenmesini sağlayabiliriz.
Hydration, Server Side Rendering sırasında server tarafında oluşturulan elementlerin/nesnelerin client yani tarayıcı tarafından erişilmesini sağlayan, Server ve Client stateleri arasında aktarım sağlayan bir mekanizma diyebiliriz. Son altı aydır developer preview de tutulan ve geliştiriciler tarafından oldukça ilgi gören Hydration 17. versiyon ile birlikte kullanabileceğiz.
Yeni versiyonda hydration aynı zamanda server side tarafında render edilen deffered blokları işaretleyerek, client tarafında istenmesi halinde lazy load bir şekilde yüklüyor. Bu sayede gerek SSR gerekse de Client tarafında çalışan bir Angular uygulaması platformdan bağımsız olarak deferred blokları lazy bir şekilde yükleyebiliyor.
Hydration performans bize büyük katkılar sağlıyor. Uygulama client tarafına geçtikten sonra Angular DOM node’larını yeniden oluşturmak yerine var olan node’lar ile eşleştirme sağlıyor. Bu sayede uygulamamız daha hızlı bir şekilde yükleniyor ve First-contentful paint ve Largest Contentful Paint gibi performans analizlerinde daha iyi bir performans sağlıyor. Bu sayede uygulamamızın SEO değerlerine daha iyi katkı sağlıyor.
Yeni versiyonda bizleri bekleyen diğer özelliklerden bir tanesi ise lifecycle hooklar. Bu versiyonda afterRender ve afterNextRender olmak üzere nur topu gibi 2 yeni hook’umuz var. Peki ne işe yarıyor bu hooklar gelin hep birlikte bakalım.
Aşağıda yer alan örnekte afterRender hook’unu kullanıyoruz ve component her render oldugunda tooltip elementimizin konumunu content alanına bağlı olarak değiştiriyoruz. Componentimiz her render oldugunda afterRender içerisinde sağladığımız callback çalışıyor ve işlemlerimizi gerçekleştirebiliyoruz.
Burada dikkat etmeniz gereken husus afterRender hook’unun hangi phase içerisinde çalıştırdığınız. Eğer default değerde bırakırsanız, performans problemleri ile karşılaşabilirsiniz.
afterNextRender ise hook oluşturulduktan sonra gerçekleşecek olan ilk render sırasında bir defaya mahsus olarak çalışıyor. Konsept olarak her iki hook aynı fonksiyonaliteye sahip ancak afterRender component her render olduğunda çalışırken afterNextRender takip eden render işleminde bir defaya mahsus olarak çalışıyor.
Diğer hooklar hakkında daha fazla bilgi almak isterseniz aşağıda paylaştığım diğer içeriklere göz atabilirsiniz.
Angular Component Guide: How ngDoCheck Hook Works ?
Angular Component Guide: How ngOnChanges Hook Works ?
Angular 17 çeşitli performans iyileştirmeleri ile birlikte geliyor. Bunları şu şekilde sıralayabiliriz.
Evet arkadaşlar 17. versiyon ile birlikte gelen yenilikleri ve Angular ekosisteminde yaşanan gelişmeleri olabildiğince detaylı bir şekilde anlatmaya çalıştım.
Herkese merhaba arkadaşlar. Önceki yazımızda openlayers nedir ve neden kullanmalıyız sorunu yanıtlamıştık. Popüler harita kütüphanelerinden…
Merhaba arkadaşlar. Eğer CBS (Coğrafi Bilgi Sistemleri) dünyasına yeni yeni adımlar atıyorsanız adını sık sık…
Herkese merhabalar. Bugün angular ekosisteminde NGXS kullanarak nasıl state management yapacağımızı inceleyeceğiz. Angular state management…
Herkese Merhaba. Bu yazımızda frontend camiasında faaliyet gösteren herkesin aklındaki o soruya bir açıklık getireceğiz.…
Uzun bir aradan sonra herkese merhaba :) Angular Template Driven Form Nedir, Ne işe yarar…
Hi everyone! Today, we'll dive even deeper into the angular and the content projection. We'll…
View Comments
after change ile next after change arasında nası bi fark ben tam anlamadım hocam ?
Merhaba Furkan, Kısaca şöyle özetleyebilirim. afterRender component her render olduğunda çalışırken, afterNextRender ise register ettikten sonra gerçekleşen ilk render işlemine mahsus olmak üzere sadece bir defaya mahsus olarak çalışıyor.