Mobil inkişafda Runtime, Hot Reload və qurulma: bunlar nədir, əsas anlayışlar və necə işləyir

Müəllif: IT Sectr Dərc olunub: 2026-05-13 Oxuma vaxtı: 11 dəq

iOS Runtime, Method Swizzling, Hot Reload, Tree Shaking, Webpack — bu terminlərin arxasında tətbiqin cihazda necə işlədiyini, necə qurulduğunu və optimallaşdırıldığını müəyyən edən əsas mexanizmlər dayanır. JetBrains Developer Ecosystem 2025-ə görə, tərtibatçıların 78% hər gün qurulma alətlərindən (Webpack, Metro, Vite) istifadə edir. Runtime, Reflection, qurulma alətləri və kod optimallaşdırmalarını nəzərdən keçirək.

Əsas məqamlar

  • iOS Runtime — tətbiq işləyərkən siniflərin davranışını dəyişməyə imkan verən dinamik Objective-C icra mühiti (Method Swizzling, Reflection).
  • Transpilation — kodun bir dildən digərinə çevrilməsi (TypeScript → JavaScript). Polyfill — köhnə brauzerlərə çatışmayan imkanların əlavə edilməsi.
  • Bundler (Webpack, Metro) — modulları bir faylda birləşdirən qurulma aləti. Tree Shaking — istifadə olunmayan kodun silinməsi.
  • Minification — kod sıxışdırma (boşluqları silmə, dəyişənlərin adını dəyişmə). Obfuscation — tərs mühəndislikdən qorumaq üçün kodun qarışdırılması.
  • Hot Reload — tətbiqi yenidən başlatmadan kod yeniləmə. Hot Restart — sessiya vəziyyətini qoruyaraq yenidən başlatma.

Runtime və Reflection: iOS Runtime, Method Swizzling və dinamik göndərmə

Runtime (icra mühiti) tətbiqin icrasını idarə edən proqram təminatıdır. iOS Runtime kontekstində, bu, obyektlərə mesaj göndərməyə, dərhal siniflər yaratmağa və icra zamanı metodları əvəz etməyə imkan verən Objective-C-nin dinamik sistemidir. Bu mümkündür, çünki Objective-C C üzərində qurulmuş dinamik tipli bir dildir.

Reflection proqramın öz strukturunu icra zamanı yoxlamaq və dəyişdirmək qabiliyyətidir. iOS Runtime-da bu, class_getInstanceMethod, method_exchangeImplementations və objc_getAssociatedObject kimi funksiyalar vasitəsilə həyata keçirilir. Kotlin/Java-da refleksiya KClass / java.lang.reflect istifadə edir.

IT Sectr-də, biz Runtime çox nadir hallarda istifadə edirik — yalnız alternativi olmayan xüsusi tapşırıqlar üçün. Məsələn, mərkəzləşdirilmiş analitika qeydiyyatı və ya kitabxanalardakı səhvləri düzəltmək üçün Method Swizzling. Bununla belə, Runtime dərin anlayış və ehtiyat tələb edən güclü bir alətdir.

Method Swizzling

Method Swizzling icra zamanı Objective-C metodunun tətbiqini başqası ilə əvəz etmə texnikasıdır. Bu, iOS üçün Aspekt Yönümlü Proqramlaşdırmanın (AOP) xüsusi bir halıdır. Swizzling mövcud metodların mənbə kodunu dəyişmədən onlara qeydiyyat, analitika və ya keşləmə əlavə etməyə imkan verir.

Tipik bir nümunə: avtomatik ekran qeydiyyatı əlavə etmək üçün UIViewController-da viewWillAppear:-ı əvəz etmək. Vacib: swizzling +load və ya +initialize metodunda yerinə yetirilməlidir ki, sinif istifadə edilməzdən əvvəl icra təmin olunsun. Səhv swizzling qeyri-müəyyən davranışa və sazlanması çətin olan səhvlərə səbəb ola bilər.

objective-c
// Method Swizzling for logging viewWillAppear:
@implementation UIViewController (Tracking)

