Hot Reload: qaynar yenidən yükləmə və tərtibatı necə sürətləndirir

Müəllif: IT Sectr Dərc olunub: 2026-07-03 Oxuma vaxtı: 10 dəq

Hot Reload — mənbə kodundakı dəyişikliklərin səhifəni tam yenidən yükləmədən və cari vəziyyəti itirmədən işləyən tətbiqata tətbiq edildiyi texnologiyadır. Sadəcə səhifəni tamamilə yeniləyən Live Reload-dan fərqli olaraq, qaynar yenidən yükləmə yalnız dəyişdirilmiş modulları aninda əvəz edir. Webpack, 2024-mə görə, Hot Module Replacement (HMR) komponentlərin vəziyyətini qorumaqla tərtibat dövri müddətini 80%-ə qədər azaldır.

Başlıca

  • Hot Reload — tətbiqatı yenidən yükləmədən və vəziyyəti itirmədən kod dəyişikliklərinin ani tətbiqi texnologiyası.
  • Vəziyyət komponentin qaynar yenidən yükləmə zamanı qorunur — formaların məlumatları, sürüşdürmə, açıq modal pəncərələr.
  • HMR (Hot Module Replacement) — Webpack, Vite və digər paketləyicilərdə Hot Reload-un tətbiqi.
  • React Fast Refresh — funksional komponentləri və hook-ları dəstəkləyən React üçün rəsmi tətbiq.
  • Məhsuldarlıq kodun dəyişdirilməsi ilə nəticənin görünməsi arasındakı vaxtın azaldılması hesabına artır.

Hot Reload nədir?

Hot Reload — mənbə fayllarındakı dəyişikliklərin tətbiqatı yenidən başlatmadan dərhal işləyən tətbiqatda əks olunduğu tərtibat mexanizmidir. Tərtibatçı redaktorda kodu redaktə edir, faylı yadda saxlayır və nəticə dərhal brauzerdə və ya emulyatorda görünür.

Texnologiyanın əsas xüsusiyyəti tətbiqatın vəziyyətinin qorunmasıdır. Yaddaşdakı dəyişənlər, formalardakı məlumatlar, cari naviqasiya — hər şey yerində qalır. Tərtibatçı lazımi ekrana qayıtmaq üçün hərəkətlər ardıcıllığını təkrarlamalı deyil.

Veb tərtibatda Hot Reload Hot Module Replacement (HMR) mexanizmi vasitəsilə həyata keçirilir. Paketləyici fayl dəyişikliklərini izləyir, hansı modulların təsirləndiyini müyən edir və yenilənmiş kodu WebSocket vasitəsilə brauzerə göndərir. Brauzer səhifəni yenidən yükləmədən yalnız bu modulları əvəz edir.

Hot Reload-un populyarlığı tək səhifəli tətbiqatların (SPA) yayılması ilə artdı, burada səhifənin tam yenidən yüklənməsi müştəri tətbiqatının bütün vəziyyətini məhv edir. React, Vue, Angular və digər freymvorklar HMR-i əsas tərtibat rejimi kimi tövsiyə edir.

HMR paketləyici daxilində necə işləyir

HMR mexanizmi dörd mərhələdən ibarətdir. Server tərəfində paketləyici dəyişdirilmiş modulu kompilyasiya edir, kodun yeni versiyası ilə JSON yaması yaradır və onu WebSocket əlaqəsi vasitəsilə brauzerə göndərir. Brauzer hissəsində HMR runtime yamanı qəbul edir, köhnə modulu yenisi ilə əvəz edir və modul abunəçilərinə məlumat verir.

Kompilyasiya və göndərmə mərhələsi

Webpack Dev Server müştəri ilə əlaqə üçün WebSocket-dən istifadə edir. Fayl dəyişdirildikdə, paketləyici dəyişiklik manifesti ilə hot-update.jshot-update.json yaradır. Müştəri bu faylları JSONP vasitəsilə avtomatik yükləyir.

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

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

Modulun müştəri tərəfində tətbiqi

Brauzerdə HMR runtime əvəz edilən modulun accept-i dəstəkləyib-dəstəkləmədiyini yoxlayır. Modul module.hot.accept() elan edibsə, runtime onu yerində əvəz edir və yeniləmə callback-i işə salır. Accept elan edilməyibsə, HMR yuxarı səviyyəyə, ana modula keçir.

