Turbo Module در React Native — چیست، JSI چگونه کار می‌کند و معماری

نویسنده: IT Sectr منتشر شده: 2026-06-04 زمان مطالعه: 10 دقیقه

Turbo Module تحول ماژول‌های بومی React Native است که بر روی JavaScript Interface (JSI) ساخته شده است. برخلاف Bridge، Turbo Module به صورت همزمان و بدون سریال‌سازی JSON کار می‌کند که افزایش قابل توجهی در عملکرد ایجاد می‌کند. به گزارش Meta Engineering Blog, 2024، Turbo Module یک جزء کلیدی از معماری جدید است و در React Native 0.76+ در دسترس است.

نکات اصلی

  • Turbo Module — ماژول بومی React Native مبتنی بر JSI بدون Bridge.
  • JSI — JavaScript Interface، امکان فراخوانی مستقیم متدهای C++ از JS.
  • همزمانی — Turbo Module از فراخوانی‌های همزمان بدون سریال‌سازی پشتیبانی می‌کند.
  • بارگذاری تنبل — ماژول‌ها فقط در اولین دسترسی از JS بارگذاری می‌شوند.
  • Codegen — انواع و رابط‌ها به طور خودکار از مشخصات تولید می‌شوند.

Turbo Module چیست؟

Turbo Module جزئی از معماری جدید React Native است که Bridge کلاسیک را برای تعامل JavaScript با کد بومی جایگزین می‌کند. برخلاف Bridge که هر پیام به JSON سریال‌سازی شده و به صورت ناهمزمان ارسال می‌شود، Turbo Module از JSI استفاده می‌کند — لایه‌ای میانی که به JavaScript اجازه می‌دهد مستقیماً توابع نوشته شده به زبان C++ را فراخوانی کند.

معماری Turbo Module توسط تیم Meta در React Conf 2021 به عنوان بخشی از بازسازی گسترده‌تر React Native با نام رمز «The New Architecture» معرفی شد. علاوه بر Turbo Module، معماری جدید شامل Fabric (رندرکننده جدید)، Codegen (تولیدکننده کد) و JSI (رابط تعامل) است. این مؤلفه‌ها با هم مشکلات عملکردی را که از سال 2015 در React Native انباشته شده بود حل می‌کنند.

Turbo Module سه مشکل کلیدی Native Module های کلاسیک را حل می‌کند: ناهمزمانی (همه فراخوانی‌ها از صف عبور می‌کنند)، سریال‌سازی (هر فراخوانی نیاز به تبدیل JSON دارد) و بارگذاری (همه ماژول‌ها در شروع برنامه مقداردهی اولیه می‌شوند). با Turbo Module، متدهای بومی همزمان فراخوانی می‌شوند، داده‌ها بدون کپی‌کردن منتقل می‌شوند و ماژول‌ها بر اساس تقاضا بارگذاری می‌شوند.

JSI چگونه کار می‌کند

JSI (JavaScript Interface) یک API به زبان C++ است که لایه‌ای میانی بین موتور JavaScript (Hermes یا JSC) و کد بومی ایجاد می‌کند. JSI اشیاء میزبان — اشیاء C++ که مانند اشیاء و متدهای معمولی JavaScript به نظر می‌رسند — ارائه می‌دهد. وقتی JavaScript متد چنین شیئی را فراخوانی می‌کند، JSI مستقیماً کد C++ مربوطه را بدون سریال‌سازی و بدون جابجایی بین نخ‌ها اجرا می‌کند.

تفاوت کلیدی JSI با Bridge — عدم کپی‌کردن داده‌ها است. در Bridge هر مقدار به JSON سریال‌سازی، از طریق صف ارسال و سپس غیرسریال‌سازی می‌شود. JSI اشاره‌گرهایی به داده‌ها در حافظه منتقل می‌کند که امکان کار با حجم زیادی از داده را بدون کاهش عملکرد فراهم می‌کند. بر اساس آزمایش‌های Meta، فراخوانی‌های JSI ۵ تا ۱۰ برابر سریع‌تر از فراخوانی‌های مشابه از طریق Bridge هستند.

HostObject و فراخوانی‌های همزمان

JSI رابط HostObject را تعریف می‌کند — کلاس C++ که React Native در محیط JS به عنوان یک شیء معمولی ثبت می‌کند. وقتی کد JS به ویژگی یا متد HostObject دسترسی پیدا می‌کند، JSI فراخوانی را گرفته و کد C++ را اجرا می‌کند. این امکان انجام عملیات‌ها را به صورت همزمان، بدون انتظار برای صف Bridge فراهم می‌کند.

cpp
// مثال HostObject JSI — فراخوانی همزمان بومی
class ImageCompressorHostObject : public jsi::HostObject {

