[wp-trac] [WordPress Trac] #39163: Use REQUEST_TIME_FLOAT for timing

WordPress Trac noreply at wordpress.org
Wed Dec 7 21:09:55 UTC 2016

#39163: Use REQUEST_TIME_FLOAT for timing
 Reporter:  andy            |      Owner:
     Type:  defect (bug)    |     Status:  new
 Priority:  normal          |  Milestone:  Awaiting Review
Component:  Bootstrap/Load  |    Version:  trunk
 Severity:  normal          |   Keywords:
  Focuses:  performance     |
 > The timestamp of the start of the request, with microsecond precision.
 Available since PHP 5.4.0.

 Related: #26874 timer_stop() returns a string, not a float

 WordPress should expose timing data as a float in the most accurate manner
 possible. `timer_stop()` has two problems: it uses an initial timestamp
 generated later than it needs to be (50ms late is what I have seen most
 often), and its formatted return value can not reliably be used as a
 number (some locales swap commas and periods, for example).

 As `timer_stop()` is a well-established formatting function, a new
 function is needed for getting the raw data. The new `timer_float()` will
 simply `return microtime( true ) - $_SERVER['REQUEST_TIME_FLOAT'];`. For
 compatibility with PHP < 5.4, the initial value is conditionally set at
 the top of load.php. This is all I've done in small.diff, leaving
 `timer_stop()` alone.

 My goal for this ticket is to get `timer_float()` in core so we can start
 using it for accurate and reliable timing data to support efforts to
 manage and improve performance. I don't really care whether any changes
 are made to `timer_start()` and `timer_stop()`. However, I included them
 in patches to save time just in case we want them updated.

 medium.diff changes `timer_start()` to use `REQUEST_TIME_FLOAT`. This will
 make measurements more accurate without changing any other semantics.

 large.diff bypasses `timer_start()` and automatically starts the timer as
 soon as possible, i.e. at the top of load.php. This patch tags
 `timer_start()` as deprecated but we should not move it to deprecated.php
 because drop-ins might expect `timer_start()` to exist, as might any
 auxiliary scripts that directly include load.php. (I am not familiar with
 deprecation strategy generally so I expect feedback on this.) The legacy
 globals, `$timestart` and its cousin that hopefully nobody ever used,
 `$timeend`, are both supported in this patch. (I think they should be
 deprecated as soon as we bump to 5.4.)

Ticket URL: <https://core.trac.wordpress.org/ticket/39163>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform

More information about the wp-trac mailing list