Lietuvių

Susipažinkite su žiniatinklio komponentais – naršyklės prigimtine architektūra, skirta kurti daugkartinio naudojimo sąsajos elementus, veikiančius įvairiose „JavaScript“ karkasuose. Sužinokite apie individualizuotus elementus, „Shadow DOM“, HTML šablonus ir modulius.

Žiniatinklio komponentai: naršyklės prigimtinė komponentų architektūra pasauliniam žiniatinklio kūrimui

Nuolat besikeičiančioje žiniatinklio kūrimo aplinkoje, komponentais pagrįstos architektūros tapo itin svarbios kuriant mastelio keitimui pritaikytus, prižiūrimus ir daugkartinio naudojimo vartotojo sąsajos elementus. Nors „JavaScript“ karkasai, tokie kaip „React“, „Angular“ ir „Vue.js“, siūlo savo komponentų modelius, žiniatinklio komponentai (Web Components) suteikia naršyklės prigimtinį požiūrį į komponentizaciją. Tai reiškia, kad galite kurti daugkartinio naudojimo komponentus, kurie sklandžiai veikia skirtinguose karkasuose ir net be jokio karkaso. Dėl to žiniatinklio komponentai yra galingas įrankis pasauliniam žiniatinklio kūrimui, užtikrinantis nuoseklumą ir priežiūros paprastumą įvairiuose projektuose ir komandose.

Kas yra žiniatinklio komponentai?

Žiniatinklio komponentai – tai žiniatinklio standartų rinkinys, leidžiantis kurti daugkartinio naudojimo, inkapsuliuotas HTML žymes, skirtas naudoti tinklalapiuose ir žiniatinklio programose. Jie pagrįsti keturiomis pagrindinėmis specifikacijomis:

Šios technologijos, veikdamos kartu, leidžia kūrėjams kurti tikrai daugkartinio naudojimo komponentus, kuriais galima lengvai dalytis ir integruoti į įvairius projektus. Naršyklių palaikymas žiniatinklio komponentams yra puikus ir apima visas pagrindines šiuolaikines naršykles, įskaitant „Chrome“, „Firefox“, „Safari“ ir „Edge“.

Kodėl verta naudoti žiniatinklio komponentus?

Yra keletas svarių priežasčių, kodėl verta įtraukti žiniatinklio komponentus į savo žiniatinklio kūrimo procesą:

1. Daugkartinis naudojimas

Žiniatinklio komponentai yra sukurti daugkartiniam naudojimui. Apibrėžus komponentą, jį galima naudoti kelis kartus viename puslapyje arba skirtinguose projektuose. Tai skatina kodo efektyvumą ir mažina pertekliškumą. Įsivaizduokite įmonę, turinčią biurus Tokijuje, Londone ir Niujorke, kuriai reikalingas standartizuotas datos parinkimo komponentas. Naudodami žiniatinklio komponentus, jie gali sukurti vieną komponentą ir jį naudoti visose savo regioninėse svetainėse, užtikrindami nuoseklią vartotojo patirtį visame pasaulyje.

2. Nepriklausomumas nuo karkasų

Žiniatinklio komponentai nėra susieti su jokiu konkrečiu „JavaScript“ karkasu. Jie gali būti naudojami su „React“, „Angular“, „Vue.js“ ar net su paprastu HTML ir „JavaScript“. Šis nepriklausomumas nuo karkasų daro juos vertingu turtu komandoms, dirbančioms su įvairiais technologijų rinkiniais, arba projektams, kurie turi būti apsaugoti nuo būsimų karkasų pokyčių. Tai leidžia organizacijoms migruoti tarp karkasų arba įdiegti naujus, neperrašant pagrindinių vartotojo sąsajos komponentų.

3. Inkapsuliacija

„Shadow DOM“ suteikia stiprią inkapsuliaciją, apsaugodamas komponento vidines įgyvendinimo detales nuo likusios puslapio dalies. Tai apsaugo nuo stilių konfliktų ir užtikrina, kad komponentas veiktų nuspėjamai, nepriklausomai nuo jį supančios aplinkos. Pavyzdžiui, žiniatinklio komponentas, skirtas rodyti klientų atsiliepimus, gali turėti savo stilių, kuriam nedarys įtakos pagrindinės svetainės CSS, ir atvirkščiai.

