Hva er sanntids samarbeidsredigering?

Sanntids samarbeidsredigering lar flere personer arbeide på det samme dokumentet samtidig, der hver persons endringer er umiddelbart synlige for alle andre. Tidlige systemer brukte Operational Transformation (OT) — en teknikk som omordner motstridende redigeringer på farten — men OT krever en sentral server for å avgjøre hver endring. Moderne systemer som Yjs bruker Conflict-free Replicated Data Types (CRDTs): et matematisk rammeverk der to replika kan slås sammen i hvilken som helst rekkefølge og alltid konvergerer til samme resultat, uten behov for en sentral myndighet til å avgjøre hvem som "vinner".

CRDTs gjør frakoblet redigering naturlig: brukere kan fortsette å redigere selv når de er frakoblet, og endringene deres slås sammen rent når de kobler til igjen. Dette er grunnen til at sanntids samarbeidsredigerere bygget på CRDTs føles øyeblikkelige — redigeringer brukes lokalt først og synkroniseres til jevnaldrende etterpå, i stedet for å vente på en rundtur til en server før de vises på skjermen.

Verktøybeskrivelse

Collaborative Code Editor er en sanntids multiplayer-kodeeditor drevet av Yjs og CodeMirror 6. Del rom-URL-en med lagkameratene dine, og alle i rommet redigerer det samme dokumentet sammen, med hver persons markør og valg vist i en merket indikator.

Editoren støtter syntaksfremheving for dusinvis av programmeringsspråk, som kan velges via en delt språkrullgardin — endring av språket i en nettleser oppdaterer det for alle i rommet øyeblikkelig. Filer kan lastes fra den lokale disken din med Open File-knappen og lastes ned igjen med Save File.

Funksjoner

  • Live flbruker-markører: Hver samarbeiders markør og valg vises med en fargekodert, navngitt etikett; flere markører på samme posisjon slås sammen til en enkelt "N brukere"-indikator for å redusere visuelt støy.
  • Delt språkvalg: Det aktive programmeringsspråket lagres i rommet slik at alle deltakere alltid ser samme syntaksfremheving, og sene deltakere får umiddelbar riktig tilstand.
  • Åpne og lagre filer lokalt: Last inn hvilken som helst kildefil fra disk direkte inn i den delte editoren, eller last ned det gjeldende dokumentet som en fil med riktig filendelse.

Hvordan det fungerer

Når du blir med i et rom, oppretter editoren et Yjs-dokument med en delt Y.Text-node som representerer filinnholdet. Hver tastetilslag kodes som en kompakt binær Yjs-oppdatering, serialiseres til Base64, og sendes over en WebSocket-rom. Alle tilkoblede jevnaldrende bruker oppdateringen på sin egen replikering; på grunn av CRDT-garantien konvergerer alle replikaer til samme tekst uavhengig av rekkefølgen oppdateringene ankommer.

Markør- og valgposisjoner deles gjennom et lett Awareness-lag som ruter posisjonsdata gjennom samme WebSocket-rom. Den fullstendige dokumenttilstanden dempes og skrives til vedvarende romlagring hvert sekund, slik at brukere som blir med etter økten startet mottar det gjeldende dokumentet umiddelbart.

Alternativer forklart

  • Språkrullgardin — Velger syntaksfremmhevingsspråket for editoren. Valget sendes til alle rommedlemmer slik at alle ser konsistent fremheving. Rullgardinen er deaktivert til du er tilkoblet et rom.
  • Open File — Åpner en lokal filvelger og laster den valgte filens tekstinnhold inn i det delte Yjs-dokumentet, og erstatter gjeldende innhold for alle i rommet.
  • Save File — Laster ned gjeldende editorinnhold som en fil. Filendelsen velges automatisk basert på det valgte språket.
  • Tema — Editoren følger systemets mørk/lys-preferanse (lagret i localStorage). Bytt operativsystem eller nettlesertema for å veksle mellom VS Code–stilens mørke og lyse editortemaoer.

Begrensninger

  • En aktiv WebSocket-tilkobling til relé-serveren er nødvendig for synkronisering; hvis tilkoblingen faller ut, synkroniseres redigeringer gjort frakoblet automatisk når du kobler til igjen.
  • Det finnes ingen vedvarende versjonhistorikk — når en økt avsluttes og rommet lukkes, er dokumentet borte med mindre du lagret det lokalt med Save File-knappen.
  • Binære filer (bilder, kompilerte binærfiler osv.) kan ikke lastes inn; editoren fungerer kun med ren tekst-kildefiler.
  • Dette verktøyet er i betaversjon; romstabilitet og maksimalt antall samtidige brukere kan være begrenset.

Tips

  • Del den fullstendige rom-URL-en fra nettleserens adressefelt for å invitere samarbeidspartnere — rom-ID-en er kodet inn i URL-en.
  • Lagre en lokal kopi med Save File på slutten av en økt; romdata er ikke garantert å vedvare på ubestemt tid.
  • Hvis en samarbeiders markøretikett dekker viktig kode, flippes etiketten automatisk til venstre når den er nær høyre kant av editoren.