פיתוח אפליקציות מובייל חוצות-פלטפורמות עם React Native
עם השקת הארכיטקטורה החדשה של React Native (Fabric + JSI + TurboModules) בסביבת ייצור, ארכיטקטורת המחסנית השתנתה מהותית. JSI החליף את הגשר האסינכרוני בממשק C++ סינכרוני — מודולים מקוריים נקראים כעת ישירות מ-JS ללא סריאליזציית JSON. Fabric כתב מחדש את מנוע העיבוד מאפס: עץ ה-UI נבנה דרך C++ Shadow Tree, ולא דרך Thread UI מקורי נפרד כמו בסכמה הישנה. כפי שצוין בתיעוד של React Native, שינויים אלה הם בליבת הארכיטקטורה החדשה סקירת ארכיטקטורת React Native.
בפועל, אפליקציות על מנוע העיבוד החדש מתנהגות אחרת מאלה שנכתבו לפני שנה — חלק מהספריות הישנות ללא תמיכה ב-TurboModules פשוט לא יעבדו או ידרשו enableLegacyBridge. כשמתחילים פרויקט חדש, אנחנו תמיד משתמשים בארכיטקטורה החדשה; כשמבצעים הגירה של פרויקט קיים, ביקורת תלויות היא חובה.
כיצד הארכיטקטורה החדשה של React Native משפיעה על ביצועים
בפועל, הגירה לארכיטקטורה החדשה מביאה להפחתה של 30% בזמן העיבוד וירידה של 20% בצריכת הזיכרון בזכות קריאות סינכרוניות למודולים מקוריים. זה בולט במיוחד בפרויקטים עם אנימציות ונתונים בזמן אמת. לדוגמה, באפליקציית משלוחים עם 500+ הזמנות ברשימה, FlatList גרם לגמגום, בעוד FlashList עם ה-recycler שלו פתר את הבעיה — מהירות הגלילה גדלה פי 3. בפרויקט אחר עם 10K משתמשים יומיים, מעבר מ-FlatList ל-FlashList קיצץ את זמן עיבוד הרשימה מ-200ms ל-50ms.
כיצד לבצע Profiling ואופטימיזציה לאפליקציית React Native
לצורך profiling אנו משתמשים ב-react-native-performance וב-Flipper עם תוסף Performance Monitor. ניתוח JS thread נעשה דרך Chrome DevTools באמצעות Metro debugger. לאנימציות אנו משתמשים ב-react-native-reanimated 3.x עם worklets שרצים על ה-UI thread ישירות דרך JSI — זה מפחית את זמן האחזור מ-~16ms על גשר ה-JS לכמעט אפס. קבלו ייעוץ להגדרת profiling לפרויקט שלכם.
היכן צצים אתגרים אמיתיים
Metro bundler ותלויות אקזוטיות. אם בפרויקט יש מודולים מקוריים עם הרחבות C++ מותאמות אישית, Metro לא יכול לפתור אותם ללא עריכות ב-metro.config.js. קריסה אופיינית: Unable to resolve module כאשר קיימים symlinks במונוריפו — נפתר עם resolver.unstable_enableSymlinks: true + watchFolders.
אנימציה. ה-Animated API רץ על ה-JS thread — תחת עומס על לולאת האירועים, האנימציה רועדת. התשובה הנכונה: react-native-reanimated 3.x עם worklets שרצים על ה-UI thread ישירות דרך JSI. השתמשו ב-react-native-gesture-handler במקום TouchableOpacity בסיסי — רק כך מחוות מטופלות באופן מקורי ללא עיכוב של 16ms של גשר ה-JS. בפרויקט אחד נאלצנו לעבור ל-react-native-vision-camera 3.x עקב אי-תאימות להרשאות חדשות באנדרואיד 13.
| סוג אנימציה | Animated API | react-native-reanimated 3.x |
|---|---|---|
| זמן אחזור | ~16ms על גשר JS | ~0ms על UI thread |
| ביצועים | מתדרדרים תחת עומס | יציבים ב-60fps |
גופנים ו-RTL. גופנים מותאמים אישית דרך react-native-fonts שוברים את הפריסה ב-locales של RTL (ערבית, עברית) אם I18nManager.allowRTL(true) לא מוגדר וסגנונות Flexbox לא נבדקו עם start/end במקום left/right.
מחסנית ובחירות ארכיטקטוניות
ניהול state: Zustand לפרויקטים פשוטים, Redux Toolkit + RTQ Query למורכבים. אנו משתמשים ב-Redux Saga רק בצוותים עם מומחיות קיימת — כתיבת קוד חדש עם Saga אינה יעילה. MobX לפרויקטים עם הרבה states ריאקטיביים תלויים זה בזה.
ניווט — React Navigation 6.x עם מחסניות מקוריות (@react-navigation/native-stack דרך react-native-screens). Expo Router מתאים לפרויקטים מנוהלים של Expo עם ניתוב מבוסס קבצים.
לפרויקטי Expo — SDK 50+, EAS Build ל-CI/CD במקום בניות מקומיות. EAS Submit הופך את ההעלאות ל-App Store Connect ול-Google Play Console לאוטומטיות. ל-bare React Native — Fastlane + GitHub Actions.
אחסון מקומי: MMKV (דרך react-native-mmkv) במקום AsyncStorage — סינכרוני, מהיר, כתוב ב-C++. לנתונים רלציוניים — WatermelonDB עם טעינה עצלה, מתאים לאפליקציות offline-first עם סנכרון.
מקרה בוחן. מרקטפלייס עם 40+ מסכים, צ'אט בזמן אמת דרך WebSocket, תשלומים דרך Stripe (@stripe/stripe-react-native). לרשימות ארוכות השתמשנו ב-FlashList של Shopify במקום FlatList: FlatList גרם לגמגום באנדרואיד בינוני עם 500+ כרטיסים, FlashList עם ה-recycler שלו פתר את זה. עדכוני OTA — react-native-code-push לתיקונים חמים ללא שחרורים לחנות. דיווח קריסות — Firebase Crashlytics דרך @react-native-firebase/crashlytics.
מה כוללת העבודה
- ביקורת קוד ותלויות קיימים
- הגדרת CI/CD (Fastlane + GitHub Actions או EAS Build)
- אינטגרציה עם App Store Connect ו-Google Play Console
- בדיקות: יחידה, רכיבים, E2E
- תיעוד ארכיטקטורה ו-API
- העברת קוד מקור וגישה
- חודש תמיכה לאחר השחרור
בדיקות
בדיקות יחידה — Jest + @testing-library/react-native. בדיקות רכיבים: render + fireEvent + snapshot לרכיבים קריטיים. E2E — Detox (מומלץ) או Maestro. Detox דורש הגדרה ספציפית לפלטפורמה אך מספק בדיקות אמינות על סימולטורים אמיתיים.
ציר זמן והיקף
| היקף | ציר זמן משוער |
|---|---|
| MVP, עד 10 מסכים, REST | 6–10 שבועות |
| מוצר עם אימות, מפות, התראות push | 3–5 חודשים |
| פלטפורמה מורכבת: צ'אט, תשלומים, offline | 6–12 חודשים |
העלות מחושבת באופן פרטני לפי המפרט. לאחר ביקורת דרישות אנו קובעים את ההיקף, המחסנית ואבני הדרך.
במשך למעלה מ-5 שנים סיפקנו 20+ פרויקטי React Native — מסטארטאפים ועד פתרונות ארגוניים. אנו מבטיחים פעילות יציבה ותמיכה לאחר השחרור. הזמינו ביקורת של האפליקציה הנוכחית שלכם לתאימות לארכיטקטורה החדשה — המהנדסים שלנו יעריכו את הפרויקט ויציעו תוכנית הגירה. קבלו ייעוץ בנושא הגירה לארכיטקטורה החדשה — צרו קשר כדי לדון בפרטים.