4. Priežiūros paprastumas

Modulinė žiniatinklio komponentų prigimtis palengvina jų priežiūrą. Komponento vidinio įgyvendinimo pakeitimai neturi įtakos kitoms programos dalims, kol komponento viešoji API išlieka ta pati. Tai supaprastina derinimo, testavimo ir komponentų atnaujinimo procesą. Įsivaizduokite sudėtingą duomenų vizualizavimo žiniatinklio komponentą; jo vidinės diagramų bibliotekos atnaujinimai nesugadins kitų puslapio komponentų.

5. Žiniatinklio standartai

Žiniatinklio komponentai yra pagrįsti atviraisiais žiniatinklio standartais, užtikrinančiais ilgalaikį suderinamumą ir mažinančiais priklausomybės nuo vieno tiekėjo riziką. Kadangi naršyklių gamintojai ir toliau tobulina šių standartų palaikymą, žiniatinklio komponentai taps tik galingesni ir universalesni.

6. Našumas

Kadangi žiniatinklio komponentus tiesiogiai palaiko naršyklė, jie dažnai gali pasiūlyti geresnį našumą, palyginti su konkretaus karkaso komponentų įgyvendinimais. Naršyklė efektyviai valdo žiniatinklio komponentų atvaizdavimą ir gyvavimo ciklą, mažindama su „JavaScript“ karkasais susijusias papildomas išlaidas.

Išsamiau apie pagrindines technologijas

Panagrinėkime išsamiau kiekvieną iš pagrindinių technologijų, kurios sudaro žiniatinklio komponentus:

1. Individualizuoti elementai (Custom Elements)

Individualizuoti elementai leidžia apibrėžti savo HTML žymes ir susieti jas su „JavaScript“ klasėmis, kurios apibrėžia jų elgesį. Galite sukurti elementus, tokius kaip <my-element>, <date-picker> ar <product-card>, su individualia logika ir atvaizdavimu. Norėdami apibrėžti individualizuotą elementą, išplečiate HTMLElement klasę ir užregistruojate jį naudodami customElements.define() metodą.

Pavyzdys:


class MyElement extends HTMLElement {
  constructor() {
    super();
    this.innerHTML = '<p>Hello from my custom element!</p>';
  }
}

customElements.define('my-element', MyElement);

Šis kodas apibrėžia individualizuotą elementą, vadinamą <my-element>, kuris rodo tekstą „Hello from my custom element!“. Tada galite naudoti šį elementą savo HTML taip:


<my-element></my-element>

2. Šešėlinis DOM (Shadow DOM)

„Shadow DOM“ suteikia komponento vidinės struktūros, stilių ir elgesio inkapsuliaciją. Jis sukuria atskirą DOM medį, kuris yra prijungtas prie komponento, bet yra izoliuotas nuo pagrindinio dokumento DOM. Tai neleidžia CSS stiliams ir „JavaScript“ kodui, esančiam „Shadow DOM“, paveikti likusios puslapio dalies, ir atvirkščiai. Galima įsivaizduoti tai kaip mini dokumentą, įdėtą į jūsų pagrindinį HTML dokumentą.

Pavyzdys:


class MyShadowElement extends HTMLElement {
  constructor() {
    super();
    const shadow = this.attachShadow({ mode: 'open' });
    const p = document.createElement('p');
    p.textContent = 'This is inside the shadow DOM!';
    shadow.appendChild(p);
  }
}

customElements.define('my-shadow-element', MyShadowElement);

Šiame pavyzdyje attachShadow({ mode: 'open' }) metodas sukuria „Shadow DOM“ ir prijungia jį prie individualizuoto elemento. Turinys, pridėtas prie „Shadow DOM“, yra izoliuotas nuo pagrindinio dokumento.

3. HTML šablonai (HTML Templates)

HTML šablonai leidžia apibrėžti daugkartinio naudojimo HTML kodo dalis, kurios nėra atvaizduojamos, kol nėra aiškiai klonuojamos ir įterpiamos į DOM. Šablonai apibrėžiami naudojant <template> elementą. Tai naudinga apibrėžiant jūsų komponentų struktūrą, neatvaizduojant jų iš karto. Šablonai siūlo mechanizmą, skirtą apibrėžti inertinius DOM submedžius, kurie yra išanalizuojami, bet neatvaizduojami, kol jų aiškiai neinicijuosite.

