Slide 1

Slide 1 text

ESER ÖZVATAF React Server Components devnot DEVELOPER SUMMIT 07/10/2023 &

Slide 2

Slide 2 text

Bugün Konuşacaklarımız I. React Server Components III. Next 13 II. Evrimleşen Mimari IV. Sıkça Sorulan Sorular React Server Components & V. Soru/Cevap

Slide 3

Slide 3 text

Eser Özvataf • • • • • • 1996 yılından bu yana yazılım geliştiriyor, sektörü takip ediyorum. Alaylı ve Okulluyum. Kariyerimde profesyonel anlamda 20. yılı geride bıraktım. Büyük mühendislik organizasyonlarında yöneticilik görevlerinde bulundum. Birçok açık kaynak ve JavaScript topluluğunda liderlik tecrübem oldu. Boş zamanlarımda açık kaynak projelere katkıda bulunuyorum. YouTube üzerinde yazılımla ilgili yayınlar yapıyorum. Head of Engineering @ Teknasyon eser.live x.com/eser github.com/eser

Slide 4

Slide 4 text

React Server Components

Slide 5

Slide 5 text

Yalnızca SPA değil, bir Multiple Page Application'da da sunucu iletişimini optimize eden, veri erişim ve veriye transferinde çözümler sunan React'ın yeni uygulama mimarisi. REACT SERVER COMPONENTS Çeşitli problemler vardı. Bundle size'lar, SSR yapmak ve hydration'un zorluğu, Waterfall effect, Asenkron işlemlerin yönetilemezliği, Veri saklamak, Client'ın render işleminin uzun sürmesi vb. Neden İhtiyaç Oldu? Tanım

Slide 6

Slide 6 text

REACT SERVER COMPONENTS Fark CSR RSC

Slide 7

Slide 7 text

Evrimleşen Mimari

Slide 8

Slide 8 text

EVRİMLEŞEN MİMARİ Web Web Site Site Web Site --> /> /> /> 2 2 items items 2 items Outputs Outputs HTML HTML Outputs HTML Web Web Developer Developer Web Developer a a Web Web Client Client a Web Client Basic Basic Animations, Animations, Events Events Basic Animations, Events Statik İçerik

Slide 9

Slide 9 text

2 2 items items 2 items Outputs Outputs HTML HTML Outputs HTML Outputs Outputs JSON/XML JSON/XML Outputs JSON/XML a a Mobile Mobile Client Client a Mobile Client [ [ { { ...item1 ...item1 }, }, { { ...item2 ...item2 } } ] ] [ { ...item1 }, { ...item2 } ] Web Web Site Site Web Site --> /> /> /> Web Web Developer Developer Web Developer a a Web Web Client Client a Web Client Basic Basic Animations, Animations, Events Events Basic Animations, Events Mobile Mobile Developer Developer Mobile Developer EVRİMLEŞEN MİMARİ Statik İçerik + API Servisleri

Slide 10

Slide 10 text

Web Web Site Site Web Site 2 2 items items 2 items [ [ { { ...item1 ...item1 }, }, { { ...item2 ...item2 } } ] ] [ { ...item1 }, { ...item2 } ] Outputs Outputs HTML HTML & & JSON/XML JSON/XML Outputs HTML & JSON/XML a a Web Web Client Client a Web Client a a Mobile Mobile Client Client a Mobile Client --> id="list-target"> /> /> /> DOM DOM Events, Events, State State Management, Management, Animations Animations DOM Events, State Management, Animations [ [ { { ...item1 ...item1 }, }, { { ...item2 ...item2 } } ] ] [ { ...item1 }, { ...item2 } ] Backend Backend Developer Developer Backend Developer Frontend Frontend Developer Developer Frontend Developer Mobile Mobile Developer Developer Mobile Developer EVRİMLEŞEN MİMARİ API'lar ile Beslenen İçerik (AJAX) + Asenkron JavaScript istekleri sayesinde sayfalarda hızlanma sağlandı - Arama motorları Asenkron JavaScript ile iyi geçinemiyordu

Slide 11

Slide 11 text

EVRİMLEŞEN MİMARİ Web Web Site Site Web Site 2 2 items items 2 items [ [ { { ...item1 ...item1 }, }, { { ...item2 ...item2 } } ] ] [ { ...item1 }, { ...item2 } ] Outputs Outputs JSON/XML JSON/XML Outputs JSON/XML a a Web Web Client Client a Web Client a a Mobile Mobile Client Client a Mobile Client
/> />
Router, Router, Data Data Fetching, Fetching, DOM DOM Events, Events, State State Management Management Router, Data Fetching, DOM Events, State Management [ [ { { ...item1 ...item1 }, }, { { ...item2 ...item2 } } ] ] [ { ...item1 }, { ...item2 } ] Backend Backend Developer Developer Backend Developer Frontend Frontend Developer Developer Frontend Developer Mobile Mobile Developer Developer Mobile Developer Platform Platform Developer Developer Platform Developer Frontend & Cloud Development + Router'ın client'a alınması ile sunucudan gelen tekrar eden veriler azaltıldı, caching verimi arttırıldı + Client'da sayfa geçişleri kullanıcı deneyimi açısından hızlandırıldı ve iyileştirildi - Client'a aktarılan dosya boyutlarında artış oldu

Slide 12

Slide 12 text

