Hot Reload: sıcak yeniden yükleme ve geliştirmeyi nasıl hızlandırdığı

Yazar: IT Sectr Yayınlanma: 2026-07-03 Okuma süresi: 10 dk

Hot Reload, kaynak koddaki değişikliklerin sayfayı tamamen yeniden yüklemeden ve mevcut durumu kaybetmeden çalışan bir uygulamaya uygulanmasını sağlayan bir teknolojidir. Tüm sayfayı basitçe yenileyen Live Reload'ın aksine, sıcak yeniden yükleme yalnızca değiştirilen modülleri anında değiştirir. Webpack, 2024'e göre, Hot Module Replacement (HMR), bileşen durumunu koruyarak geliştirme döngüsü süresini %80'e kadar azaltır.

Kilit Noktalar

  • Hot Reload, uygulamayı yeniden yüklemeden veya durumu kaybetmeden kod değişikliklerini anında uygulama teknolojisidir.
  • Bileşen durumu sıcak yeniden yükleme sırasında korunur — form verileri, kaydırma konumu, açık modal pencereler.
  • HMR (Hot Module Replacement), Webpack, Vite ve diğer paketleyicilerde Hot Reload'ın uygulanmasıdır.
  • React Fast Refresh, React için resmi uygulamadır ve fonksiyonel bileşenleri ve hook'ları destekler.
  • Geliştirme verimliliği, kod değişikliği ile sonucu görme arasındaki süreyi azaltarak artar.

Hot Reload Nedir?

Hot Reload, kaynak dosyalardaki değişikliklerin uygulamayı yeniden başlatmadan çalışan bir uygulamaya anında yansıtıldığı bir geliştirme mekanizmasıdır. Geliştirici düzenleyicide kodu düzenler, dosyayı kaydeder ve sonuç tarayıcıda veya öykünücüde anında görünür.

Bu teknolojinin temel özelliği, uygulama durumunu korumaktır. Bellekteki değişkenler, formlardaki veriler, mevcut gezinme — her şey yerinde kalır. Geliştiricinin gerekli ekrana dönmek için bir dizi eylemi tekrarlaması gerekmez.

Web geliştirmede, Hot Reload Hot Module Replacement (HMR) mekanizması aracılığıyla uygulanır. Paketleyici dosya değişikliklerini izler, hangi modüllerin etkilendiğini belirler ve güncellenmiş kodu WebSocket aracılığıyla tarayıcıya gönderir. Tarayıcı, sayfayı yeniden yüklemeden yalnızca bu modülleri değiştirir.

Hot Reload'ın popülerliği, sayfanın tamamen yeniden yüklenmesinin istemci uygulamasının tüm durumunu yok ettiği tek sayfalık uygulamaların (SPA) yaygınlaşmasıyla arttı. React, Vue, Angular ve diğer çerçeveler, HMR'yi birincil geliştirme modu olarak önerir.

HMR Paketleyici İçinde Nasıl Çalışır

HMR mekanizması dört aşamadan oluşur. Sunucu tarafındaki paketleyici, değiştirilen modülü derler, kodun yeni sürümüyle bir JSON yaması oluşturur ve bunu bir WebSocket bağlantısı üzerinden tarayıcıya gönderir. Tarayıcı tarafındaki HMR çalışma zamanı yamayı alır, eski modülü yenisiyle değiştirir ve modülün abonelerini bildirir.

Derleme ve Gönderme Aşaması

Webpack Dev Server, istemciyle iletişim kurmak için WebSocket kullanır. Bir dosya değiştiğinde, paketleyici değişikliklerin bir bildirimiyle birlikte hot-update.js ve hot-update.json oluşturur. İstemci bu dosyaları JSONP aracılığıyla otomatik olarak yükler.

js
// webpack.config.js - HMR kurulumu
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  mode: 'development',
  devServer: {
    hot: true,
    liveReload: false
  },
  plugins: [new HtmlWebpackPlugin()]
};

Modülün İstemcide Uygulanması

Tarayıcıdaki HMR çalışma zamanı, değiştirilen modülün accept'i destekleyip desteklemediğini kontrol eder. Modül module.hot.accept() bildirdiyse, çalışma zamanı onu yerinde değiştirir ve güncelleme geri çağrısını çalıştırır. Accept bildirilmezse, HMR üst modül seviyesine geri döner.

