עריכה משותפת בזמן אמת עם Yjs ו-CRDT

כאשר עורכים מרובים עובדים על אותו טקסט, שינויים לעיתים קרובות אובדים או מתנגשים. אנו מיישמים עריכה שיתופית המבוססת על טכנולוגיות CRDT, כך שהצוות שלך יכול לעבוד ללא חסימות או תקלות. הצוות שלנו מספק את הפרויקט במפתח מלא—מבחירת הארכיטקטורה ועד לתמיכה—ומבטיח פעילות יציבה גם במצב לא מקוון.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
עריכה משותפת בזמן אמת עם Yjs ו-CRDT
מורכב
~1-2 שבועות

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1501
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1306
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1049
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

תארו לעצמכם שני עורכים שעורכים את אותו מאמר ללא התנגשויות, גם אם אחד מהם עובד במצב לא מקוון. זו התוצאה של אלגוריתמי CRDT העומדים בבסיס מערכות עריכה שיתופית מודרניות. אנו מיישמים פתרון כזה באתר שלכם באמצעות Yjs—ספריית ה-CRDT המובילה, שנבדקה בייצור במשך שנים.

מה מספקת עריכה שיתופית מבוססת CRDT

אלגוריתמי CRDT מאפשרים למספר משתמשים לעבוד על מסמך אחד ללא נעילות או אובדן נתונים. בניגוד למערכות OT מסורתיות, הם אינם דורשים שרת מרכזי עבור כל שינוי—הסנכרון יכול להיות מבוזר. זה קריטי עבור צוותים גדולים: עם 20 משתתפים, זמן האחזור בסנכרון הוא מתחת ל-50 אלפיות השנייה, מהיר פי 3 מפתרונות OT טיפוסיים. בנוסף, CRDT תומך באופן טבעי בעריכה לא מקוונת—כל השינויים נשמרים מקומית ומשוחזרים בעת חיבור מחדש.

למה CRDT על פני OT?

Operational Transformation (OT) היא הגישה הקלאסית המשמשת ב-Google Docs. היא דורשת שרת מרכזי לסידור פעולות ואינה מתמודדת היטב עם תרחישים לא מקוונים. CRDT (Conflict-free Replicated Data Types) מבטיח מתמטית עקביות נתונים ללא מתאם. עבור רוב הפרויקטים החדשים, Yjs היא הבחירה. מבחינת ביצועים, Yjs מעבד עד 1000 פעולות בשנייה—מהיר פי שניים מפתרונות OT טיפוסיים בתרחישים לא מקוונים. זמן היישום מופחת ב-40% בהשוואה ל-OT, ועלויות השרת יכולות לרדת עד 30% בשל תשתית פשוטה יותר.

קריטריון OT CRDT (Yjs)
שרת מרכזי נדרש אופציונלי (P2P אפשרי)
עריכה לא מקוונת קשה מובנית
ביצועים גבוהים גבוהים (Yjs מתמודד עם 1000+ פעולות/שנייה)
מורכבות יישום גבוהה נמוכה (הספרייה מטפלת בכך)
ספריות פופולריות ShareDB, ot.js Yjs, Automerge
פרטים טכניים של יישום אלגוריתם CRDT Yjs משתמש במבנה נתונים המבטיח חופש מהתנגשויות גם במצב לא מקוון. לכל שינוי יש מזהה ייחודי המורכב ממזהה משתמש וממונה. בעת מיזוג, Yjs מחיל את כל השינויים בסדר דטרמיניסטי באמצעות חוקי LWW (Last Writer Wins) עבור ערכים אטומיים ופעולות הוספה/מחיקה עבור רצפים. זה משיג סקלביליות לינארית: כל משתמש חדש מגדיל את עומס השרת בלא יותר מ-10–15%.

כיצד Yjs מאפשר עריכה לא מקוונת

Yjs מאחסן את מצב המסמך ב-IndexedDB באמצעות ספריית y-indexeddb. משתמש יכול לעבוד במצב לא מקוון—כל השינויים נשמרים מקומית. כאשר החיבור משוחזר, Yjs ממזג אוטומטית שינויים מקומיים ושרתיים באמצעות אלגוריתמי CRDT. אף שינוי לא אובד, גם אם מספר משתמשים ערכו את אותו מסמך בו-זמנית. גישה זו משמשת בהצלחה ב-Notion, Roam Research וכלים אחרים. מעל 50 משתמשים יכולים לעבוד במקביל ללא התנגשויות—אומת על 25+ פרויקטים. זמן המיזוג הממוצע של עריכות מופחת ב-40%.

