Przedstawiamy interfejs Cross-Origin Storage API

Opublikowano: 10 listopada 2026 r.

Nowoczesne aplikacje internetowe często korzystają z dużych zasobów, takich jak platformy JavaScript, silniki gier i modele AI. Mimo że witryny używają identycznych zasobów, każda z nich musi pobrać i zapisać własną kopię każdego z nich.

W przypadku proponowanego interfejsu Cross-Origin Storage API (w skrócie COS) klient określa treści, których szuka, za pomocą ich hasha i pobiera je z dowolnego adresu URL, aby udostępnić je w wyznaczonych witrynach (lub we wszystkich witrynach). Oznacza to, że dokładny, znany zasób może być udostępniany w różnych witrynach niezależnie od wyświetlania komponentu. Ta propozycja wiąże się z korzyściami w zakresie bezpieczeństwa, ale też z wyzwaniami.

Przypadki użycia

Wiele już napisaliśmy o znaczeniu buforowania modeli i buforowania dowolnych zasobów za pomocą interfejsu Cache Storage API. Interfejs Cross-Origin Storage API idzie o krok dalej i może być przydatny, gdy kilka powiązanych (lub niepowiązanych) witryn potrzebuje dostępu do tego samego zasobu:

  • Modele AI: modele takie jak Gemma czy Llama ważą od około gigabajta do kilkudziesięciu gigabajtów. Przechowywanie i pobieranie jednej kopii za pomocą COS pozwala uniknąć pobierania duplikatów. To główny powód, dla którego powstała ta propozycja.
  • Moduły Wasm: platformy takie jak Flutter dostarczają pliki Wasm, które są żądane miliony razy dziennie z tysięcy różnych źródeł i zawsze są identyczne pod względem bajtów.
  • Popularne biblioteki i platformy JavaScript: oddzielne grupowanie kodu dostawcy w całości (np. kompletnej biblioteki React bez optymalizacji tree shaking) umożliwia wielu aplikacjom udostępnianie jednej kopii z pamięci podręcznej za pomocą COS.
  • Silniki gier: gry przeglądarkowe oparte na silnikach takich jak Godot czy Unity mogą udostępniać środowisko wykonawcze silnika za pomocą COS i pobierać przez sieć tylko zasoby specyficzne dla gry. Najwięcej korzyści odniosą portale z grami, które zawierają wiele gier rekreacyjnych z różnych źródeł lub elementów iframe.
  • Duże czcionki internetowe: czcionki ikon, czcionki emotikonów i czcionki z szerokim zakresem znaków Unicode są pobierane na ogromnej liczbie stron. Udostępnienie ich raz za pomocą COS pomaga zarówno w zwiększeniu wydajności, jak i w zapewnieniu zrównoważonego rozwoju.
Dwie niepowiązane gry Three.js, Descent i Quake, współdzielą jedną kopię silnika za pomocą COS, co widać w Narzędziach deweloperskich.
Dwie niezwiązane ze sobą gry Three.js, Descent (na karcie w tle) i Quake (na karcie na pierwszym planie), współdzielą jedną kopię silnika za pomocą COS, co widać w Narzędziach deweloperskich. Ten zrzut ekranu pochodzi z eksperymentalnej kompilacji Chromium i może nie odzwierciedlać ostatecznego wyglądu.

Podstawowy proces pracy z COS

Interfejs COS API wprowadza metodę navigator.crossOriginStorage.getFileHandle(), za pomocą której aplikacje internetowe przechowują i pobierają pliki poza granicami pochodzenia, identyfikowane przez hasz kryptograficzny. W wyjaśnieniu znajdziesz przykład pokazujący podstawowy proces korzystania z interfejsu API.

Wypróbuj już dzisiaj

Obecnie możesz eksperymentować z COS na 2 sposoby:

  • Zainstaluj rozszerzenie do przeglądarki z  Chrome Web Store, dodatków do Firefoksa lub Safari App Store, aby zapewnić zgodność interfejsu API i wszystkich integracji. Przepływ interfejsu API możesz przetestować w dowolnej przeglądarce. Możesz też załadować rozpakowane rozszerzenie z jego kodu źródłowego.
  • Eksperyment w Chromium: dostępna jest eksperymentalna implementacja Chromium. Pobierz go na macOS na Apple Silicon lub Linux x86_64 ze strony goo.gle/cos-chromium, a następnie otwórz about://flags, wyszukaj „Cross-Origin Storage”, ustaw opcję Włączone i uruchom ponownie, gdy pojawi się prośba. Ta kompilacja zawiera integrację z Narzędziami deweloperskimi: znajdź Współdzielenie pamięci masowej na karcie Aplikacja.

Zainteresowanie ekosystemem

COS to propozycja na wczesnym etapie, a wiele projektów już oferuje eksperymentalną obsługę, zwykle za flagą akceptacji i jako progresywne ulepszanie:

  • Emscripten udostępnia wygenerowane dane wyjściowe Wasm.
  • Flutter udostępnia środowisko wykonawcze Skia Wasm.
  • Transformers.js udostępnia wagi modelu i środowiska wykonawcze Wasm, od których zależą.
  • WebLLM udostępnia modele i środowiska wykonawcze.
  • wllama udostępnia modele AI.
  • Nuxt.js wczytuje współdzielone zależności z pamięci masowej w ramach współdzielenia i utrzymuje wtyczkę Vite COS.
  • Prompt API Polyfill udostępnia modele AI w backendach WebLLM i Transformers.js.
  • Prebid.js ma dystrybucję CDN biblioteki określania stawek przez kod w nagłówku, która jest zgodna z COS.

Standaryzacja

Współdzielenie pamięci masowej między źródłami to propozycja WICG na wczesnym etapie. Możesz zapoznać się z wczesną wersją przeglądu projektu W3C TAG.

Czekamy na opinie na temat interfejsu API i propozycji. Możesz zgłaszać problemy, wyrażać poparcie lub otwierać żądania pull w repozytorium pamięci masowej współdzielonej.

Zasoby

Zapoznaj się też z tymi narzędziami i prezentacjami:

Dodatkowe materiały

Rozmowy i podcasty