Pavyzdys:


<template id="my-template">
  <p>This is from the template!</p>
</template>

class MyTemplateElement extends HTMLElement {
  constructor() {
    super();
    const shadow = this.attachShadow({ mode: 'open' });
    const template = document.getElementById('my-template');
    const templateContent = template.content.cloneNode(true);
    shadow.appendChild(templateContent);
  }
}

customElements.define('my-template-element', MyTemplateElement);

Šis kodas paima šabloną, klonuoja jo turinį ir prideda jį prie individualizuoto elemento „Shadow DOM“.

4. ES moduliai (ES Modules)

ES moduliai yra standartinis būdas organizuoti ir platinti „JavaScript“ kodą moduliškai. Galite naudoti ES modulius importuoti ir eksportuoti žiniatinklio komponentus, kas palengvina jų valdymą ir pakartotinį naudojimą skirtinguose projektuose. ES moduliai leidžia padalinti kodą į atskirus failus ir importuoti juos pagal poreikį. Tai pagerina kodo organizavimą, priežiūrą ir našumą.

Pavyzdys:

Sukurkite failą pavadinimu my-component.js:


export class MyComponent extends HTMLElement {
  constructor() {
    super();
    this.innerHTML = '<p>Hello from my component module!</p>';
  }
}

customElements.define('my-component', MyComponent);

Tada savo HTML faile:


<script type="module" src="my-component.js"></script>
<my-component></my-component>

Tai importuoja MyComponent klasę iš my-component.js failo ir užregistruoja ją kaip individualizuotą elementą.

Paprasto žiniatinklio komponento kūrimas: pasaulinio laiko rodymas

Sukurkime paprastą žiniatinklio komponentą, kuris rodo dabartinį laiką tam tikroje laiko juostoje. Šis komponentas bus naudingas komandoms, bendradarbiaujančioms skirtingose laiko juostose. Pavadinsime jį <global-time>.


class GlobalTime extends HTMLElement {
  constructor() {
    super();
    this.shadow = this.attachShadow({ mode: 'open' });
    this.timezone = this.getAttribute('timezone') || 'UTC';
    this.format = this.getAttribute('format') || 'HH:mm:ss';
    this.updateTime();
    setInterval(() => this.updateTime(), 1000);
  }

  static get observedAttributes() { return ['timezone', 'format']; }

  attributeChangedCallback(name, oldValue, newValue) {
    if (name === 'timezone' || name === 'format') {
      this.updateTime();
    }
  }

  updateTime() {
    try {
    const now = new Date();
    const formatter = new Intl.DateTimeFormat('en-US', { timeZone: this.timezone, hour12: false, hour: '2-digit', minute: '2-digit', second: '2-digit' });
    const formattedTime = formatter.format(now);
    this.shadow.innerHTML = `<span>${formattedTime} (${this.timezone})</span>`;
    } catch (e) {
        this.shadow.innerHTML = `<span style="color: red;">Neteisinga laiko juosta: ${this.timezone}</span>`;
    }
  }
}

customElements.define('global-time', GlobalTime);

Paaiškinimas:

Naudojimas:


<global-time timezone="America/New_York"></global-time>
<global-time timezone="Europe/London"></global-time>
<global-time timezone="Asia/Tokyo"></global-time>
<global-time timezone="Invalid/Timezone"></global-time> <!-- Neteisingos laiko juostos apdorojimo pavyzdys -->

Tai parodys dabartinį laiką Niujorke, Londone ir Tokijuje. „Invalid/Timezone“ pavyzdys demonstruoja klaidų apdorojimą.

Geriausios žiniatinklio komponentų kūrimo praktikos

Norėdami užtikrinti, kad jūsų žiniatinklio komponentai būtų gerai suprojektuoti, prižiūrimi ir daugkartinio naudojimo, laikykitės šių geriausių praktikų:

1. Apibrėžkite aiškią viešąją API

Aiškiai apibrėžkite savo komponento viešąją API, įskaitant atributus, savybes ir įvykius, kuriuos vartotojai gali naudoti sąveikai su juo. Tai palengvina kitiems naudoti jūsų komponentą ir sumažina kritinių pakeitimų riziką, kai atnaujinate jo vidinį įgyvendinimą. Išsamiai dokumentuokite šią API.