EVRİMLEŞEN MİMARİ Server Side Rendering + Sunucunun da sayfaların ilk halini oluşturması nedeniyle SEO dezavantajları azaltıldı + Artan internet bant hızlarıyla, sayfaların ilk hallerinin iletilmesi kullanıcının yükleme deneyimini iyileştirdi Web Web Site Site Web Site 2 2 items items 2 items Outputs Outputs JSON/XML JSON/XML Outputs JSON/XML a a Web Web Client Client a Web Client Other Other Clients... Clients... Other Clients... -->
id="dom-target"> /> />
/>
Router, Router, Data Data Fetching, Fetching, DOM DOM Events, Events, State State Management, Management, Hydration Hydration Router, Data Fetching, DOM Events, State Management, Hydration [ [ { { ...item1 ...item1 }, }, { { ...item2 ...item2 } } ] ] [ { ...item1 }, { ...item2 } ] Backend Backend Developer Developer Backend Developer Frontend Frontend Developer Developer Frontend Developer Mobile Mobile Developer Developer Mobile Developer Platform Platform Developer Developer Platform Developer

Slide 13

Slide 13 text

Web Web Site Site Web Site 2 2 items items 2 items Outputs Outputs JSON/XML JSON/XML Outputs JSON/XML a a Web Web Client Client a Web Client Other Other Clients... Clients... Other Clients... -->
/> />
/>
Router, Router, Data Data Fetching, Fetching, DOM DOM Events, Events, State State Management, Management, Hydration, Hydration, Partial Partial Hydration Hydration Router, Data Fetching, DOM Events, State Management, Hydration, Partial Hydration Backend Backend Developer Developer Backend Developer Frontend Frontend Developer Developer Frontend Developer Mobile Mobile Developer Developer Mobile Developer Platform Platform Developer Developer Platform Developer EVRİMLEŞEN MİMARİ Islands Architecture + React'ın sunucu tarafına geçmesiyle yalnızca o an yüklenmesi gereken veri streaming olarak client'a hızlıca aktarılıyor

Slide 14

Slide 14 text

React Uygulaması Server Client DB API React CSR Client Bundle HTML EVRİMLEŞEN MİMARİ

Slide 15

Slide 15 text

React Uygulaması w/ SSR Server Client DB API Client Bundle React CSR React SSR HTML Server Bundle HYDRATION EVRİMLEŞEN MİMARİ

Slide 16

Slide 16 text

React Uygulaması w/ RSC Server Client DB API React CSR RSC HTML Server Bundle STREAMING CHANNEL EVRİMLEŞEN MİMARİ

Slide 17

Slide 17 text

Örnek EVRİMLEŞEN MİMARİ

Slide 18

Slide 18 text

EVRİMLEŞEN MİMARİ

Slide 19

Slide 19 text

Yeni Kurallar Isomorphism Context, useEffect, "use client" Context ve useEffect benzeri DOM ile ilişkili life-cycle hooklar sunucu taraflı çalışmıyor. Bu durumlarda "use client" kullanılması gerekiyor. Cache, Preload, ServerOnly Sunucu ve Client farklı runtime'lar ve JavaScript Engine'lara sahip olabilir. Bu da Web API'lar için de dahil ol​ mak üzere tutarsızlık oluşturabilir. Client taraflı memoization kavramı yerine sunucu taraflı cache kavramı hayatımıza giriyor. Bilhassa fetch requestlerini, db isteklerini deduplike etmek için cache kullanmak durumunda kalıyoruz. 1 2 3 EVRİMLEŞEN MİMARİ

Slide 20

Slide 20 text

Next 13

Slide 21

Slide 21 text

React aslında bir çözüm, React ekibi de "birleştirilebilir" (composable) kullanıcı arabirimleri nasıl en verimli yoldan oluşturabileceğimize kafa yoruyor. İşin mühendislik yükünü React ekibi üstlenirken, Next de bu çözümleri bizi rahat ettirecek şekilde derli toplu paketleyerek bir developer-experience sunuyor. Ne katıyor? NEXT 13

Slide 22

Slide 22 text

Getirileri App Router: Nested Routes & Layouts React Server Components Simplified Data Fetching (async/await for Components)​ Built-in SEO Support w/ Metadata API Streaming & + Loading Offscreen Rendering + Transitions NEXT 13

Slide 23

Slide 23 text

NEXT 13 Next 13 itibariyle File Based Router yapısı güncellenerek, "App Router" ismi verdiğimiz bir yapıya geçiş yapıldı. Bu sayede nested routing, yüklenme, hata yönetimi vb. özelliklerini geliştirdiler. Yine bu sayede iç içe birden fazla layout'u kullanabiliyoruz. Nested Routes & Layouts

Slide 24

Slide 24 text

Next aynı zamanda iyi bir paketleme deneyimi sunuyor. React projelerine koymuş olduğumuz assetlerin çoğunu uygun şekilde sıkıştırıp yüklenme deneyimini kendisi yönetiyor, bu da Lighthouse skorlarını etkiliyor. ve Lighthouse NEXT 13 Yine Next 13 ile birlikte gelen Metadata API sayesinde her sayfa bileşeninin SEO metadataları çok daha rahat tanımlanabiliyor. Built-in SEO Support w/ Metadata API

Slide 25

Slide 25 text

Örnek Uygulama NEXT 13 https://github.com/eser Kaynak Kod:

Slide 26

Slide 26 text

Sıkça Sorulan Sorular…

Slide 27

Slide 27 text

Express'le SSR'a Halen Gerek Var Mı? SIKÇA SORULAN SORULAR Full-Stack Uygulamalar İçin Uygun Mu? BFF'in Yerini Mi Alacak? ASP/PHP Günlerine Geri Mi Döndük?

Slide 28

Slide 28 text

Teşekkürler eser.live x.com/eser github.com/eser