React Fast Refresh'te bu mantık çerçeve düzeyinde yerleşiktir — her dosyada manuel olarak module.hot.accept yazmaya gerek yoktur. Babel eklentisi react-refresh/babel, durumu kaybetmeden bileşenleri güvenle değiştiren kod ekler.

Hot Reload, Live Reload ve Full Reload Arasındaki Fark

Bu üç terim sıklıkla karıştırılır, ancak davranışları kökten farklıdır. Live Reload herhangi bir değişiklikte tüm sayfayı yeniden yükler — tüm durum kaybolur. Full Reload, geliştirme sunucusu tamamen yeniden başlatıldığında meydana gelir ve yalnızca istemci değil, sunucu durumu da kaybolur.

TürSayfa Yeniden YüklemeDurum KorumaHız
Hot Reload (HMR)HayırEvetAnında
Live ReloadEvetHayır1-3 sn
Full ReloadEvetHayır3-10 sn

Hot ve Live arasındaki seçim, geliştirme hızını doğrudan etkiler. HMR ile “kodu düzenle → sonucu gör” döngüsü 50-200 ms sürer. Live Reload ile — 1-3 saniye artı bağlam geri yükleme süresi. Bir iş günü boyunca fark, onlarca dakikalık tasarruf edilen zamana denk gelir.

React Fast Refresh: React için Özellikler

React Fast Refresh, React bileşenleri için optimize edilmiş resmi Hot Reload uygulamasıdır. Kararsız olan ve manuel yapılandırma gerektiren eski React Hot Loader mekanizmasının yerini almıştır. Fast Refresh, react-refresh/babel aracılığıyla Create React App, Next.js, Vite ve Webpack'e yerleştirilmiştir.

Fonksiyonel Bileşen Desteği

Fast Refresh, kodları değiştiğinde fonksiyonel bileşenlerin durumunu doğru şekilde korur. Yalnızca JSX işaretlemesini değiştirirseniz, useState ve diğer hook'lar değerlerini korur. Hook mantığı değişirse, bileşen yeniden monte edilir.

js
// Örnek - JSX değiştiğinde durum korunur
import React, { useState } from 'react';

function Counter() {
  const [count, setCount] = useState(0);

  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={() => setCount(count + 1)}>+</button>
    </div>
  );
}

Güvenli Değiştirme Kuralları

Yeni kod bir derleme hatası içeriyorsa Fast Refresh durumu korumaz. Bileşen varsayılan olarak dışa aktarılmazsa (named export), durum da korunmayabilir. Bileşenler için default export kullanılması ve durum korumanın garanti edilmesi gerekiyorsa dışa aktarımların memo ile sarılması önerilir.

HMR Destekli Derleme Araçları

Modern paketleyiciler HMR sağlar. Webpack, devServer.hot aracılığıyla esnek yapılandırma ile HMR'nin öncüsüdür. Vite, paketleme olmadan anlık HMR için yerel ESM ve esbuild kullanır. Parcel, sıfır yapılandırmalı HMR sunar. Turbopack, Rust tabanlı HMR ile Vercel'in yeni paketleyicisidir.

AraçHMR TürüYapılandırmaEkosistem
Webpack 5WebSocket ile HMRdevServer.hot: trueReact, Vue, Angular
ViteYerel ESM HMRYerleşikReact, Vue, Svelte
Parcel 2Sıfır yapılandırma HMRGerekmezReact, Vue, TS
TurbopackArtımlı HMRYerleşikNext.js

Vite hızda öne çıkıyor — Vite'da HMR, tarayıcının yerel ES modülleri aracılığıyla çalışır. Bir dosya değiştiğinde, Vite tüm projeyi yeniden derlemeden yalnızca bu modülü import() aracılığıyla gönderir. Webpack her modülü tamamen derler, bu da büyük projelerde HMR'yi yavaşlatır.

Projelerde HMR Yapılandırma Örnekleri

Farklı paketleyiciler için HMR kurulumuna bakalım. Webpack'te devServer'da hot: true ayarlamak ve react-refresh/babel eklemek gerekir. Vite'da HMR, herhangi bir ön ayarla yerleşik olarak çalışır. Next.js'te Fast Refresh, turbo derleyici aracılığıyla varsayılan olarak etkindir.

React ile Vite

js
// vite.config.js
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

export default defineConfig({
  plugins: [react()],
  server: {
    hmr: {
      port: 3001
    }
  }
});

Fast Refresh ile Webpack 5