React Fast Refresh-də bu məntiq freymvork səviyyəsində qurulub — hər faylda əl ilə module.hot.accept yazmağa ehtiyac yoxdur. Babel-plugin react-refresh/babel vəziyyəti itirmədən komponentləri təhlükəsiz əvəz edən kod əlavə edir.

Hot Reload-un Live Reload və Full Reload-dan fərqi

Bu üç termin tez-tez qarışdırılır, lakin onlar davranış baxımından köklü şəkildə fərqlənir. Live Reload hər dəyişiklikdə bütün səhifəni tamamilə yenidən yükləyir — bütün vəziyyət itirilir. Full Reload yalnız müştəri vəziyyətini deyil, həm də server vəziyyətini itirərək tərtibat serverinin tam yenidən işə salınması ilə baş verir.

NövSəhifənin yenidən yüklənməsiVəziyyətin qorunmasıSürət
Hot Reload (HMR)XeyrBəliAni
Live ReloadBəliXeyr1-3 san
Full ReloadBəliXeyr3-10 san

Hot və Live arasında seçim birbaşa tərtibat sürətinə təsir edir. HMR-də „kodu dəyişdim → nəticəni gördüm” dövri 50-200 ms çəkir. Live Reload-da — 1-3 saniyə üstəlik konteksti bərpa etmə vaxtı. İş günü ərzində fərq onlarla dəqiqə qənaət edilmiş vaxt təşkil edir.

React Fast Refresh: React üçün xüsusiyyətlər

React Fast Refresh — React komponentləri üçün optimallaşdırılmış rəsmi Hot Reload tətbiqidir. O, qeyri-sabit olan və əl ilə konfiqurasiya tələb edən köhnə React Hot Loader mexanizmini əvəz etdi. Fast Refresh react-refresh/babel vasitəsilə Create React App, Next.js, Vite və Webpack-ə daxil edilmişdir.

Funksional komponentlərin dəstəyi

Fast Refresh kod dəyişdirilərkən funksional komponentlərin vəziyyətini düzgün şəkildə qoruyur. Yalnız JSX işarələrini dəyişdirirsinizsə — useState və digər hook-lar öz dəyərlərini qoruyur. Hook-un məntiqi dəyişirsə — komponentin yenidən qoşulması baş verir.

js
// Nümunə - JSX dəyişdikdə vəziyyət qorunur
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>
  );
}

Təhlükəsiz əvəzetmə qaydaları

Yeni kodda kompilyasiya xətası varsa, Fast Refresh vəziyyəti qorumur. Komponent default əvəzinə adlı ixrac edilirsə (named export), vəziyyət də qorunmaya bilər. Komponentlər üçün default export-dan istifadə etmək və vəziyyətin qorunmasını təmin etmək lazımdırsa, ixracatları memo ilə bükmək tövsiyə olunur.

HMR dəstəyi ilə qurma alətləri

Müasir paketləyicilər HMR təmin edir. Webpack — devServer.hot vasitəsilə çevik konfiqurasiya ilə HMR-in pioneri. Vite paketləmədən ani HMR üçün yerli ESM və esbuild-dən istifadə edir. Parcel — sıfır konfiqurasiya HMR. Turbopack — Rust üzərində HMR ilə Vercel-dən yeni paketləyici.

AlətHMR növüKonfiqurasiyaEkosistem
Webpack 5WebSocket vasitəsilə HMRdevServer.hot: trueReact, Vue, Angular
ViteNative ESM HMRQutudan çıxırReact, Vue, Svelte
Parcel 2Zero-config HMRTələb olunmurReact, Vue, TS
TurbopackIncremental HMRQutudan çıxırNext.js

Vite sürəti ilə seçilir — Vite-də HMR brauzerin yerli ES-modulları vasitəsilə işləyir. Fayl dəyişdirildikdə, Vite bütün layihəni yenidən kompilyasiya etmədən yalnız bu modulu import() vasitəsilə göndərir. Webpack hər modulu tam kompilyasiya edir, bu da böyük layihələrdə HMR-i yavaşladır.

Layihələrdə HMR konfiqurasiya nümunələri

Müxtəlif paketləyicilər üçün HMR qurulumunu nəzərdən keçirək. Webpack-də devServer-də hot: true təyin etməli və react-refresh/babel əlavə etməlisiniz. Vite-də HMR istənilən pre-set ilə qutudan çıxır. Next.js-də Fast Refresh turbokompilyator vasitəsilə defolt olaraq aktivdir.

Vite ilə React

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

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