    jsi::Value get(
        jsi::Runtime& rt,
        const jsi::PropNameID& propName
    ) override {
        auto name = propName.utf8(rt);
        if (name == "compressImage") {
            return jsi::Function::createFromHostFunction(
                rt,
                jsi::PropNameID::forUtf8(rt, name),
                2,
                [](jsi::Runtime& rt,
                   const jsi::Value& thisValue,
                   const jsi::Value* args,
                   size_t count) -> jsi::Value {
                    return jsi::Value(rt, compressNative(
                        args[0].asString(rt).utf8(rt),
                        args[1].asNumber()
                    ));
                }
            );
        }
        return jsi::Value::undefined();
    }
};

کد بالا نشان می‌دهد که JSI HostObject چگونه فراخوانی compressImage را از JavaScript پردازش می‌کند. تابع دو آرگومان (مسیر رشته و عدد کیفیت) دریافت می‌کند، تابع بومی compressNative را فراخوانی کرده و نتیجه را برمی‌گرداند — همه به صورت همزمان، بدون Bridge، بدون JSON. این مزیت کلیدی JSI نسبت به معماری کلاسیک است.

JSI بخشی از زمان اجرای اصلی React Native است و به موتور JavaScript خاصی وابسته نیست. هم با Hermes و هم با JavaScriptCore (JSC) کار می‌کند و رابط یکپارچه‌ای برای ارتباط با محیط بومی ارائه می‌دهد.

Turbo Module در مقابل Bridge: مقایسه

مقایسه Turbo Module و Bridge تحول معماری React Native را نشان می‌دهد. Bridge برای راه‌اندازی سریع React Native در سال 2015 طراحی شد، اما با افزایش پیچیدگی برنامه‌ها، محدودیت‌های آن بحرانی شد. Turbo Module این مشکلات را در سطح معماری حل می‌کند.

ویژگیBridgeTurbo Module
سرعت فراخوانی۵–۱۵ میلی‌ثانیه سربار۰.۱–۰.۵ میلی‌ثانیه سربار
همزمانیفقط ناهمزمانهمزمان و ناهمزمان
سریال‌سازیJSON در هر فراخوانیاشیاء JSI بدون کپی
ایمنی نوعخیرCodegen + TypeScript
مقداردهی اولیههمه ماژول‌ها در شروعتنبل، بر اساس تقاضا

در عمل، تفاوت در فراخوانی‌های مکرر متدهای بومی بیشتر محسوس است — مثلاً هنگام پردازش رسانه یا کار با GPU. برای فراخوانی‌های نادر (یک بار در هر جلسه) تفاوت عملکرد ناچیز است. Turbo Module همچنین کار با داده‌های باینری بزرگ — تصاویر، ویدیوها، پروتکل‌های باینری — را ساده‌تر می‌کند که در Bridge نیاز به راه‌حل‌های پیچیده با سیستم فایل داشت.

مثال ایجاد Turbo Module

ایجاد Turbo Module با تعریف مشخصات در TypeScript آغاز می‌شود. Codegen به طور خودکار رابط‌های C++ و stubهای Objective-C/Java را بر اساس این مشخصات تولید می‌کند. این رویکرد توسعه را کاملاً تغییر می‌دهد — توسعه‌دهنده API را یک بار توصیف می‌کند و Codegen بقیه را ایجاد می‌کند.

typescript
// ImageCompressor.ts — مشخصات Turbo Module
import type { TurboModule } from 'react-native';
import type { Double } from 'react-native/Libraries/Types/CodegenTypes';

export interface Spec extends TurboModule {
  compressImage(
    imagePath: string,
    quality: Double
  ): Promise<string>;
}

تولید کد از طریق Codegen

Codegen مشخصات TypeScript را تحلیل کرده و HostObject C++، پروتکل Objective-C و رابط Java را تولید می‌کند. فقط پیاده‌سازی منطق بومی برای توسعه‌دهنده باقی می‌ماند. این رویکرد تضمین می‌کند که انواع در سمت JavaScript و بومی همیشه مطابقت دارند و خطاهای نگاشت دستی را حذف می‌کند.

objective-c
// پیاده‌سازی TurboModule برای iOS (stub تولید شده)
@interface ImageCompressorModule ()
    RCT_EXPORT_MODULE(ImageCompressor)
@end

@implementation ImageCompressorModule

RCT_EXPORT_METHOD(compressImage:(NSString *)imagePath
                  quality:(NSNumber *)quality
                  resolver:(RCTPromiseResolveBlock)resolve
                  rejecter:(RCTPromiseRejectBlock)reject)
{
    NSData *compressed = [ImageProcessor compressAtPath:imagePath
                                                    quality:quality.doubleValue];
    resolve([NSString stringWithUTF8String:compressed.UTF8String]);
}

@end