+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        Class class = [self class];
        SEL originalSelector = @selector(viewWillAppear:);
        SEL swizzledSelector = @selector(xxx_viewWillAppear:);
        
        Method originalMethod = class_getInstanceMethod(class, originalSelector);
        Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector);
        method_exchangeImplementations(originalMethod, swizzledMethod);
    });
}

- (void)xxx_viewWillAppear:(BOOL)animated {
    [self xxx_viewWillAppear:animated]; // orijinal metodu çağırma
    [Analytics logScreen:NSStringFromClass([self class])];
}

@end

Bu kod swizzling vasitəsilə bütün UIViewController-da viewWillAppear:-ı əvəz edir. method_exchangeImplementations-dan sonra, orijinal viewWillAppear:-ı çağırmaq xxx_viewWillAppear:-ın çağırılmasına gətirib çıxarır, bu da orijinal metodu çağırır (rekursiv çağırış vasitəsilə) və analitika əlavə edir. DispatchOnce swizzling-in tək icrasını təmin edir.

Web Alətləri (Transpilation, Polyfill, Bundler, Webpack, Metro)

Müasir veb inkişafı və React Native və ya Flutter ilə mobil inkişaf qurulma alətləri olmadan mümkün deyil. Transpilation kodun bir dildən digərinə çevrilməsidir. Ən məşhur nümunə: TypeScript → JavaScript. Transpilyator (Babel, tsc) müasir kodu geriyə uyğun versiyaya çevirir.

Polyfill köhnə brauzerlərə çatışmayan funksionallıq əlavə edən koddur. Məsələn, Promise.allSettled() Internet Explorer-də işləmir, lakin polyfill bu imkanı əlavə edir. Yerli Runtime-dan fərqli olaraq, birbaşa cihazda kod icrasını idarə edən, polyfill və transpilyatorlar dil abstraksiya səviyyəsində işləyir — sintaksis və API-ləri uyğunlaşdırır, lakin icra mühitinə müdaxilə etmir.

Webpack ən məşhur paketləyicidir (State of JS 2024-ə görə layihələrin 72%-də istifadə olunur). Metro Facebook-un paketləyicisidir, React Native-də standart olaraq istifadə olunur. JavaScript-də Reflection Object.getPrototypeOf, Proxy və Reflect API vasitəsilə mövcuddur — bu mexanizmlər icra zamanı obyektləri yoxlamağa və dəyişdirməyə imkan verir, bu da paketləyicilərdəki statik modul analizindən əsaslı şəkildə fərqlənir. Webpack giriş nöqtəsini, çıxışı, yükləyiciləri (müxtəlif fayl növlərini emal etmək üçün) və plaginləri (əlavə funksionallıq üçün) təsvir edən konfiqurasiya faylından istifadə edir.

javascript
// webpack.config.js — minimal konfiqurasiya
const path = require('path');

module.exports = {
    entry: './src/index.js',
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, 'dist'),
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                exclude: /node_modules/,
                use: 'babel-loader',
            },
        ],
    },
    mode: 'production',
};

Bu konfiqurasiya giriş nöqtəsini (index.js), çıxış faylını (bundle.js) və Babel vasitəsilə JavaScript emalı qaydasını müəyyən edir. production rejimi optimallaşdırmaları aktivləşdirir: minifikasiya, tree shaking və avtomatik mühit aşkarlama. Runtime mərhələsində, bütün bu optimallaşdırmalar artıq məntiqə təsir etmir — brauzer kiçildilmiş paketi adi JavaScript kimi icra edir.

Kod Optimallaşdırılması (Minification, Tree Shaking, Obfuscation)

Minification boşluqları və şərhləri silmək və uzun dəyişən adlarını qısaltmaqla kodu sıxışdırma prosesidir. Məşhur kiçildicilər: Terser (JS/TS), CSSNano (CSS), html-minifier-terser. Kiçiltmə fayl ölçüsünü 50–70% azaldır. İstehsalda, Runtime kiçildilmiş kodu orijinal kod kimi icra edir — fərq yalnız oxunaqlılıq və fayl ölçüsündədir, semantikada deyil.

Tree Shaking tətbiqdə istifadə olunmayan ölü kodun silinməsidir. ES modullarının (import/export) statik analizinə əsaslanaraq işləyir. Əgər funksiya ixrac edilir, lakin heç vaxt idxal edilmirsə, Tree Shaking onu son qurulmadan silir. Tree Shaking kodu statik olaraq analiz edir — dinamik işləyən və tərtib zamanı görünməyən metodlara və xüsusiyyətlərə daxil ola bilən Reflection-dan fərqli olaraq.

Tree Shaking

Tree Shaking Webpack-də istehsal rejimində avtomatik aktivləşdirilir. Vacib şərt: kod ES modullarından (import/export) istifadə etməlidir, CommonJS (require) yox. Əgər kitabxana CommonJS ilə yazılıbsa, tree shaking işləməyəcək. Optimal tree shaking üçün, import _ from 'lodash' əvəzinə import { merge } from 'lodash-es' kimi dəqiq idxallardan istifadə edin. Bu, bir funksiya üçün paket ölçüsünü 500 KB-dan 10 KB-a endirir.

Hot Reload

Hot Reload tam yenidən yükləmə olmadan tətbiq kodunu yeniləməyə imkan verən texnologiyadır. React Native və Flutter-da, Hot Reload dəyişdirilmiş faylı dərhal yeniləyir, cari tətbiq vəziyyətini qoruyur. Bu, inkişafı köklü şəkildə sürətləndirir: dəyişikliklər tam yenidən qurulma üçün 10–30 saniyə əvəzinə 1–2 saniyədə görünür. Hot Reload Runtime daxilində işləyir: dəyişdirilmiş modul icra mühitini yenidən başlatmadan işləyən tətbiqə yeridilir.

Hot Restart yenilənmiş kodla tətbiqin sürətli yenidən başladılmasıdır, lakin vəziyyət qorunmur. Hot Reload mümkün olmadıqda istifadə olunur (məsələn, yerli kod və ya qlobal dəyişənlər dəyişdikdə). IT Sectr-də, biz UI inkişafının bütün mərhələlərində Hot Reload istifadə edirik — vizual düzəlişlərə 50% vaxta qənaət edir.

Alət Məqsəd Platforma
WebpackZəngin plagin ekosisteminə malik universal paketləyiciVeb, React Native (xüsusi)
MetroReact Native üçün Facebook-un paketləyicisiReact Native (standart)
ViteVeb üçün ESBuild əsaslı sürətli paketləyiciVeb (React, Vue, Svelte)
esbuildGo əsaslı ultra sürətli paketləyici (Webpack-dən 10-100x sürətli)Veb, Node.js
RollupKitabxanalar üçün paketləyici (ES modulları, tree shaking)Kitabxanalar, NPM paketləri

Cədvəl 3. Qurulma alətlərinin müqayisəsi. Webpack universal standartdır. Metro React Native üçün ixtisaslaşmışdır. Vite və esbuild sürətə fokuslanmış yeni nəsildir. Rollup kitabxana nəşr etmək üçün ən yaxşı seçimdir.

İsti Yenidən Yükləmə (Hot Reload, Hot Restart)

Hot Reload veb inkişafında (React Hot Loader, HMR — Hot Module Replacement) yaranmış və Flutter və React Native ilə mobil inkişafa keçmiş texnologiyadır. Mahiyyət: fayl dəyişdikdə, paketləyici yenilənmiş modulu işləyən tətbiqə göndərir, bu da vəziyyəti itirmədən köhnə kodu əvəz edir. Tam yenidən qurulmadan fərqli olaraq, Hot Reload Runtime-ı yenidən başlatmır — icra mühiti işləməyə davam edir və dəyişdirilmiş modul HMR və ya Reflection bənzəri istinad yeniləməsi kimi mexanizm vasitəsilə dinamik olaraq qoşulur.