Webpack 5 ilə Fast Refresh

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'
      }
    ]
  }
};

Qaynar yenidən yükləmənin məhdudiyyətləri və problemləri

HMR bütün ssenarilərdə düzgün işləmir. CSS modulları dinamik siniflərlə tətbiq olunmaya bilər. Qlobal dəyişənlər və sinqletonlar (Redux store, router) yenidən yükləmə zamanı sıfırlana bilər. Ağır kitabxanalar HMR zamanı GC olmadan modulların dəyişdirilməsi səbəbindən bəzən yaddaş sızıntıları yaradır.

HMR problemlərinin həlli — qaynar kodu yan təsirləri olmayan təmiz komponentlərdə təcrid etməkdir. Yan təsirlər (WebSocket abunəlikləri, taymerlər) useEffect-də təmizlənməlidir. Redux üçün sessionStorage-də vəziyyəti saxlayan persister tövsiyə olunur. CSS Modules və ya styled-components kimi CSS həlləri əlavə konfiqurasiya olmadan HMR ilə düzgün işləyir.

Digər bir məhdudiyyət — istehsalatda debug: HMR istehsalat quruluşunda qəsdən söndürülür. Mənbə kodu minifikasiya olunur və istehsalatda qaynar dəyişdirmə mümkün deyil. İstehsalatda xətalarn debug edilməsi üçün source maps və loglaşdırmadan istifadə olunur, lakin HMR-dən yox.

Tez-tez verilən suallar

Hot Reload Live Reload-dan nə ilə fərqlənir?

Hot Reload səhifəni yenidən yükləmədən yalnız dəyişdirilmiş modulu əvəz edir və vəziyyəti qoruyur. Live Reload bütün səhifəni tamamilə yenidən yükləyir — vəziyyət itirilir, tətbiqat ilkin ekrandan yenidən başlayır.

React-də Hot Reload-u necə aktivləşdirmək olar?

Create React AppVite layihələrində HMR defolt olaraq aktivdir. Webpack-də devServer: { hot: true } və @pmmmwh/react-refresh-webpack-plugin əlavə etməlisiniz. Next.js-də Fast Refresh konfiqurasiya olmadan işləyir.

Niyə Hot Reload komponentin vəziyyətini qorumur?

Səbəb — yeni kodda kompilyasiya xətası, default əvəzinə named export, hook imzasının dəyişdirilməsi və ya birbaşa vəziyyət mutasiyasıdır. React Fast Refresh komponenti yalnız düzgün işləmə üçün zəruri olduqda təhlükəsiz şəkildə sıfırlayır.

Hot Reload TypeScript ilə işləyir?

Bəli, bütün müasir paketləyicilər TypeScript ilə HMR-i dəstəkləyir. Vite TS transpirasiyası üçün esbuild-dən istifadə edir. Webpack — ts-loader və ya @babel/preset-typescript ilə babel. Fast Refresh tipli komponentlərlə düzgün işləyir.

HMR dəyişiklikləri yeniləmədikdə problemi necə həll etmək olar?

WebSocket əlaqə xətaları üçün brauzer konsolunu yoxlayın. devServer.hot: true-in aktiv olduğuna əmin olun. Vite üçün HMR portunu yoxlayın. Problem həll olunmazsa — səhifəni tam yenidən yükləyin (F5) və paketləyici konsolunu yoxlayın.

Nəticə

  • Hot Reload — yenidən yükləmə və vəziyyət itkisi olmadan kodun qaynar dəyişdirilməsi texnologiyası, müasir SPA tərtibatının əsası.
  • HMR modulların WebSocket yamaları vasitəsilə həyata keçirilir, tam yenidən kompilyasiya olmadan yalnız dəyişdirilmiş faylları əvəz edir.
  • React Fast Refresh — hook-ları və funksional komponentləri dəstəkləyən React üçün rəsmi HMR tətbiqi.
  • Vite, Webpack və Parcel qutudan HMR təmin edir; Vite yerli ESM sayəsində sürətdə liderdir.
  • Hot Reload vəziyyəti yalnız modul accept elan edərsə və ya default export ilə Fast Refresh istifadə olunarsa qoruyur.
  • Kompilyasiya xətaları və memo olmadan named export qaynar dəyişdirmə zamanı vəziyyəti sıfırlaya bilər.
  • Redux və qlobal vəziyyətlər üçün HMR zamanı məlumatları sessionStorage-də saxlayan persister tövsiyə olunur.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun