אתה משיק דשבורד לניתוח מכירות, וכל פילטר גורם לטעינת עמוד מלאה. משתמשים מאבדים הקשר, ואתה מאבד זמן. במקום SSR עם עלויות השרת שלו, אנו משתמשים ב-Client-Side Rendering (CSR): הדפדפן בונה את ממשק המשתמש בעצמו, השרת רק מספק שלד וסקריפטים. ב-10+ שנים שילחנו למעלה מ-50 פרויקטים כאלה ללוגיסטיקה, פינטק ומסחר אלקטרוני. לדוגמה, עבור חברת תחבורה הפחתנו את זמן Time to Interactive (TTI) מ-8 ל-2.5 שניות על ידי העברת ה-CRM שלהם ל-CSR עם React ו-TanStack Router. זו הארכיטקטורה של SPA, אידיאלית ליישומים סגורים: דשבורדים, אזורים אישיים, כלים. אנו מבטיחים ממשק רספונסיבי עם state מקומי, אפילו על חומרה חלשה.
צור קשר לייעוץ על בחירת ארכיטקטורה — החל מ-$5,000 עבור ביקורת ראשונית.
מתי CSR עובד טוב יותר מ-SSR
| קריטריון | CSR | SSR |
|---|---|---|
| SEO לתוכן ציבורי | חלש | טוב |
| טעינה ראשונה | איטית יותר (TTFB ~200 אלפיות השנייה, ואז hydration) | מהירה יותר (HTML מוכן) |
| ניווטים הבאים | מיידי | כל בקשה לשרת |
| state מורכב בצד הלקוח | טבעי (Zustand, Redux) | מסובך (react-query, server state) |
| משאבי שרת | מינימליים | נדרש שרת ל-rendering |
| מצב לא מקוון (PWA) | אפשרי (Service Worker) | קשה |
למה CSR מתאים ל-SPA
SPA היא ארכיטקטורה שבה כל ממשק המשתמש רץ בדפדפן, והשרת משמש רק כ-API. CSR מתאים למודל הזה בצורה מושלמת: אין server rendering, כל route הוא קומפוננטה שנטענת לפי דרישה. המשתמש מקבל מעברים חלקים ללא הבהוב עמוד. עבור יישומים סגורים כמו דשבורדים או חשבונות אישיים, שבהם SEO אינו נחוץ (NoSEO), CSR הוא הבחירה היעילה ביותר. השווה עם SSR: בכל ניווט SSR מייצר HTML חדש, מה שגורם לעיכובים. CSR שומר routes במטמון בצד הלקוח ומעדכן רק נתונים. ממשקים עשירים נהנים מהאינטראקטיביות המיידית של CSR.
איך לבחור כלים ל-CSR
אנו משתמשים בסטack מודרני שהוכח בייצור. הגדרה טיפוסית כוללת:
- Vite ל-bundling (hot reload מהיר פי 10 מ-Webpack)
- React 18 או Vue 3 לממשק המשתמש
- TanStack Router לניווט עם type safety
- TanStack Query ל-server state
- תוסף Vite PWA למצב לא מקוון
דוגמה להגדרת Vite עם router וחלוקה ידנית ל-chunks:
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import { TanStackRouterVite } from '@tanstack/router-plugin/vite';
export default defineConfig({
plugins: [TanStackRouterVite(), react()],
resolve: {
alias: {
'@': '/src',
},
},
build: {
rollupOptions: {
output: {
manualChunks: {
vendor: ['react', 'react-dom'],
router: ['@tanstack/react-router'],
query: ['@tanstack/react-query'],
},
},
},
},
});
איך לייעל את ביצועי CSR
אסטרטגיה: code splitting מבוסס routes, ניתוח bundle, ייבוא דינמי של ספריות כבדות. לדוגמה, ספריית import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; import { TanStackRouterVite } from '@tanstack/router-plugin/vite'; export default defineConfig({ plugins: [TanStackRouterVite(), react()], resolve: { alias: { '@': '/src' }, }, build: { rollupOptions: { output: { manualChunks: { vendor: ['react', 'react-dom'], router: ['@tanstack/react-router'], query: ['@tanstack/react-query'], }, }, }, }, }); (200+ KB) נטענת רק כשהמשתמש לוחץ על "Export". אנו משתמשים ב-TanStack Router עם עמודים בטעינה עצלה (lazy-loaded) ו-Suspense. בנוסף, אנו מפעילים tree-shaking — Vite מסיר קוד שאינו בשימוש. הגדר xlsx ב-package.json ליעילות מקסימלית.
// Динамический импорт
async function exportToExcel(data: Row[]) {
const { utils, writeFile } = await import('xlsx');
const ws = utils.json_to_sheet(data);
const wb = utils.book_new();
utils.book_append_sheet(wb, ws, 'Данные');
writeFile(wb, 'export.xlsx');
}חלוקת קוד מבוססת routes:
const DashboardPage = lazy(() => import('@/pages/Dashboard'));
const ReportsPage = lazy(() => import('@/pages/Reports')); אילו מדדי ביצועים אנו משיגים
| מדד | יעד | הושג |
|---|---|---|
| LCP | <2.5 שניות | 1.8 שניות |
| INP | <200 אלפיות השנייה | 150 אלפיות השנייה |
| JS בטעינה ראשונה | <150 KB | 120 KB |
| TTFB | <800 אלפיות השנייה | 400 אלפיות השנייה (CDN) |
איך אנו מודדים את המדדים האלה
אנו משתמשים ב-Lighthouse CI ב-pipeline ובבדיקות מעבדה על מכשירים אמיתיים. כל המדדים מתועדים ב-Grafana.איך ליישם PWA ומצב לא מקוון ב-CSR
אנו מוסיפים את תוסף Vite PWA. Workbox שומר בקשות API במטמון (Stale-While-Revalidate, תפוגה של 24 שעות). היישום עובד לא מקוון.
VitePWA({
registerType: 'autoUpdate',
workbox: {
globPatterns: ['**/*.{js,css,html,ico,png,svg,woff2}'],
runtimeCaching: [
{
urlPattern: /^https:\/\/api\.example\.com\/products/,
handler: 'StaleWhileRevalidate',
options: {
cacheName: 'api-products',
expiration: {
maxAgeSeconds: 24 * 60 * 60,
},
},
},
],
},
}) אילו שלבים כולל פיתוח CSR
- ניתוח: לימוד דרישות, עומס, תרחישי שימוש.
- עיצוב: ארכיטקטורת מודולים, סכמת נתונים, routes.
- יישום: פיתוח אינקרמנטלי עם code review ובדיקות.
- בדיקות: יחידה, e2e (Playwright), ביצועים (Lighthouse).
- פריסה: הגדרת CDN, CI/CD (GitHub Actions), ניטור.
מה אתה מקבל בסופו של דבר
- תיעוד טכני: ארכיטקטורה, מפרט API, מדריך פריסה
- קוד מקור עם CI/CD (GitHub Actions, Docker)
- גישה לאחסון, דומיין, SSL
- הדרכת צוות: איך להריץ, להגדיר ולהרחיב
- תמיכה: שבועיים לאחר השחרור, תיקוני באגים
כמה זמן לוקח הפיתוח ואיך מחושב העלות?
לוחות זמנים משוערים: מ-4 עד 12 שבועות תלוי במורכבות. העלות מחושבת באופן אישי לאחר ביקורת פרויקט. אם אתה רוצה ייעוץ על בחירת ארכיטקטורה, כתוב לנו — נעזור לקבוע אם CSR מתאים. עם למעלה מ-5 שנות ניסיון בשוק ה-SPA, אנו מספקים ממשקים מהירים ורספונסיביים. הזמן יישום CSR מפתח — קבל ממשק רספונסיבי ללא פשרות.







