Mikä on reaaliaikainen yhteistyömukainen muokkaus?

Reaaliaikainen yhteistyömukainen muokkaus mahdollistaa useiden ihmisten työskentelyn samassa dokumentissa samanaikaisesti, jolloin jokaisen henkilön muutokset näkyvät välittömästi kaikille muille. Varhaiset järjestelmät käyttivät Operational Transformation (OT) -tekniikkaa, joka järjestää ristiriitaiset muokkaukset lennossa — OT vaatii kuitenkin keskuspalvelimen päättämään jokaisesta muutoksesta. Modernit järjestelmät, kuten Yjs, käyttävät Conflict-free Replicated Data Types (CRDTs) -tekniikkaa: matemaattista kehystä, jossa mitkä tahansa kaksi replikaa voidaan yhdistää missä tahansa järjestyksessä ja ne konvergoituvat aina samaan tulokseen ilman keskusviranomaista, joka päättäisi kuka "voittaa".

CRDT:t tekevät offline-muokkauksesta luonnollista: käyttäjät voivat jatkaa muokkausta myös katkeamisen aikana, ja heidän muutoksensa yhdistyvät saumattomasti kun he yhdistyvät uudelleen. Tämän vuoksi CRDT:ille rakennetut reaaliaikaiset yhteistyömukaisen muokkauksen editorit tuntuvat välittömiltä — muokkaukset sovelletaan ensin paikallisesti ja synkronoidaan vertaisille sen jälkeen, sen sijaan että odotettaisiin palvelimen vastauksen saapumista ennen näyttöä.

Työkalun kuvaus

Collaborative Code Editor on reaaliaikainen moninpelaaja-koodieditori, joka on voimistettu Yjs:llä ja CodeMirror 6:lla. Jaa huoneen URL-osoite tiimisi kanssa ja kaikki huoneessa olevat muokkaavat samaa dokumenttia yhdessä, ja jokaisen henkilön kursori ja valinta näytetään merkityllä indikaattorilla.

Editori tukee syntaksin korostusta kymmenille ohjelmointikielille, jotka voidaan valita jaetun kielivalikon kautta — kielen muuttaminen yhdessä selaimessa päivittää sen kaikille huoneessa oleville välittömästi. Tiedostot voidaan ladata paikalliselta levyltä Avaa tiedosto -painikkeella ja ladata takaisin Tallenna tiedosto -painikkeella.

Ominaisuudet

  • Live-moninäyttäjän kursorit: Jokaisen yhteistyöntekijän kursori ja valinta näytetään värikoodatulla, nimetyllä merkinnällä; useat kursorit samassa paikassa tiivistyvät yhdeksi "N käyttäjää" -indikaattoriksi visuaalisen häiriön vähentämiseksi.
  • Jaettu kielivalinta: Aktiivinen ohjelmointikieli säilytetään huoneessa, joten kaikki osallistujat näkevät aina saman syntaksin korostuksen, ja myöhemmin liittyvät saavat välittömästi oikean tilan.
  • Tiedostojen avaaminen ja tallentaminen paikallisesti: Lataa mikä tahansa lähdetiedosto levyltä suoraan jaettuun editoriin tai lataa nykyinen dokumentti tiedostona oikealla tiedostopäätteellä.

Kuinka se toimii

Kun liityt huoneeseen, editori luo Yjs-dokumentin, jossa on jaettu Y.Text-solmu, joka edustaa tiedoston sisältöä. Jokainen näppäinpainallus koodataan kompaktiksi binääriseksi Yjs-päivitykseksi, sarjoitetaan Base64:ksi ja lähetetään WebSocket-huoneen kautta. Kaikki yhdistetyt vertaiset soveltavat päivityksen omaan replikaan; CRDT-takuun vuoksi kaikki replika konvergoituvat samaan tekstiin riippumatta siitä, missä järjestyksessä päivitykset saapuvat.

Kursori- ja valintapaikat jaetaan kevyen Awareness-kerroksen kautta, joka reitittää paikkatiedot saman WebSocket-huoneen kautta. Täysi dokumentin tila on dempattu ja kirjoitettu pysyvään huonetallennukseen sekunnin välein, joten käyttäjät, jotka liittyvät istunnon alkamisen jälkeen, saavat nykyisen dokumentin välittömästi.

Vaihtoehdot selitetty

  • Kielivalikko — Valitsee editorin syntaksin korostuskielen. Valinta lähetetään kaikille huoneen jäsenille, joten kaikki näkevät johdonmukaisen korostuksen. Valikko on poistettu käytöstä, kunnes olet yhdistetty huoneeseen.
  • Avaa tiedosto — Avaa paikallisen tiedostoselain ja lataa valitun tiedoston tekstisisällön jaettuun Yjs-dokumenttiin, korvaten nykyisen sisällön kaikille huoneessa oleville.
  • Tallenna tiedosto — Lataa nykyisen editorin sisällön tiedostona. Tiedostopääte valitaan automaattisesti valitun kielen perusteella.
  • Teema — Editori noudattaa järjestelmän tumma/vaalea-asetusta (tallennettu localStorage-muistiin). Vaihda käyttöjärjestelmän tai selaimen teemaa vaihtaaksesi VS Code -tyylisen tumman ja vaalean editoriteeman välillä.

Rajoitukset

  • Aktiivinen WebSocket-yhteys releaserveriin vaaditaan synkronointia varten; jos yhteys katkeaa, offline-muokkaukset synkronoidaan uudelleen automaattisesti kun yhteys palautetaan.
  • Pysyvää versiohistoriaa ei ole — kun istunto päättyy ja huone suljetaan, dokumentti on poissa, ellei sitä ole tallennettu paikallisesti Tallenna tiedosto -painikkeella.
  • Binääritiedostoja (kuvia, käännettyjä binäärejä jne.) ei voi ladata; editori toimii vain pelkkien tekstilähdetiedostojen kanssa.
  • Tämä työkalu on beta-versiossa; huoneen vakaus ja enimmäismäärä samanaikaisia käyttäjiä voivat olla rajoitettuja.

Vinkkejä

  • Jaa täysi huoneen URL-osoite selaimen osoitepalkista kutsuaksesi yhteistyöntekijöitä — huoneen tunnus on koodattu URL-osoitteeseen.
  • Tallenna paikallinen kopio Tallenna tiedosto -painikkeella istunnon lopussa; huoneen tietoja ei ole taattu säilyvän loputtomasti.
  • Jos yhteistyöntekijän kursoritunnus peittää tärkeää koodia, tunnus kääntyy automaattisesti vasemmalle, kun se on lähellä editorin oikeaa reunaa.