PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.0-beta
16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / _inc / lib / class.jetpack-search-performance-logger.php
jetpack / _inc / lib Last commit date
admin-pages 1 week ago core-api 2 days ago debugger 1 month ago markdown 7 months ago class-jetpack-ai-helper.php 4 months ago class-jetpack-application-password-extras.php 3 months ago class-jetpack-blog-stats-helper.php 7 months ago class-jetpack-currencies.php 1 year ago class-jetpack-instagram-gallery-helper.php 1 month ago class-jetpack-mapbox-helper.php 3 years ago class-jetpack-newsletter-category-helper.php 7 months ago class-jetpack-podcast-feed-locator.php 1 month ago class-jetpack-podcast-helper.php 5 months ago class-jetpack-recommendations.php 1 month ago class-jetpack-spinner.php 2 months ago class-jetpack-top-posts-helper.php 1 week ago class.color.php 1 year ago class.core-rest-api-endpoints.php 1 week ago class.jetpack-automatic-install-skin.php 2 years ago class.jetpack-iframe-embed.php 3 years ago class.jetpack-password-checker.php 7 months ago class.jetpack-search-performance-logger.php 4 years ago class.media-extractor.php 1 month ago class.media-summary.php 1 week ago class.media.php 7 months ago components.php 7 months ago debugger.php 1 month ago icalendar-reader.php 1 month ago markdown.php 7 months ago plans.php 4 years ago plugins.php 4 years ago tonesque.php 7 months ago widgets.php 3 months ago
class.jetpack-search-performance-logger.php
143 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2
3 /**
4 * Measure the performance of Jetpack Search queries.
5 */
6 class Jetpack_Search_Performance_Logger {
7 /**
8 * Jetpack_Search_Performance_Logger instance.
9 *
10 * @var null|Jetpack_Search_Performance_Logger
11 */
12 private static $instance = null;
13
14 /**
15 * WP_Query instance.
16 *
17 * @var null|WP_Query
18 */
19 private $current_query = null;
20
21 /**
22 * Time when the query was started.
23 *
24 * @var null|float
25 */
26 private $query_started = null;
27
28 /**
29 * Performance results.
30 *
31 * @var null|array
32 */
33 private $stats = null;
34
35 /**
36 * Initialize the class.
37 */
38 public static function init() {
39 if ( self::$instance === null ) {
40 self::$instance = new Jetpack_Search_Performance_Logger();
41 }
42
43 return self::$instance;
44 }
45
46 /**
47 * The constructor.
48 */
49 private function __construct() {
50 $this->stats = array();
51 add_action( 'pre_get_posts', array( $this, 'begin_log_query' ), 10, 1 );
52 add_action( 'did_jetpack_search_query', array( $this, 'log_jetpack_search_query' ) );
53 add_filter( 'found_posts', array( $this, 'log_mysql_query' ), 10, 2 );
54 add_action( 'wp_footer', array( $this, 'print_stats' ) );
55 }
56
57 /**
58 * Log the time when the query was started.
59 *
60 * @param WP_Query $query The query.
61 */
62 public function begin_log_query( $query ) {
63 if ( $this->should_log_query( $query ) ) {
64 $this->query_started = microtime( true );
65 $this->current_query = $query;
66 }
67 }
68
69 /**
70 * Record the time when an SQL query was completed.
71 *
72 * @param int $found_posts The number of posts found.
73 * @param WP_Query $query The WP_Query instance (passed by reference).
74 */
75 public function log_mysql_query( $found_posts, $query ) {
76 if ( $this->current_query === $query ) {
77 $duration = microtime( true ) - $this->query_started;
78 if ( $duration < 60 ) { // eliminate outliers, likely tracking errors.
79 $this->record_query_time( $duration, false );
80 }
81 $this->reset_query_state();
82 }
83
84 return $found_posts;
85 }
86
87 /**
88 * Log Jetpack Search query.
89 */
90 public function log_jetpack_search_query() {
91 $duration = microtime( true ) - $this->query_started;
92 if ( $duration < 60 ) { // eliminate outliers, likely tracking errors.
93 $this->record_query_time( $duration, true );
94 }
95 $this->reset_query_state();
96 }
97
98 /**
99 * Reset data after each log.
100 */
101 private function reset_query_state() {
102 $this->query_started = null;
103 $this->current_query = null;
104 }
105
106 /**
107 * Check if a query should be logged (a main query, or a jetpack search query).
108 *
109 * @param WP_Query $query The WP_Query instance.
110 */
111 private function should_log_query( $query ) {
112 return $query->is_main_query() && $query->is_search();
113 }
114
115 /**
116 * Record the time of a query.
117 *
118 * @param float $duration The duration of the query.
119 * @param bool $was_jetpack_search Was this a Jetpack Search query.
120 */
121 private function record_query_time( $duration, $was_jetpack_search ) {
122 $this->stats[] = array( $was_jetpack_search, (int) ( $duration * 1000 ) );
123 }
124
125 /**
126 * Print performance stats in the footer.
127 */
128 public function print_stats() {
129 $beacons = array();
130 if ( ! empty( $this->stats ) ) {
131 foreach ( $this->stats as $stat ) {
132 $search_type = $stat[0] ? 'es' : 'mysql';
133 $beacons[] = "%22jetpack.search.{$search_type}.duration:{$stat[1]}|ms%22";
134 }
135
136 $encoded_json = '{%22beacons%22:[' . implode( ',', $beacons ) . ']}';
137 $encoded_site_url = rawurlencode( site_url() );
138 $url = "https://pixel.wp.com/boom.gif?v=0.9&u={$encoded_site_url}&json={$encoded_json}";
139 echo '<img src="' . esc_url( $url ) . '" width="1" height="1" style="display:none;" alt=""/>';
140 }
141 }
142 }
143