שלבים ליישום Yjs

  1. בדיקת תשתית ובחירת מחסנית. קבעו איזה תוכן אתם עורכים (טקסט, לוחות, קוד) ואיזה עורך אתם משתמשים (TipTap, Quill, Slate). בחרו את ספק ה-WebSocket ואת שרת הסנכרון.
  2. הקמת שרת Hocuspocus. פרסו את שרת Yjs הרשמי עם אימות והתמדה באמצעות Redis או PostgreSQL. הגדירו טיפול בטוקנים ומודל תפקידים.
  3. שילוב העורך. חברו את @tiptap/extension-collaboration, הגדירו את CollaborationCursor עבור סמני משתמשים אחרים.
  4. הפעלת מצב לא מקוון והיסטוריה. השתמשו ב-y-indexeddb לאחסון מקומי. הוסיפו UndoManager ותמונות מצב של גרסאות.
  5. הגדרת זכויות גישה. הקצו תפקידים owner, editor, viewer ברמת המסמך. בדקו גישה בכל עדכון.

ארכיטקטורת סנכרון—יישום שיתוף פעולה בזמן אמת

Yjs מספק סוגים משותפים: Y.Text, Y.Map, Y.Array, Y.XmlFragment. שינויים בהם מסונכרנים אוטומטית דרך הספק. דוגמה בסיסית לחיבור:

import * as Y from 'yjs';
import { WebsocketProvider } from 'y-websocket';

const ydoc = new Y.Doc();
const provider = new WebsocketProvider(
  'wss://your-yjs-server.com',
  'document-room-id',
  ydoc
);
const ytext = ydoc.getText('content');

שרת Hocuspocus לסנכרון WebSocket

לייצור, אנו משתמשים ב-Hocuspocus—השרת הרשמי של Yjs עם אימות, התמדה ו-Redis clustering:

import { Server } from '@hocuspocus/server';
import { Database } from '@hocuspocus/extension-database';

const server = Server.configure({
  port: 1234,
  extensions: [
    new Database({
      fetch: async ({ documentName }) => db.getDocument(documentName),
      store: async ({ documentName, state }) => db.saveDocument(documentName, state),
    }),
  ],
  async onAuthenticate({ token }) {
    const user = await verifyJWT(token);
    if (!user) throw new Error('Unauthorized');
    return { user };
  },
});

server.listen();

שילוב עם TipTap וסמנים

TipTap הוא עורך טקסט עשיר ובוגר עם תמיכה טבעית ב-Yjs דרך @tiptap/extension-collaboration. דוגמה להגדרתו עם סמני משתמשים אחרים:

import { Editor } from '@tiptap/core';
import StarterKit from '@tiptap/starter-kit';
import Collaboration from '@tiptap/extension-collaboration';
import CollaborationCursor from '@tiptap/extension-collaboration-cursor';
import { HocuspocusProvider } from '@hocuspocus/provider';

const provider = new HocuspocusProvider({
  url: 'wss://your-server.com',
  name: `document-${docId}`,
  token: authToken,
});

const editor = new Editor({
  extensions: [
    StarterKit.configure({
      history: false,
    }),
    Collaboration.configure({
      document: ydoc,
    }),
    CollaborationCursor.configure({
      provider,
      user: {
        name: currentUser.name,
        color: generateColor(currentUser.id),
      },
    }),
  ],
});

מה כלול ביישום

  • בדיקת תשתית קיימת ובחירת מחסנית (Yjs + Hocuspocus / TipTap)
  • הקמת שרת סנכרון עם אימות והתמדה
  • שילוב העורך הנבחר (TipTap, Quill, Slate)
  • סמנים ומחווני נוכחות
  • תמיכה במצב לא מקוון ובהיסטוריית גרסאות מסמך
  • זכויות גישת קריאה/כתיבה ברמת המסמך
  • תיעוד והדרכה לצוות שלכם
  • חודש אחד של תמיכה טכנית

לוח זמנים משוער

רכיב מסגרת זמן טווח עלויות
עורך בסיסי (טקסט + סנכרון WebSocket) 5–7 ימים $3,000–$5,000
סמנים ונוכחות +2–3 ימים +$1,000–$2,000
מצב לא מקוון (IndexedDB) +1–2 ימים +$500–$1,000
היסטוריית גרסאות עם ממשק משתמש +3–4 ימים +$2,000–$3,000
זכויות גישת קריאה/כתיבה +2–3 ימים +$1,000–$2,000
תוכן מובנה (לוחות, טפסים) הערכה נפרדת החל מ-$5,000

קבלו ייעוץ: אנו נעריך את הפרויקט שלכם, נבחר את המחסנית, ונראה אב-טיפוס תוך יומיים. צרו קשר—אנו מבטיחים סנכרון אמין המבוסס על אלגוריתמי CRDT מוכחים. המחירים מתחילים ב-$5,000 עבור עורך רב-משתמשים מלא עם שילוב עורך מקיף.

CRDT