2. Naudokite „Shadow DOM“ inkapsuliacijai

Visada naudokite „Shadow DOM“, kad inkapsuliuotumėte savo komponento vidinę struktūrą, stilius ir elgesį. Tai apsaugo nuo konfliktų su likusia puslapio dalimi ir užtikrina, kad komponentas veiktų nuspėjamai. Venkite naudoti „uždaro“ (closed) režimo, nebent tai yra absoliučiai būtina, nes tai apsunkina derinimą ir testavimą.

3. Atidžiai tvarkykite atributus ir savybes

Naudokite atributus komponento pradinei būsenai konfigūruoti ir savybes jo vykdymo laiko būsenai valdyti. Atspindėkite atributų pakeitimus savybėse ir atvirkščiai, kai tai tinkama, kad komponentas būtų sinchronizuotas. Naudokite observedAttributes ir attributeChangedCallback, kad reaguotumėte į atributų pakeitimus.

4. Naudokite įvykius komunikacijai

Naudokite individualizuotus įvykius, kad praneštumėte apie pakeitimus ar veiksmus iš komponento išoriniam pasauliui. Tai suteikia švarų ir laisvai susietą būdą komponentui sąveikauti su kitomis programos dalimis. Siųskite individualizuotus įvykius naudodami dispatchEvent(new CustomEvent('my-event', { detail: data })).

5. Rašykite vienetų testus (Unit Tests)

Rašykite vienetų testus, kad užtikrintumėte, jog jūsų komponentas veikia kaip tikėtasi, ir išvengtumėte regresijų. Naudokite testavimo karkasą, pvz., „Jest“ ar „Mocha“, testams rašyti. Žiniatinklio komponentų testavimas apima patikrinimą, ar jie teisingai atvaizduojami, reaguoja į vartotojo sąveikas ir siunčia įvykius kaip tikėtasi.

6. Dokumentuokite savo komponentus

Išsamiai dokumentuokite savo komponentus, įskaitant jų paskirtį, API ir naudojimo pavyzdžius. Naudokite dokumentacijos generatorių, pvz., „JSDoc“ ar „Storybook“, interaktyviai dokumentacijai kurti. Gera dokumentacija yra labai svarbi, kad jūsų komponentai būtų daugkartinio naudojimo ir prižiūrimi.

7. Atsižvelkite į prieinamumą (A11y)

Užtikrinkite, kad jūsų žiniatinklio komponentai būtų prieinami vartotojams su negalia. Naudokite ARIA atributus, kad suteiktumėte semantinę informaciją ir laikykitės prieinamumo geriausių praktikų. Testuokite savo komponentus su pagalbinėmis technologijomis, pvz., ekrano skaitytuvais. Pasauliniai prieinamumo aspektai yra gyvybiškai svarbūs; užtikrinkite, kad jūsų komponentas palaikytų skirtingas kalbas ir įvesties metodus.

8. Pasirinkite pavadinimų suteikimo tvarką

Priimkite nuoseklią pavadinimų suteikimo tvarką savo komponentams ir jų atributams. Naudokite priešdėlį, kad išvengtumėte pavadinimų konfliktų su esamais HTML elementais (pvz., my- arba app-). Elementų pavadinimams naudokite „kebab-case“ stilių (pvz., my-date-picker).

9. Pasinaudokite esamomis bibliotekomis

Apsvarstykite galimybę naudoti esamas bibliotekas, kurios teikia naudingas priemones žiniatinklio komponentams kurti, pvz., „LitElement“ ar „Stencil“. Šios bibliotekos gali supaprastinti kūrimo procesą ir suteikti našumo optimizacijų. Jos gali sumažinti pasikartojančio kodo kiekį ir pagerinti kūrėjo patirtį.

Žiniatinklio komponentai ir pasaulinis kūrimas: internacionalizacija ir lokalizacija

Kuriant žiniatinklio komponentus pasaulinei auditorijai, būtina atsižvelgti į internacionalizaciją (i18n) ir lokalizaciją (l10n). Internacionalizacija – tai programų projektavimo ir kūrimo procesas, kad jas būtų galima pritaikyti skirtingoms kalboms ir regionams, nereikalaujant inžinerinių pakeitimų. Lokalizacija – tai programos pritaikymo konkrečiai kalbai ir regionui procesas. Žiniatinklio komponentai gali atlikti svarbų vaidmenį kuriant internacionalizacijai paruoštas programas.

