חדש: Cross-Origin Storage API

תאריך פרסום: 10 בנובמבר 2026

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

באמצעות Cross-Origin Storage API (או בקיצור COS), הלקוח מציין את התוכן שהוא מחפש לפי ה-hash שלו, ומאחזר אותו מכל כתובת URL כדי לשתף אותו באתרים המיועדים (או בכל האתרים). זה אומר שאפשר לשתף משאב מדויק וידוע בין אתרים, בלי קשר להצגת הנכס. להצעה הזו יש יתרונות מבחינת אבטחה, אבל גם אתגרים מבחינת בטיחות.

תרחישים לדוגמה

כתבנו בהרחבה על החשיבות של שמירת מודלים במטמון ושמירת כל נכס במטמון באמצעות Cache Storage API. ‫Cross-Origin Storage API הוא פתרון מתקדם יותר, שיכול להועיל כשכמה אתרים קשורים (או לא קשורים) צריכים גישה לאותו משאב:

  • מודלים של AI: מודלים כמו Gemma או גרסאות של Llama שוקלים בין ג'יגה בייט אחד בערך לעשרות ג'יגה בייט. אחסון ואחזור של עותק אחד דרך COS מונעים הורדות כפולות רבות. זהו המניע העיקרי מאחורי ההצעה.
  • מודולים של Wasm: מסגרות כמו Flutter שולחות קובצי Wasm שמתקבלות עבורם מיליוני בקשות ביום באלפי מקורות שונים, והם תמיד זהים מבחינת בייטים.
  • ספריות ותבניות framework פופולריות של JavaScript: אם מאגדים קוד של ספק בנפרד ובאופן מלא (כמו ספריית React המלאה, ללא הסרת קוד מיותר), כמה אפליקציות יכולות לשתף עותק אחד שנשמר במטמון דרך COS.
  • מנועי משחקים: משחקים בדפדפן שמבוססים על מנועים כמו Godot או Unity יכולים לשתף את זמן הריצה של המנוע דרך COS, ולאחזר רק נכסים ספציפיים למשחק דרך הרשת. הפורטלים שהכי מרוויחים מהתכונה הזו הם פורטלים של משחקים שמארחים הרבה משחקים לקהל הרחב ממקורות שונים או מ-iframe שונים.
  • גופני אינטרנט גדולים: גופנים של סמלים, גופנים של סמלי אמוג'י וגופנים עם כיסוי רחב של Unicode יורדים במספר עצום של דפים. שיתוף שלהם פעם אחת דרך COS עוזר גם לביצועים וגם לקיימוּת.
שני משחקי Three.js לא קשורים, Descent ו-Quake, משתפים עותק אחד של המנוע דרך COS, שנבדק בכלי הפיתוח.
שני משחקי Three.js לא קשורים, Descent (בכרטיסייה שברקע) ו-Quake (בכרטיסייה שבחזית), משתפים עותק אחד של המנוע דרך COS, שנבדק בכלי הפיתוח. צילום המסך הזה הוא מגרסת Chromium ניסיונית, ויכול להיות שהוא לא משקף את העיצוב הסופי.

תהליך העבודה הבסיסי עם COS

‫COS API מציג שיטה של navigator.crossOriginStorage.getFileHandle() שדרכה אפליקציות אינטרנט מאחסנות ושולפות קבצים מעבר לגבולות המקור, שמזוהים באמצעות גיבוב קריפטוגרפי. במסמך ההסבר יש דוגמה שמראה את התהליך הבסיסי של העבודה עם ה-API.

אני רוצה לנסות

יש שתי דרכים להתנסות ב-COS כרגע:

  • מתקינים תוסף לדפדפן מחנות האינטרנט של Chrome, מהתוספים של Firefox או מApp Store של Safari כדי להוסיף polyfill לממשק ה-API ולכל השילובים. אתם יכולים לבדוק את תהליך ה-API בכל דפדפן. או לטעון את התוסף כשהוא לא ארוז מקוד המקור שלו.
  • ניסוי ב-Chromium: יש הטמעה ניסיונית של Chromium. מורידים את הגרסה ל-macOS במעבדי Apple Silicon או ל-Linux x86_64 מהכתובת goo.gle/cos-chromium, פותחים את about://flags, מחפשים את Cross-Origin Storage, מגדירים את האפשרות כמופעלת ומפעילים מחדש כשמוצגת בקשה לעשות זאת. הגרסה הזו כוללת שילוב של כלי הפיתוח: אפשר למצוא את האפשרות אחסון ממקורות שונים בכרטיסייה אפליקציה.

עניין במערכת האקולוגית

‫COS היא הצעה בשלב מוקדם, וכמה פרויקטים כבר כוללים תמיכה ניסיונית, בדרך כלל מאחורי דגל הצטרפות ובשכבות כשיפור הדרגתי (progressive enhancement):

  • Emscripten משתף פלט Wasm שנוצר.
  • Flutter משתף את סביבת זמן הריצה של Skia Wasm.
  • ‫Transformers.js משתף את משקלי המודל ואת סביבות זמן הריצה של Wasm שהם תלויים בהן.
  • ‫WebLLM משתף מודלים וסביבות זמן ריצה.
  • ‫wllama משתף מודלים של AI.
  • ‫Nuxt.js טוען יחסי תלות משותפים מאחסון ממקורות שונים ומתחזק פלאגין Vite COS.
  • ‫Prompt API Polyfill משתף מודלים של AI בין הקצוות העורפיים של WebLLM ו-Transformers.js.
  • ל-Prebid.js יש הפצת CDN של ספריית הבידינג ב-header שמתאימה ל-COS.

תקנון

אחסון ממקורות שונים הוא הצעה בשלב מוקדם של WICG. אתם יכולים לקרוא את סקירת העיצוב המוקדמת של W3C TAG.

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

משאבים

בנוסף, כדאי לעיין בכלים ובהדגמות הבאים:

חומר רקע נוסף

שיחות ופודקאסטים