js
// webpack.config.js
const ReactRefreshWebpackPlugin =
  require('@pmmmwh/react-refresh-webpack-plugin');

module.exports = {
  mode: 'development',
  devServer: { hot: true },
  plugins: [new ReactRefreshWebpackPlugin()],
  module: {
    rules: [
      {
        test: /\.jsx?$/u,
        use: 'babel-loader'
      }
    ]
  }
};

Sıcak Yeniden Yüklemenin Sınırlamaları ve Sorunları

HMR tüm senaryolarda doğru çalışmaz. Dinamik sınıflara sahip CSS modülleri uygulanmayabilir. Global değişkenler ve singleton'lar (Redux deposu, yönlendirici) yeniden yüklemede sıfırlanabilir. Ağır kütüphaneler HMR'de bazen GC olmadan modül değişimi nedeniyle bellek sızıntılarına neden olabilir.

HMR sorunlarına çözüm, sıcak kodu yan etkileri olmayan saf bileşenlere ayırmaktır. Yan etkiler (WebSocket abonelikleri, zamanlayıcılar) useEffect'te temizlenmelidir. Redux için, durumu sessionStorage'da kaydeden bir persister önerilir. CSS Modules veya styled-components gibi CSS çözümleri, ek yapılandırma olmadan HMR ile doğru şekilde çalışır.

Başka bir sınırlama da üretimde hata ayıklamadır: HMR, üretim yapılarında kasıtlı olarak devre dışı bırakılır. Kaynak kod küçültülür ve üretimde sıcak değiştirme imkansızdır. Üretimde hataları ayıklamak için kaynak haritaları ve günlük kaydı kullanın, ancak HMR'yi değil.

Sıkça Sorulan Sorular

Hot Reload, Live Reload'dan nasıl farklıdır?

Hot Reload sayfayı yeniden yüklemeden yalnızca değiştirilen modülü değiştirir ve durumu korur. Live Reload tüm sayfayı yeniden yükler — durum kaybolur, uygulama başlangıç ekranından yeniden başlar.

React'te Hot Reload nasıl etkinleştirilir?

Create React App ve Vite kullanan projelerde HMR varsayılan olarak etkindir. Webpack'te devServer: { hot: true } ve @pmmmwh/react-refresh-webpack-plugin eklemek gerekir. Next.js'te Fast Refresh yapılandırma olmadan çalışır.

Hot Reload neden bileşen durumunu korumaz?

Nedeni, yeni kodda bir derleme hatası, default yerine named export, hook imzasında değişiklik veya doğrudan durum mutasyonudur. React Fast Refresh, bileşeni yalnızca doğru çalışma için gerektiğinde güvenli bir şekilde sıfırlar.

Hot Reload TypeScript ile çalışır mı?

Evet, tüm modern paketleyiciler TypeScript ile HMR'yi destekler. Vite, TS dönüştürme için esbuild kullanır. Webpack, @babel/preset-typescript ile ts-loader veya babel kullanır. Fast Refresh, tipli bileşenlerle doğru şekilde çalışır.

HMR değişiklikleri güncellemediğinde nasıl hata ayıklanır?

WebSocket bağlantı hataları için tarayıcı konsolunu kontrol edin. devServer.hot: true'un etkin olduğundan emin olun. Vite için HMR portunu kontrol edin. Sorun devam ederse, tam sayfa yenileme (F5) yapın ve paketleyici konsolunu kontrol edin.

Özet

  • Hot Reload, yeniden yükleme veya durum kaybı olmadan kodun sıcak değiştirilmesi teknolojisidir, modern SPA geliştirmenin temelidir.
  • HMR, WebSocket modül yamaları aracılığıyla uygulanır, tam yeniden derleme olmadan yalnızca değiştirilen dosyaları değiştirir.
  • React Fast Refresh, hook ve fonksiyonel bileşen desteğiyle React için resmi HMR uygulamasıdır.
  • Vite, Webpack ve Parcel yerleşik HMR sağlar; Vite, yerel ESM sayesinde hızda liderdir.
  • Hot Reload durumu yalnızca modül accept bildirirse veya Fast Refresh default export ile kullanılırsa korur.
  • Derleme hataları ve memo olmadan named export, sıcak değiştirme sırasında durumu sıfırlayabilir.
  • Redux ve global durum için, HMR sırasında verileri sessionStorage'da kaydeden bir persister önerilir.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun