معرفی Cross-Origin Storage API

تاریخ انتشار: ۱۰ نوامبر ۲۰۲۶

برنامه‌های وب مدرن اغلب به دارایی‌های بزرگ، مانند چارچوب‌های جاوا اسکریپت، موتورهای بازی، و مدل‌های هوش مصنوعی وابسته هستند. باوجود اینکه سایت‌ها از دارایی‌های یکسانی استفاده می‌کنند، هر سایت باید نسخه خودش را از هر دارایی بارگیری و ذخیره کند.

با Cross-Origin Storage API پیشنهادی (به‌اختصار COS)، مشتری محتوای موردنظرش را با درهم‌ساز آن مشخص می‌کند و آن را از هر نشانی وبی واکشی می‌کند تا در سایت‌های تعیین‌شده (یا همه سایت‌ها) هم‌رسانی کند. این یعنی منبع دقیق و شناخته‌شده‌ای را می‌توان در سایت‌ها هم‌رسانی کرد، مستقل از ارائه دارایی. این پیشنهاد مزایای امنیتی و چالش‌های ایمنی به‌همراه دارد.

موارد استفاده

ما به‌طور مفصل درباره اهمیت مدل‌های ذخیره‌سازی در حافظه نهان و ذخیره‌سازی هر دارایی در حافظه نهان با Cache Storage API نوشته‌ایم. Cross-Origin Storage API یک گام فراتر می‌رود و می‌تواند زمانی مفید باشد که چندین وب‌سایت مرتبط (یا غیرمرتبط) نیاز به دسترسی به یک منبع داشته باشند:

  • مدل‌های هوش مصنوعی: مدل‌هایی مانند Gemma یا گونه‌های Llama از حدود یک گیگابایت تا ده‌ها گیگابایت حجم دارند. ذخیره و بازیابی یک نسخه ازطریق COS از بارگیری‌های تکراری انبوه جلوگیری می‌کند. این انگیزه اصلی پشت این پیشنهاد است.
  • مدول‌های Wasm: چارچوب‌هایی مانند Flutter فایل‌های Wasm را ارسال می‌کنند که میلیون‌ها بار در روز در هزاران مبدأ متمایز درخواست می‌شوند و همیشه ازنظر بایت یکسان هستند.
  • چارچوب‌ها و کتابخانه‌های محبوب جاوا اسکریپت: دسته‌بندی کد فروشنده به‌طور جداگانه و به‌طور کامل (مانند کتابخانه کامل و بدون هرس React) به چندین برنامه اجازه می‌دهد یک نسخه ذخیره‌شده در حافظه نهان را ازطریق COS هم‌رسانی کنند.
  • موتورهای بازی: بازی‌های مرورگر ساخته‌شده روی موتورهایی مانند Godot یا Unity می‌توانند زمان اجرای موتور را ازطریق COS هم‌رسانی کنند و فقط دارایی‌های خاص بازی را ازطریق شبکه واکشی کنند. درگاه‌های بازی که میزبان بازی‌های تفننی زیادی در مبدأها یا iframeهای مختلف هستند بیشترین بهره را می‌برند.
  • قلم‌های وب بزرگ: قلم‌های نماد، قلم‌های اموجی، و قلم‌هایی با پوشش گسترده یونیکد در تعداد بسیار زیادی صفحه بارگیری می‌شوند. هم‌رسانی یک‌باره آن‌ها ازطریق COS هم به عملکرد و هم به پایداری کمک می‌کند.
دو بازی غیرمرتبط Three.js،‏ Descent و Quake، یک نسخه از موتور را ازطریق COS هم‌رسانی می‌کنند که در DevTools بازرسی شده است.
دو بازی غیرمرتبط Three.js، Descent (در برگه پس‌زمینه) و Quake (در برگه پیش‌زمینه)، یک نسخه از موتور را ازطریق COS به‌اشتراک می‌گذارند که در DevTools بازرسی شده است. این نماگرفت از ساخت آزمایشی Chromium است و ممکن است نشان‌دهنده طراحی نهایی نباشد.

جریان اصلی کار با COS

‫COS API روش navigator.crossOriginStorage.getFileHandle() را معرفی می‌کند که ازطریق آن برنامه‌های وب فایل‌ها را در مرزهای مبدأ ذخیره و بازیابی می‌کنند، که با درهم‌ساز رمزنگاری شناسایی می‌شود. این توضیح‌دهنده مثالی دارد که جریان اصلی کار با API را نشان می‌دهد.

همین امروز امتحان کنید

درحال‌حاضر دو روش برای آزمایش کردن COS وجود دارد:

  • افزونه مرورگر را از نت‌بازار Chrome، برافزاهای Firefox، یا فروشگاه برنامه‌های Safari نصب کنید تا سطح API و همه ادغام‌ها را شبیه‌سازی کند. می‌توانید جریان API را در هر مرورگری آزمایش کنید. یا افزونه را به‌صورت ازبسته‌درآمده از کد منبع آن بار کنید.
  • آزمایش در Chromium: پیاده‌سازی آزمایشی Chromium وجود دارد. آن را برای macOS در Apple silicon یا Linux x86_64 از goo.gle/cos-chromium بارگیری کنید، سپس about://flags را باز کنید، «Cross-Origin Storage» (فضای ذخیره‌سازی میان‌مبدئی) را جستجو کنید، آن را روی Enabled (فعال) تنظیم کنید، و وقتی از شما خواسته شد، بازراه‌اندازی کنید. این ساخت شامل یکپارچه‌سازی DevTools است: فضای ذخیره‌سازی میان‌مبدئی را در برگه برنامه پیدا کنید.

علاقه به بوم‌سازگان

COS پیشنهادی در مراحل اولیه است و تعدادی از پروژه‌ها درحال‌حاضر پشتیبانی آزمایشی را ارائه می‌دهند، معمولاً پشت پرچم موافقت و به‌صورت لایه‌ای به‌عنوان ارتقای پیش‌رو:

  • Emscripten برونداد Wasm تولیدشده را هم‌رسانی می‌کند.
  • Flutter زمان اجرای Skia Wasm خود را هم‌رسانی می‌کند.
  • Transformers.js وزن‌های مدل و زمان‌های اجرای Wasm را که به آن‌ها وابسته است هم‌رسانی می‌کند.
  • WebLLM مدل‌ها و زمان‌های اجرا را هم‌رسانی می‌کند.
  • wllama مدل‌های هوش مصنوعی را هم‌رسانی می‌کند.
  • Nuxt.js وابستگی‌های مشترک را از «فضای ذخیره‌سازی میان‌مبدئی» بار می‌کند و افزونه Vite COS را حفظ می‌کند.
  • Prompt API Polyfill مدل‌های هوش مصنوعی را در میان باطن‌های WebLLM و Transformers.js خود هم‌رسانی می‌کند.
  • Prebid.js دارای توزیع CDN آماده COS از کتابخانه پیش‌مناقصه است.

استانداردسازی

«فضای ذخیره‌سازی میان‌مبدئی» یک پیشنهاد WICG در مراحل اولیه است. می‌توانید بازبینی طراحی TAG‏ W3C اولیه را بخوانید.

از بازخورد درباره API و پیشنهاد استقبال می‌کنیم. می‌توانید مشکلات را ثبت کنید، حمایت خود را نشان دهید، یا درخواست‌های واکشی را در مخزن «فضای ذخیره‌سازی میان‌مبدئی» باز کنید.

منابع

به‌علاوه، این ابزارها و نسخه‌های نمایشی را بررسی کنید:

مطالعه بیشتر درباره پیشینه

گفتگوها و پادکست‌ها