قبل از نسخه 91، وضوح تایمر در کروم به 5 میکروثانیه در دسکتاپ محدود میشد، جایی که انزوا سایت فعال است، و به 100 میکروثانیه در Android، در جایی که غیر فعال است.
از نسخه 91، به دنبال تغییر مشخصات ، Chrome وضوح تایمرهای صریح ( performance.now()
، performance.timeOrigin
، و سایر APIهای عملکردی که DOMHighResTimestamps
در معرض نمایش میگذارند) را به 100 میکروثانیه در سراسر پلتفرمها محدود میکند. با فعال کردن جداسازی منبع متقابل ، وب سایت ها می توانند بدون توجه به پلتفرم، محدودیت را تا 5 میکروثانیه کاهش دهند.
به دست آوردن قابلیتهای قدرتمندتر با فعال کردن جداسازی متقاطع، رویکرد مشابهی است که در SharedArrayBuffer
ارائه شده است . جداسازی از مبدأ متقاطع حالتی است که در آن یک صفحه وب از مبداهای دیگری به جز مواردی که شرکت کردهاند جدا میشود.
آیا لازم است کاری در مورد آن انجام دهم؟
احتمالا نه. performance.now()
در مرورگرهای دیگر به رزولوشن های بسیار درشت تر محدود شده است (مثلاً 1 میلی ثانیه = 0.001 ثانیه)، بنابراین به هر حال نباید به وضوح فعلی تکیه می کردید.
در عین حال، اگر می خواهید از وضوح بالاتری برای تایمرهای خود بهره مند شوید، به عنوان مثال برای اندازه گیری عملکرد دقیق تر، باید مطمئن شوید که سایت شما از مبدا متقاطع جدا شده است. این به شما وضوح بهتری را هم در کروم و سایر مرورگرهای مبتنی بر Chromium و همچنین Firefox ارائه می دهد.
تایمرها چه ربطی به جداسازی مبدا متقاطع دارند؟
هنگامی که Spectre کشف شد، فروشندگان مرورگر تصمیم گرفتند تایمرها را به وضوح بیشتر (و همچنین در دسترس بودن SharedArrayBuffers که می تواند به عنوان تایمر ضمنی استفاده شود) محدود کنند. این به این دلیل است که Spectre و حملات اجرایی مشابه، برای اندازهگیری زمان انجام عملیات خاص، و سپس حدس زدن محتویات حافظه فرآیند، به تایمرها متکی هستند.
در حالی که حملات اعدام گمانه زنی را می توان با تایمرهای درشت اجرا کرد، تایمرهای با وضوح بالا می توانند سرعت آنها را افزایش دهند. Chrome از معماری جداسازی سایت و همچنین مکانیسمهای دیگر برای کاهش خطر استفاده کرد و آن قابلیتها را دوباره فعال کرد، اما فقط به پلتفرمهای دسکتاپ و مرورگرهای Chromium محدود میشود. داشتن API با تکیه بر معماری زیربنایی مرورگر واقعا ایده آل نیست.
جداسازی با مبدأ متقاطع، خط پایه استانداردی را برای مرورگرها فراهم می کند تا صفحات را در یک محیط ایزوله اجرا کنند، به گونه ای که قادر به بارگیری منابع متقاطع ناخواسته نیستند، و بنابراین، برای Spectre در معرض خطر نیستند. با جداسازی مبدأ متقاطع، اکنون میتوانیم به صفحات اجازه دسترسی به تایمرهای با وضوح بالا، SharedArrayBuffer
و سایر APIهایی را بدهیم که برای افشای آنها در فرآیندهایی که میتوانند دادههای متقاطع دلخواه را بخوانند، غیرایمن هستند.
برای کسب اطلاعات بیشتر در مورد پسزمینه این تغییر، بخوانید چرا برای ویژگیهای قدرتمند به «منشا متقاطع جدا شده» نیاز دارید .
عکس روی جلد توسط لیندا پرز یوهانسن در Unsplash .