PluginProbe
xSpeed Cache: AI-Powered Performance Hub with MCP, Caching & CDN / 1.3.7
xSpeed Cache: AI-Powered Performance Hub with MCP, Caching & CDN v1.3.7
1.3.7 1.3.6 1.3.5 1.3.4 1.3.3 1.3.2 1.3.1 1.3.0 1.2.4 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 All 33 releases
← All changes | includes/modules/Minify/MinifyModule.php +29 -24 1.3.6 → 1.3.7 View file →
@@ -34,9 +34,10 @@
34 34 return array(
35 35 'label' => __( 'CSS & JavaScript', 'xspeed' ),
36 36 'tab_label' => __( 'Minify', 'xspeed' ), // its own tab on the CSS & JavaScript page
37 37 'icon' => 'Wand2',
38 - 'description' => __( 'Strip whitespace and rewrite enqueued CSS / JS.', 'xspeed' ),
38 + 'description' => __( 'Makes HTML, CSS and JavaScript files smaller and loads scripts later.', 'xspeed' ),
39 + 'group' => 'performance',
39 40 // Host page: Minify (this module) / Critical CSS (Pro) / Unused
40 41 // CSS (Pro) as tabs — the three CSS/JS optimizations live on one
41 42 // page instead of three sidebar rows (FBS-83633).
42 43 'custom_panel' => 'CssJsPanel',
@@ -52,52 +53,53 @@
52 53 // Names the logged-out caveat up front: minification runs on the
53 54 // request that WRITES a cache entry, and should_cache() refuses
54 55 // logged-in requests — so "view source while logged in" shows
55 56 // un-minified HTML and reads as the feature being broken. (#2)
56 - 'description' => __( 'Strip whitespace and comments from HTML output, including inline <style> and <script> blocks. Safe on most themes. Applies to cached (logged-out) responses — view the page in a private window to see the result.', 'xspeed' ),
57 + 'description' => __( 'Removes spaces and comments from your pages. Safe on most themes. Only logged-out visitors see it, so check in a private window.', 'xspeed' ),
57 58 ),
58 59 'minify_css' => array(
59 60 'type' => 'bool',
60 61 'default' => false,
61 62 'label' => __( 'Minify CSS', 'xspeed' ),
62 - 'description' => __( 'Compress and rewrite enqueued local stylesheets. External CSS is left untouched.', 'xspeed' ),
63 + 'description' => __( 'Makes your site\'s own CSS files smaller. CSS from other domains is left alone.', 'xspeed' ),
63 64 ),
64 65 'minify_js' => array(
65 66 'type' => 'bool',
66 67 'default' => false,
67 68 'label' => __( 'Minify JavaScript', 'xspeed' ),
68 - 'description' => __( 'Compress enqueued local scripts. Disable if you hit script-loading conflicts on the frontend.', 'xspeed' ),
69 + 'description' => __( 'Makes your site\'s own JavaScript files smaller. Turn off if a script on your site stops working.', 'xspeed' ),
69 70 ),
70 71 'defer_js' => array(
71 72 'type' => 'bool',
72 73 'default' => false,
73 74 'label' => __( 'Defer JavaScript', 'xspeed' ),
74 - 'description' => __( 'Add defer="defer" to enqueued script tags so they execute after HTML parsing. jQuery + its hard dependencies are skipped automatically.', 'xspeed' ),
75 + 'description' => __( 'Runs scripts after the page has loaded, so content shows sooner. jQuery and scripts that need it are skipped.', 'xspeed' ),
75 76 ),
76 77 'delay_js' => array(
77 78 'type' => 'bool',
78 79 'default' => false,
79 - 'label' => __( 'Delay JavaScript Until Interaction', 'xspeed' ),
80 - 'description' => __( 'Postpone script loading until the visitor scrolls, moves the mouse, taps, or presses a key. Drastically improves first paint on script-heavy pages; can break above-the-fold scripted UI — test before leaving on. Cookie-consent banners (CookieYes, Complianz, Cookiebot, NotificationX, Cookie Notice, Borlabs, Real Cookie Banner and others) are not delayed, so the visitor is still asked before anything else runs. To delay one on purpose, name it in Delay Only These Scripts.', 'xspeed' ),
80 + 'label' => __( 'Delay JavaScript', 'xspeed' ),
81 + 'description' => __( 'Scripts load only when the visitor scrolls, taps or types. Pages show much sooner, but test menus and sliders. Cookie consent banners still load first.', 'xspeed' ),
81 82 ),
82 83 'async_css' => array(
83 84 'type' => 'bool',
84 85 'default' => false,
85 - 'label' => __( 'Load CSS Asynchronously', 'xspeed' ),
86 - 'description' => __( 'Rewrite stylesheet link tags to load non-blocking via the print-then-all pattern. Pairs well with critical-CSS workflows; can cause a flash of unstyled content if the theme has no critical CSS.', 'xspeed' ),
86 + 'label' => __( 'Load CSS without blocking', 'xspeed' ),
87 + 'description' => __( 'On pages that have critical CSS, the page shows before the rest of its CSS finishes loading. Pages without critical CSS keep loading their CSS normally, because deferring it makes the page show unstyled and then jump.', 'xspeed' ),
87 88 ),
88 89 'remove_query_strings' => array(
89 90 'type' => 'bool',
90 91 'default' => false,
91 - 'label' => __( 'Remove Asset Query Strings', 'xspeed' ),
92 - 'description' => __( 'Strip ?ver=X.Y from enqueued CSS / JS URLs. Some CDN caches and proxies cache better when query strings are absent. Files under wp-content/uploads keep their version — page builders and consent plugins rewrite generated CSS there in place, and ?ver is what tells browsers to refetch it. Plugin, theme and core assets are still stripped: with Browser Cache on, an update reaches returning visitors only when their browser cache expires.', 'xspeed' ),
92 + 'label' => __( 'Remove version from file URLs', 'xspeed' ),
93 + 'description' => __( 'Removes ?ver= from CSS and JS links, which some CDNs cache better. After a plugin update, returning visitors may keep old files until their browser cache expires.', 'xspeed' ),
94 + 'advanced' => true,
93 95 ),
94 96 'defer_js_excluded' => array(
95 97 'type' => 'list',
96 98 'default' => array( 'jquery-core', 'jquery-migrate' ),
97 99 'item_type' => 'string',
98 - 'label' => __( 'Defer / Delay Exclusions', 'xspeed' ),
99 - 'description' => __( 'Script handles OR URL substrings that skip defer + delay. Defaults exclude jQuery (most themes depend on it being available synchronously). Cookie-consent banners are skipped without being listed here. An entry here also wins over the same script in Delay Only These Scripts. One per line.', 'xspeed' ),
100 + 'label' => __( 'Scripts to never defer or delay', 'xspeed' ),
101 + 'description' => __( 'Script handles or parts of script URLs, one per line. jQuery is listed because most themes need it early; cookie consent banners are skipped on their own.', 'xspeed' ),
100 102 // Only relevant once defer OR delay is on — the exclusion list
101 103 // governs both. Uses the `any` (OR) dependency form. (FBS-82227)
102 104 'dependsOn' => array(
103 105 'any' => array(
@@ -109,14 +111,14 @@
109 111 'delay_js_targets' => array(
110 112 'type' => 'list',
111 113 'default' => array(),
112 114 'item_type' => 'string',
113 - 'label' => __( 'Delay Only These Scripts', 'xspeed' ),
114 - 'description' => __( 'Script handles OR URL substrings. When non-empty, matching scripts are delayed, plus the known third-party tags xSpeed recognises on its own (analytics, tag managers, chat widgets, review embeds, error trackers) — so a heavy vendor script is postponed even when it is not listed here. Leave empty to delay all scripts (minus the exclusions above). Handles are the more reliable selector — a URL substring has to match the script\'s original URL, and minification rewrites that to a hashed cache path. Cookie-consent banners are only delayed when an entry names one, for example notificationx or cookiebot. A broad entry such as /plugins/ does not delay them. One per line.', 'xspeed' ),
115 + 'label' => __( 'Delay only these scripts', 'xspeed' ),
116 + 'description' => __( 'Script handles or parts of script URLs, one per line. Leave empty to delay all scripts; otherwise only these, plus known trackers and chat widgets, are delayed.', 'xspeed' ),
115 117 'info_title' => __( 'Consent banners and Delay JS', 'xspeed' ),
116 118 'info' => sprintf(
117 119 /* translators: %s: comma-separated list of consent plugins, each followed by the word to type in parentheses. */
118 - __( 'These consent banners load straight away, even with Delay JS on: %s. To delay one on purpose, add the word in parentheses, or the script handle, to this list. An entry that only matches part of the address, such as /plugins/ or .js, never delays a banner, and an entry in Defer / Delay Exclusions always wins.', 'xspeed' ),
120 + __( 'These consent banners load straight away, even with Delay JS on: %s. To delay one on purpose, add the word in parentheses, or the script handle, to this list. An entry that only matches part of the address, such as /plugins/ or .js, never delays a banner, and an entry in Scripts to never defer or delay always wins.', 'xspeed' ),
119 121 implode( ', ', Minify_Filters::consent_manager_labels() )
120 122 ),
121 123 'dependsOn' => array( 'field' => 'delay_js' ),
122 124 ),
@@ -122,10 +124,10 @@
122 124 ),
123 125 'delay_js_smart' => array(
124 126 'type' => 'bool',
125 127 'default' => false,
126 - 'label' => __( 'Smart Delay (Carry Inline Snippets)', 'xspeed' ),
127 - 'description' => __( 'Normally a script is left running at load when inline code on the page depends on it — on builder pages that keeps most scripts eager even with Delay JavaScript on. Smart Delay postpones those scripts anyway and parks their inline snippets with them; everything replays in page order on the first interaction. The most aggressive setting on this page: test menus, sliders, and toggles before leaving it on. Exclusions above still win, and consent banners still run first.', 'xspeed' ),
128 + 'label' => __( 'Smart delay', 'xspeed' ),
129 + 'description' => __( 'Also delays scripts that code on the page depends on, which helps page builder sites most. The riskiest setting here, so test menus and sliders.', 'xspeed' ),
128 130 'dependsOn' => array( 'field' => 'delay_js' ),
129 131 ),
130 132 'delay_js_timeout' => array(
131 133 'type' => 'int',
@@ -131,24 +133,27 @@
131 133 'type' => 'int',
132 134 'default' => 8000,
133 135 'min' => 0,
134 136 'max' => 60000,
135 - 'label' => __( 'Delay Failsafe Timeout (ms)', 'xspeed' ),
137 + 'label' => __( 'Delay timeout (ms)', 'xspeed' ),
136 138 'unit' => 'ms',
137 - 'description' => __( 'Load delayed scripts automatically after this many milliseconds when the visitor never interacts. Set to 0 for interaction-only, with no timer: a timer that fires inside a lab tool\'s measurement window loads the "delayed" scripts anyway and inflates the reported TTI. Keep a non-zero value if a delayed script must eventually run for visitors who never scroll, tap, or type.', 'xspeed' ),
139 + 'description' => __( 'Load delayed scripts after this long if the visitor does nothing. Set 0 to wait for a scroll, tap or key press only.', 'xspeed' ),
140 + 'advanced' => true,
138 141 'dependsOn' => array( 'field' => 'delay_js' ),
139 142 ),
140 143 'combine_css' => array(
141 144 'type' => 'bool',
142 145 'default' => false,
143 - 'label' => __( 'Combine CSS Files', 'xspeed' ),
144 - 'description' => __( 'Concatenate enqueued local stylesheets into a single file (with @import and url(…) paths resolved). External CSS is left alone. Pairs poorly with HTTP/2 push — only enable on HTTP/1.1 hosts.', 'xspeed' ),
146 + 'label' => __( 'Combine CSS files', 'xspeed' ),
147 + 'description' => __( 'Joins your site\'s own CSS files into one. This helps only on old HTTP/1.1 servers, so leave it off on most hosts.', 'xspeed' ),
148 + 'advanced' => true,
145 149 ),
146 150 'combine_js' => array(
147 151 'type' => 'bool',
148 152 'default' => false,
149 - 'label' => __( 'Combine JavaScript Files', 'xspeed' ),
150 - 'description' => __( 'Concatenate enqueued local scripts into a single file. External scripts + scripts marked async / deferred are left alone. Disable if you hit dependency-order issues; the combiner respects WordPress enqueue order but inline scripts attached via wp_add_inline_script can shift behavior.', 'xspeed' ),
153 + 'label' => __( 'Combine JavaScript files', 'xspeed' ),
154 + 'description' => __( 'Joins your site\'s own scripts into one file. Turn off if a script stops working after you enable it.', 'xspeed' ),
155 + 'advanced' => true,
151 156 ),
152 157 );
153 158 }
154 159