وقتی میلی ثانیه کافی نیست - performance.now

تایمر با وضوح بالا توسط گروه کاری WebPerf اضافه شده است تا اندازه گیری در پلتفرم وب دقیق تر از آنچه با +new Date و جدیدتر Date.now() داشته باشیم، اضافه شده است.

بنابراین فقط برای مقایسه، در اینجا انواع مقادیری وجود دارد که می‌توانید به آنها برگردید:

Date.now()         //  1337376068250
performance.now()  //  20303.427000007

متوجه خواهید شد که دو مقدار بالا مرتبه های زیادی متفاوت هستند. performance.now() اندازه گیری میلی ثانیه ممیز شناور است از زمانی که آن صفحه خاص شروع به بارگیری کرده است ( performance.timing.[navigationStart](https://www.w3.org/TR/navigation-timing/#dom-performancetiming-navigationstart) timeStamp به طور خاص). می‌توانید استدلال کنید که این تعداد میلی‌ثانیه‌ها از زمان یونیکس می‌توانست باشد، اما به ندرت یک برنامه وب نیاز به دانستن فاصله بین اکنون تا 1970 دارد. این عدد نسبت به صفحه باقی می‌ماند زیرا دو یا چند اندازه‌گیری را با هم مقایسه خواهید کرد. در برابر یکدیگر

زمان یکنواخت

یکی دیگر از مزایای اضافه شده در اینجا این است که می توانید به یکنواخت بودن زمان تکیه کنید. اجازه دهید مهندس WebKit تونی جنتیلکور این مورد را توضیح دهد:

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

چند موقعیت وجود دارد که می‌توانید از این تایمر با وضوح بالا به جای گرفتن یک مهر زمانی اولیه استفاده کنید:

  • محک زدن
  • کد رانلوپ بازی یا انیمیشن
  • محاسبه نرخ فریم با دقت
  • کنش‌های نشانه‌ای یا صوتی که در نقاط خاصی از یک انیمیشن یا سایر سکانس‌های مبتنی بر زمان رخ می‌دهند

در دسترس بودن

تایمر با وضوح بالا در حال حاضر در Chrome (Stable) به‌عنوان window.performance.webkitNow() موجود است، و این مقدار معمولاً برابر است با مقدار آرگومان جدید ارسال شده به درخواست‌AnimationFrame . خیلی زود، WebKit پیشوند خود را حذف خواهد کرد و این پیشوند از طریق performance.now() در دسترس خواهد بود. WebPerfWG به طور خاص، به رهبری Jatinder Mann از مایکروسافت، در حذف سریع ویژگی های خود بسیار موفق بوده است .

به طور خلاصه، performance.now() ...

  • دو برابر با میکروثانیه در کسری
  • نسبت به navigationStart صفحه به جای دوره یونیکس
  • وقتی زمان سیستم تغییر می کند، کج نمی شود
  • در Chrome stable، Firefox 15+ و IE10 موجود است.