Hot Reload işləyir, çünki freymvork vidjetləri (Flutter) və ya komponentləri (React) yaddaşda saxlayır və yalnız dəyişdirilmiş hissələri yeniləyir. Hot Restart daha kobud mexanizmdir: tətbiqi tamamilə yenidən başladır, lakin yerli kodu yenidən tərtib etmədiyi üçün tam yenidən qurulmadan daha sürətlidir. IT Sectr-də, biz UI hazırlayarkən Hot Reload, naviqasiya və ya vəziyyət idarəetməsini dəyişdirərkən Hot Restart istifadə edirik.

Tez-tez verilən suallar

Method Swizzling nədir və nə vaxt istifadə olunur?

Method Swizzling icra zamanı metod tətbiqinin dəyişdirilməsidir. AOP (Aspekt Yönümlü Proqramlaşdırma) üçün istifadə olunur: avtomatik qeydiyyat, analitika, kitabxanalardakı səhvlərin düzəldilməsi. Ehtiyatla istifadə edilməlidir — səhv swizzling qeyri-müəyyən davranışa səbəb ola bilər.

Runtime və Reflection arasındakı fərq nədir?

Runtime (icra mühiti) kod icrasını idarə edən infrastrukturdur: yaddaş ayrılması, metod göndərmə, zibil yığma. Reflection Runtime daxilində xüsusi bir mexanizmdir ki, proqrama icra zamanı öz strukturunu (siniflər, metodlar, xüsusiyyətlər) yoxlamağa və dəyişdirməyə imkan verir. Runtime daha genişdir, Reflection onun alətlərindən biridir.

Hot Reload və Hot Restart arasındakı fərq nədir?

Hot Reload tətbiq vəziyyətini itirmədən kodu yeniləyir — dəyişiklikləri dərhal görürsünüz. Hot Restart tətbiqi yenidən başladır (vəziyyət itirilir), lakin tam yenidən qurulmadan daha sürətlidir. Hot Reload UI dəyişiklikləri üçün istifadə olunur, Hot Restart — məntiq və naviqasiya dəyişiklikləri üçün.

Tree Shaking nədir və necə işləyir?

Tree Shaking son qurulmadan istifadə olunmayan kodun silinməsidir. ES modullarının (import/export) statik analizi vasitəsilə işləyir. Webpack istehsal rejimində avtomatik Tree Shaking-i aktivləşdirir. Maksimum səmərəlilik üçün, bütün kitabxananı idxal etmək əvəzinə dəqiq idxallardan istifadə edin.

Yeni layihə üçün hansı paketləyici seçilməlidir?

Veb layihəsi üçün — Vite (ən sürətli, müasir). React Native üçün — Metro (standart). Kitabxanalar üçün — Rollup. Çox plagin və köhnə kodla uyğunluq lazımdırsa — Webpack. Ultra sürətli qurulma üçün — esbuild.

Xülasə

  • iOS Runtime — Method Swizzling, Reflection və AOP üçün Objective-C dinamik mühiti. Ehtiyat tələb edir.
  • Method Swizzling — dərhal metodların dəyişdirilməsi. Analitika, qeydiyyat, mərkəzləşdirilmiş düzəlişlər üçün istifadə olunur.
  • Reflection — icra zamanı kod strukturunu yoxlamaq və dəyişdirmək mexanizmi. iOS Runtime-da (Objective-C) və KClass/Reflect API (Kotlin/JS) vasitəsilə tətbiq edilir.
  • Transpilation (TypeScript → JS) və Polyfill (köhnə brauzerlərə imkanlar əlavə etmək) müasir veb inkişafının təməlidir.
  • WebpackMetro əsas paketləyicilərdir. Viteesbuild sürətə fokuslanmış yeni nəsildir.
  • Tree Shaking ölü kodu silir (statik analiz). Reflection qurulma zamanı görünməyən dinamik giriş təmin edir.
  • Qurulma alətlərinin düzgün konfiqurasiyası və Runtime anlayışı inkişaf müddətini 40–50% azaldır (IT Sectr məlumatları, 2024).

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