1. Kalbų palaikymas

Naudokite Intl API datoms, skaičiams ir valiutoms formatuoti pagal vartotojo lokalę. Įkelkite konkrečiai kalbai skirtus išteklius (pvz., vertimus) dinamiškai, atsižvelgiant į vartotojo kalbos nuostatas. Pavyzdžiui, global-time komponentą būtų galima patobulinti, kad data ir laikas būtų rodomi vartotojo pageidaujamu formatu.

2. Teksto kryptis

Palaikykite tiek iš kairės į dešinę (LTR), tiek iš dešinės į kairę (RTL) teksto kryptis. Naudokite CSS logines savybes (pvz., margin-inline-start vietoj margin-left), kad užtikrintumėte, jog jūsų komponentai teisingai prisitaikytų prie skirtingų teksto krypčių. Testuokite savo komponentus su RTL kalbomis, tokiomis kaip arabų ir hebrajų.

3. Datos ir skaičių formatavimas

Naudokite Intl.DateTimeFormat ir Intl.NumberFormat API datas ir skaičius formatuoti pagal vartotojo lokalę. Tai užtikrina, kad datos ir skaičiai būtų rodomi teisingu formatu vartotojo regionui. Pavyzdžiui, data „2024 m. sausio 1 d.“ skirtingai formatuojama JAV (01/01/2024) ir Europoje (01.01.2024).

4. Valiutos formatavimas

Naudokite Intl.NumberFormat API valiutoms formatuoti pagal vartotojo lokalę. Tai užtikrina, kad valiutų simboliai ir dešimtainiai skyrikliai būtų rodomi teisingai vartotojo regionui. Pavyzdžiui, valiutos suma „$1,234.56“ skirtingai formatuojama JAV ($1,234.56) ir Vokietijoje (1.234,56 €).

5. Vertimų valdymas

Naudokite vertimų valdymo sistemą savo vertimams tvarkyti. Tai palengvina vertimų atnaujinimą ir priežiūrą laikui bėgant. Įrankiai, tokie kaip „i18next“ ir „Lokalise“, gali padėti valdyti vertimus ir juos dinamiškai įkelti. Apsvarstykite galimybę naudoti žiniatinklio komponentą išversto teksto rodymui.

6. Kultūriniai aspektai

Projektuodami komponentus, atsižvelkite į kultūrinius skirtumus. Pavyzdžiui, spalvos ir vaizdai skirtingose kultūrose gali turėti skirtingas reikšmes. Venkite naudoti kultūriškai jautrų turinį, kuris gali įžeisti kai kuriuos vartotojus. Paprastas pavyzdys: kai kuriose kultūrose raudona spalva reiškia sėkmę, o kitose – pavojų.

Žiniatinklio komponentų bibliotekų ir karkasų pavyzdžiai

Kelios bibliotekos ir karkasai gali padėti jums efektyviau kurti žiniatinklio komponentus:

Išvada

Žiniatinklio komponentai siūlo galingą ir lankstų būdą kurti daugkartinio naudojimo vartotojo sąsajos elementus žiniatinkliui. Jų prigimtinis naršyklės palaikymas, nepriklausomumas nuo karkasų ir inkapsuliacijos galimybės daro juos vertingu turtu šiuolaikiniam žiniatinklio kūrimui. Suprasdami pagrindines technologijas ir laikydamiesi geriausių praktikų, galite sukurti žiniatinklio komponentus, kuriuos lengva prižiūrėti, pakartotinai naudoti ir integruoti į įvairius projektus. Žiniatinklio standartams toliau tobulėjant, žiniatinklio komponentai yra pasirengę atlikti vis svarbesnį vaidmenį žiniatinklio kūrimo ateityje. Pasinaudokite žiniatinklio komponentais, kad sukurtumėte tvirtas, mastelio keitimui pritaikytas ir ateičiai atsparias žiniatinklio programas, skirtas pasaulinei auditorijai.

Žiniatinklio komponentai: naršyklės prigimtinė komponentų architektūra pasauliniam žiniatinklio kūrimui | MLOG