Thanks for the context! To that point - do you know if optimising Date has ever been a topic of conversation? I'm curious if it's just impossible/very hard or just never been a priority.
On Monday, 8 June 2020 16:18:10 UTC+1, Jakob Kummerow wrote: > > Due to how complicated <https://tc39.es/ecma262/#sec-date-constructor> > the Date constructor is, it is expected to be much slower than allocating > an object. Beyond the sheer amount of stuff it has to do per spec, this is > amplified by the fact that the more complicated (and the less frequently > performed) an operation is, the more likely engines are to implement it in > a slower (but more manageable) fashion. Specifically, object allocation has > all sorts of fast paths like inlining in optimized code, which new > Date(...) doesn't have. > > > On Mon, Jun 8, 2020 at 11:38 AM Paweł Badeński <pawel....@gmail.com > <javascript:>> wrote: > >> That's all fair enough. Shouldn't then constructing via some constructors >> be faster - where it doesn't require operating system call? Because I'm >> still seeing rather slow calls.. >> >> new Date(1591386221897) x 9,329,719 ops/sec ±2.66% (64 runs sampled) >> >> new Date(2019, 1, 1, 12, 0, 1, 1) x 2,636,300 ops/sec ±0.83% (65 runs >> sampled) >> >> Date.UTC(2019, 1, 1, 12, 0, 1, 1) x 11,741,842 ops/sec ±0.79% (65 runs >> sampled) >> >> >> Source: https://stackblitz.com/edit/js-dvq8ri >> >> On Friday, 5 June 2020 20:14:02 UTC+1, Jakob Kummerow wrote: >>> >>> Yes, getting the current time from the operating system is significantly >>> slower than allocating a simple JS object like [1, 2, 3]. That's not >>> going to change. >>> >>> As you can see, Date.now() is significantly faster than new Date(), so >>> that's preferable when performance/overhead matters. Other than that, I'd >>> simply recommend not to call either function overly often -- they have >>> millisecond resolution, so calling them very frequently just means that >>> you'll get the same values back repeatedly. >>> >>> In particular, I've seen folks try to get profiling data by calling >>> Date.now() before and after each function call. For small functions, >>> that's not a good idea, because you'll mostly be measuring the overhead of >>> the Date.now() calls themselves. When you need to profile, use a >>> profiler. (I've seen microbenchmarks where profiling revealed that half the >>> time was spent in Date.now() calls!) >>> >>> If you want to perform some cheap action repeatedly before a timer runs >>> out, it can help to have a double loop, e.g.: >>> >>> while (Date.now() < deadline) { >>> // Try a bunch of times, not just once. >>> for (let i = 0; i < 1000; i++) { >>> very_quick_thing(); >>> } >>> } >>> >>> Tune the 1000 in the example until you see that the for-loop takes >>> about a millisecond to finish (if it's accurate to an order of magnitude, >>> i.e. between 0.1 and 10ms, that's good enough, and gives you some >>> robustness towards hardware differences). >>> >>> >>> On Fri, Jun 5, 2020 at 9:02 PM Al Mo <almo...@gmail.com> wrote: >>> >>>> [Warning. mere speculation] >>>> >>>> Perhaps it has to do with having to make a system call to get the >>>> current time. >>>> >>>> Alex. >>>> >>>> On Fri, Jun 5, 2020 at 1:57 PM Paweł Badeński <pawel....@gmail.com> >>>> wrote: >>>> >>>>> Hi, >>>>> >>>>> Wondering if someone can help with a bit of context to satisfy mu >>>>> curiosity! :D >>>>> >>>>> We are using Date.now & new Date quite a bit in our application >>>>> (financial domain). I run a few micro-benchmarks and was wondering why do >>>>> these report being relatively slow (as compared to construction of other >>>>> objects). In fact all Date methods seem rather slow. Am I having wrong >>>>> expectations for these to be faster? Are they as fast as they could be, >>>>> or >>>>> is it that Date just never got enough love in terms of performance >>>>> optimizations? Really curious to get more color on this! >>>>> >>>>> Benchmarks: >>>>> >>>>> Date.now() x 9,454,436 ops/sec ±1.09% (65 runs sampled) >>>>> >>>>> new Date() x 5,594,688 ops/sec ±1.87% (64 runs sampled) >>>>> >>>>> [1, 2, 3] x 124,719,052 ops/sec ±0.90% (64 runs sampled) >>>>> >>>>> { a: 1, b: 2, c: 3 } x 112,368,878 ops/sec ±0.83% (65 runs sampled) >>>>> >>>>> new Object({ a: 1, b: 2, c: 3 }) x 32,547,566 ops/sec ±0.64% (64 runs >>>>> sampled) >>>>> >>>>> Source: https://stackblitz.com/edit/js-dvq8ri >>>>> >>>>> Thanks! >>>>> Pawel >>>>> >>>>> -- >>>>> -- >>>> >>>> -- -- v8-users mailing list v8-users@googlegroups.com http://groups.google.com/group/v8-users --- You received this message because you are subscribed to the Google Groups "v8-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/v8-users/5937ddba-e8f2-40c7-90f9-99f09578ccf9o%40googlegroups.com.