React projelerinde performansı arttırmak için optimize edilmesi gereken componentler bulunmaktadır Componentlerin optimize edilmesi, uygulamanın daha az kaynak tüketmesi ve performansının artırılması için oldukça önemlidir Reactmemo kullanımı, componentlerin gereksiz güncellenmesini engelleyerek performansı artırırken, shouldComponentUpdate yöntemi ise componentin güncellenmesi gerekip gerekmediğini belirleyerek gereksiz render işlemlerini önler PureComponent sınıfı da componentlerin state ve props'larının sık sık değişmediği durumlarda optimized olarak işaretlenmesini sağlar Reactlazy ve Suspense yöntemi, yüksek boyutlu componentlerin geciktirilerek yalnızca ihtiyaç duyulduğunda yüklenerek performansın artırılmasını sağlar useMemo ve useCallback kullanımı ise gereksiz render işlemlerini minimize etmeye yardımcı olur Son olarak, tekrar eden işlemlerin minimize edilmesi için, componentler arasında paylaşılabilen ve uyarlanabilir React Hooks'ların oluşturul
React projelerinde verimli kodlama yapmak, kullanıcının deneyimini iyileştirmek için oldukça önemlidir. Bu optimizasyonlar, özellikle büyük projelerde fark yaratabilir. React component'lerinin optimize edilmesi, performansı artırır ve uygulamanın daha az kaynak tüketmesini sağlar. Bu nedenle, React component'lerinin optimize edilmesi, birçok farklı stratejiden oluşur.
Bunun ilk adımı, React.memo() kullanımıdır. Bu özellik, component'lerin güncellenmesi sırasında daha az bilgi işlenmesini sağlayarak performansın artmasını sağlar. Ayrıca, shouldComponentUpdate() yöntemi kullanılarak, component'lerin güncelleme gerekip gerekmediği belirlenir.
Bir diğer yöntem ise, component'in state ve props'larının sık sık değişmediği durumlarda, React.PureComponent kullanarak optimized olarak işaretlenmesidir.
React.lazy() ve Suspense yöntemi, yüksek boyutlu component'lerin geciktirilerek yalnızca ihtiyaç duyulduğunda yüklenerek performansın artırılmasını sağlar. Bunun yanı sıra, gereksiz render işlemlerini minimize etmek için useMemo ve useCallback kullanılır. Bu yöntem, render sırasında önbelleğe alınan output'ların kullanılmasını sağlar.
Son olarak, tekrar eden işlemlerin minimize edilmesi için, componentler arasında paylaşılabilen ve uyarlanabilir React Hooks'ların oluşturulması, kodun daha az tekrar edilmesini ve daha da optimize edilmesini sağlar.
React.memo()
React.memo(), React componentlerinin güncellenme durumunu kontrol ederek performansı artıran bir optimizasyon yöntemidir. Bu yöntem ile componentlerin sadece gerekli durumlarda güncellenmesi sağlanarak, gereksiz render işlemlerinden kaçınılır.
React.memo() metodunun kullanımı oldukça basittir, sadece komponenti React.memo() fonksiyonuna sararak kullanabilirsiniz. Örneğin;
Normal Component | Optimized Component |
---|---|
class NormalComponent extends React.Component { render() { return | const OptimizedComponent = React.memo((props) => { return |
Bu şekilde React.memo() kullanarak componentin props'ları değişmediği sürece yeniden render edilmesi engellenmiş olur. Bu yöntem özellikle, sayfa içerisinde birden fazla kez kullanılan componentlerde performansı artırmak için sıklıkla kullanılır.
React.memo() sayesinde componentlerin güncellenme durumları hakkında daha az bilgi işlenerek performans artırılır. Bu sayede, uygulama içerisindeki componentlerin verimliliği artırılabilir.
shouldComponentUpdate()
React componentleri optimize etmek için bir diğer yöntem ise shouldComponentUpdate() kullanmaktır. Bu yöntem sayesinde componentin güncellenmesi gerekip gerekmediği belirlenir. Normalde React, herhangi bir state veya props değişikliği olduğunda, componenti günceller ve render işlemini yeniler. Ancak, bazı durumlarda componentin yenilenmesi gerekmeyebilir, bu da gereksiz render işlemlerine neden olabilir ve performansı düşürebilir. shouldComponentUpdate() sayesinde, componentin güncellenmesi gerekip gerekmediği belirlendiğinde, render işlemi otomatik olarak durdurulur. Bu da, gereksiz işlemlerin önlenmesine ve performansın artırılmasına yardımcı olur.
Kullanımı oldukça basittir. shouldComponentUpdate() metodunu component içinde kullanmanız gerekmektedir. Bu metodda, eski props ve yeni props karşılaştırılır. Eğer değişiklik yoksa, false değeri döndürülür ve component yenilenmez. Eğer değişiklik varsa, true değeri döndürülür ve component yenilenir.
Aşağıdaki örnek kod parçasında, bir componentin shouldComponentUpdate() kullanarak optimize edilmesi görülmektedir:
```class App extends React.Component { constructor(props) { super(props); this.state = { count: 0 }; } shouldComponentUpdate(nextProps, nextState) { if (this.state.count === nextState.count) { return false; } return true; } render() { return (
Yukarıdaki örnekte, shouldComponentUpdate() metodu kullanılarak, count state'i değişmediği sürece componentin güncellenmesi engellenmiştir. Bu sayede, gereksiz render işlemleri önlenebilir ve performans artırılabilir.
shouldComponentUpdate() metodu dışında, React.PureComponent sınıfı da componentleri optimize etmek için kullanılabilir. PureComponent, componentlerdeki state ve props'ların sık sık değişmediği durumlarda, optimized olarak işaretlenmesini sağlar. Bu sayede, shouldComponentUpdate() metodunu kullanmaktan daha az kod yazarak, componentlerin optimize edilmesi sağlanabilir.
PureComponent
React projelerinde performansın artırılması ve componentlerin optimize edilmesi için birçok yöntem mevcuttur. Bunlardan biri de React.PureComponent kullanımıdır. React.PureComponent sınıfı, shouldComponentUpdate metodunu otomatik olarak işaretler ve bu sayede componentin state ya da props'ları sık sık değişmiyorsa optimized olarak işaretlenmesi sağlanır. Bu da gereksiz render işlemlerinin önüne geçerek componentlerin daha hızlı ve verimli çalışmasına olanak sağlar.
React.PureComponent da React.Component sınıfıyla aynı şekilde kullanılır ancak shouldComponentUpdate metodunu yazmaya gerek kalmaz. shouldComponentUpdate metodu, componentin her güncellendiğinde çalıştırılan bir metoddur ve bu metoda verilen parametreler sayesinde componentin güncellenmesi gerekip gerekmediği belirlenir. React.PureComponent sınıfı ise props ya da state değişikliği olmadığında shouldComponentUpdate metodunu otomatik olarak devre dışı bırakır ve bu sayede gereksiz render işlemlerinin önüne geçer.
React.PureComponent | React.Component |
---|---|
Otomatik olarak shouldComponentUpdate metodunu optimize eder | Manuel olarak shouldComponentUpdate metodunu yazmak gerekir |
State ya da props değişmediği sürece render işlemi gerçekleştirmez | Her güncelleme sonrası shouldComponentUpdate metodunu kontrol eder |
React.PureComponent kullanımı sadece state ve props'ları sık sık değişmeyen componentler için yapılmalıdır. Bu sayede gereksiz render işlemleri engellenerek componentlerin daha performanslı hale gelmesi sağlanır.
React.lazy() ve Suspense
React projelerinde performansı artırmak ve daha verimli kodlama yapabilmek için birtakım optimizasyon teknikleri kullanılabilir. Bu tekniklerden biri React.lazy() ve Suspense kullanarak yüksek boyutlu componentleri geciktirmek ve sadece ihtiyaç duyulduğunda yüklemektir. Bu sayede gereksiz yere yüksek boyutlu bir componentin yüklenmesinin önüne geçilir ve performans artar.
React.lazy() ile yüksek boyutlu componentler dynamic import kullanılarak geciktirilerek sadece ihtiyaç duyulduğunda yüklenirler. Bu sayede ana uygulamanın performansı düşmez ve yüksek boyutlu componentler sadece kullanıcı ihtiyacı doğrultusunda yüklenir.
Suspense ise yüksek boyutlu componentlerin yüklenme sırasındaki bekleme süresini minimuma indirgemek için kullanılabilir. Yüksek boyutlu bir component yüklenene kadar beklemek yerine, Suspense ile birlikte kullanıldığında yüklenme sırasında bir loading bileşeni gösterilebilir. Bu sayede kullanıcı, beklemek yerine uygulamayı kullanmaya devam eder ve performans artar.
React.lazy() ve Suspense kullanarak yüksek boyutlu componentleri geciktirerek ve yalnızca ihtiyaç duyulduğunda yükleyerek, React uygulamasının performansını artırabilirsiniz. Bu tekniklerin kullanımı ile kullanıcılara daha iyi bir kullanıcı deneyimi sunulabilir ve React projelerinizin performansı artırılabilir.
useMemo ve useCallback
React uygulamalarında componentlerin render edilmesi belirli durumlarda gereksiz render işlemlerine neden olabilir ve bu da performans kaybına yol açabilir. Bu gereksiz render işlemlerini azaltmak için React'ta useMemo() ve useCallback() kullanılabilir.
useMemo() ile componentin önbelleklenen output'unun önbellekte saklanması sağlanır ve aynı girdilerle birden fazla kez hesaplanmaz. Böylece componentin düzenlenmesi gerektiğinde, sadece girdileri değiştirdiğinde yeniden hesaplanır.
Örneğin, bir component içinde hesaplanan bir sayının güncelleme işlemi için birden fazla fonksiyon çağrısının yapılması gerektiğinde useMemo() kullanılabilir. useMemo() kullanarak, hesaplamalı bir componentin önbelleğe alınan sonucu component'in state veya props'ları değişmediği sürece aynı kalır. Eğer state veya props güncellenirse, hesaplama da güncellenir.
Benzer şekilde, useCallback() kullanarak, sadece gerekli durumlarda yeniden hesaplama yapılabilir. useCallback() ile componentin tekrar oluşturulmasını önleyerek gereksiz render işlemleri azaltılabilir.
useMemo() ve useCallback() kullanarak, React uygulamalarında verimlilik artırılabilir ve performans kaybı önlenebilir.
Özelleştirilmiş Hooks'lar Oluşturma
React'ta Hooks'lar özellikle fonksiyonel componentlerin yönetimi için kullanılır. Hooks'ların en önemli özelliği kod tekrarını minimize edebilmesidir. Özelleştirilmiş Hooks'ların oluşturulması da aynı şekilde kod tekrarını minimuma indirgemiş olur.
Kod tekrarını minimize etmekle birlikte özelleştirilmiş Hooks'lar, componentler arasında paylaşılabileceği gibi performans arttırıcı bir etkiye sahip olabilir. Örneğin, bir componentteki işlem bir başka componentte de tekrar ediliyorsa, aynı kodun farklı componentlerde kullanılması yerine, bir Hook oluşturularak tüm componentler içinde kullanılabilir.
Özelleştirilmiş Hooks'lar ile en çok karşılaşılan senaryo, API'lerle çalışırken tekrar eden işlemlerin minimize edilmesidir. Örneğin, bir API çağrısı yapıldığında, gelen verinin işlenerek componentte gösterilmesi gerektiğinde özelleştirilmiş Hooks kullanılması daha performanslıdır.
Bir diğer senaryo ise, componentlerdeki state yönetimidir. Eğer proje içinde birden fazla component kullanıyorsak, aynı state için sürekli olarak aynı kodları yazmak yerine, özelleştirilmiş Hooks ile state yönetimini tek bir yerden yapabilir ve state değiştirme işlemlerini minimize edebiliriz.