یک مزیت مهم — بارگذاری تنبل است. Turbo Module در شروع برنامه مقداردهی نمی‌شود، بلکه فقط در اولین دسترسی از JavaScript ایجاد می‌شود. این زمان راه‌اندازی برنامه را در مقایسه با رویکرد کلاسیک که همه Native Module ها بلافاصله بارگذاری می‌شوند، ۳۰–۵۰٪ کاهش می‌دهد.

مهاجرت از Bridge به Turbo Module

انتقال از Bridge به Turbo Module نیاز به بازنویسی کامل برنامه ندارد. React Native 0.73+ از هر دو معماری به صورت موازی پشتیبانی می‌کند — ماژول‌های Bridge به کار خود ادامه می‌دهند و ماژول‌های جدید می‌توانند به عنوان Turbo Module ایجاد شوند. این امکان مهاجرت تدریجی، ماژول به ماژول را فراهم می‌کند.

برای فعال‌سازی معماری جدید در پروژه React Native 0.76+، پرچم newArchEnabled را در فایل react-native.config.js روی true تنظیم کنید. پس از آن، همه Native Module های موجود از طریق Bridge به کار خود ادامه می‌دهند و ماژول‌های جدید می‌توانند به عنوان Turbo Module ایجاد شوند. Codegen به طور خودکار هر دو گزینه را پردازش می‌کند.

js
// react-native.config.js — فعال‌سازی معماری جدید
module.exports = {
  project: {
    ios: {},
    android: {},
  },
  assets: [],
  newArchEnabled: true,
};

توصیه می‌شود مهاجرت را با ماژول‌هایی شروع کنید که بیشتر از JavaScript فراخوانی می‌شوند — آنها بیشترین افزایش عملکرد را دریافت خواهند کرد. ماژول‌هایی که به ندرت فراخوانی می‌شوند (یک بار در هر جلسه) را می‌توان بدون افت عملکرد قابل توجه در Bridge باقی گذاشت.

  • Codegen — از مشخصات TypeScript برای تولید خودکار رابط‌های بومی استفاده کنید.
  • تست‌های E2E — عملکرد ماژول‌ها را در هر دو معماری، به ویژه پس از به‌روزرسانی React Native، بررسی کنید.
  • طرح پشتیبان — در صورت بروز مشکل با Turbo Module، می‌توانید از طریق پرچم تنظیمات موقتاً به Bridge بازگردید.

سوالات متداول

آیا می‌توان از Turbo Module در React Native 0.72 استفاده کرد؟

خیر، Turbo Module به React Native 0.73+ با معماری جدید فعال نیاز دارد. از نسخه 0.76 معماری جدید پایدار شده و برای پروژه‌های تولیدی توصیه می‌شود.

آیا Turbo Module در iOS و Android کار می‌کند؟

بله، Turbo Module از هر دو پلتفرم پشتیبانی می‌کند. JSI یک لایه C++ بین‌پلتفرمی است و Codegen به ترتیب برای iOS و Android stubهای Objective-C و Java تولید می‌کند.

آیا استفاده از Hermes با Turbo Module اجباری است؟

خیر، Turbo Module با هر موتور JS از طریق JSI کار می‌کند. با این حال، Hermes توصیه می‌شود زیرا برای کار با JSI و معماری جدید React Native بهینه شده است.

چگونه Turbo Module را دیباگ کنیم؟

دیباگ Turbo Module از طریق Xcode یا Android Studio مانند کد بومی معمولی انجام می‌شود. علاوه بر این، Flipper برای ردیابی فراخوانی‌های JSI و عملکرد ماژول‌ها در دسترس است.

آیا Turbo Module اندازه برنامه را افزایش می‌دهد؟

Turbo Module عملاً تأثیری بر اندازه برنامه ندارد. کد C++ JSI قبلاً بخشی از React Native است و کد تولید شده حداقل است — فقط رابط‌ها بدون تکرار منطق.

خلاصه

  • Turbo Module — نوع جدید ماژول‌های بومی React Native که از طریق JSI بدون سریال‌سازی JSON کار می‌کند.
  • JSI — لایه C++ که فراخوانی مستقیم همزمان متدهای بومی را از JavaScript فراهم می‌کند.
  • سرعت — فراخوانی‌های Turbo Module ۵–۱۰ برابر سریع‌تر از فراخوانی‌های از طریق Bridge هستند.
  • بارگذاری تنبل — ماژول‌ها فقط در اولین دسترسی مقداردهی می‌شوند و راه‌اندازی برنامه را تسریع می‌کنند.
  • Codegen — تولید خودکار رابط‌های بومی از مشخصات TypeScript.
  • سازگاری — React Native 0.73+ از کار موازی Bridge و Turbo Module پشتیبانی می‌کند.
  • مهاجرت — انتقال مرحله‌ای: React Native را به 0.76+ به‌روز کنید، newArchEnabled را فعال کنید، ماژول‌های جدید را به عنوان Turbo Module ایجاد کنید.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید