Changeset 2675058
- Timestamp:
- 02/08/2022 01:51:23 PM (4 years ago)
- Location:
- better-speed
- Files:
-
- 7 edited
-
assets/banner-1544x500.png (modified) (previous)
-
assets/banner-772x250.png (modified) (previous)
-
assets/icon-36x36.png (modified) (previous)
-
trunk/better-speed.php (modified) (32 diffs)
-
trunk/header.png (modified) (previous)
-
trunk/instant.page.min.js (modified) (1 diff)
-
trunk/readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
better-speed/trunk/better-speed.php
r2208874 r2675058 1 1 <?php 2 2 /* 3 Plugin Name: Better Speed4 Description: Improve the loading speed of your website by removing bloat and unused features 5 Version: 1.26 Author: Better Security7 Author URI: https:// bettersecurity.co3 Plugin Name: Why So Slow? 4 Description: Improve the loading speed of your website by removing bloat and unused features <em>(formerly named <strong>Better Speed</strong>)</em> 5 Version: 2.0 6 Author: Why So Slow? 7 Author URI: https://whysoslow.co.uk 8 8 License: GPL3 9 9 License URI: https://www.gnu.org/licenses/gpl-3.0.en.html 10 Text Domain: better-speed-text10 Text Domain: whysoslow 11 11 Domain Path: /languages 12 12 */ … … 31 31 */ 32 32 33 function better_speed_timing_desc($type,$name,$diff) { 34 if($name) { 35 $name = str_replace(' ','_',$name); 36 return $name . ';dur=' . $diff*1000 . ';desc=' . $type . '_' . $name; 37 } 38 return $type . ';dur=' . $diff*1000 . ';desc=' . $type; 39 } 40 41 function better_speed_plugin_loaded($plugin) { 42 if(better_speed_check_other_setting('others-timings')) { 43 $timestamp = get_option('better_speed_plugin_loaded'); 44 $timediff = ($timestamp ? microtime(true) - $timestamp : false); 45 update_option('better_speed_plugin_loaded',microtime(true)); 46 add_action('after_setup_theme', 'better_speed_after_setup_theme', 0); 47 add_action('shutdown', 'better_speed_shutdown', 0); 48 } 49 } 50 add_action('setup_theme', 'better_speed_setup_theme', 0); 51 52 function better_speed_setup_theme() { 53 if(better_speed_check_other_setting('others-timings')) { 54 update_option('better_speed_setup_theme',microtime(true)); 55 add_action('after_setup_theme', 'better_speed_after_setup_theme', 0); 56 add_action('shutdown', 'better_speed_shutdown', 0); 57 } 58 } 59 add_action('setup_theme', 'better_speed_setup_theme', 0); 60 61 function better_speed_after_setup_theme() { 62 $timediff = microtime(true) - get_option('better_speed_setup_theme'); 63 @header('Server-Timing: ' . better_speed_timing_desc('Theme',get_stylesheet(),$timediff), false); 64 } 65 33 66 function better_speed_shutdown() { 34 67 global $timestart; 35 68 $timediff = microtime(true) - $timestart; 36 @header('Server-Timing: Wordpress;dur=' . $timediff*1000); 37 } 38 add_action('shutdown', 'better_speed_shutdown', 0); 69 @header('Server-Timing: ' . better_speed_timing_desc('WordPress',false,$timediff), false); 70 } 39 71 40 72 /* … … 152 184 add_filter('rest_authentication_errors', function($result) { 153 185 if(empty($result) && !is_admin()) { 154 return new WP_Error('rest_authentication_error', __('Forbidden', ' better-speed-text'), array('status' => 403));186 return new WP_Error('rest_authentication_error', __('Forbidden', 'whysoslow'), array('status' => 403)); 155 187 } 156 188 return $result; … … 163 195 wp_dequeue_style('wp-block-library'); 164 196 }, 100); 197 } 198 199 //Revisions 200 if(better_speed_check_setting('revisions')) { 201 add_action('wp_loaded', function() { 202 $post_types = get_post_types(array('public' => true), 'names'); 203 if(!empty($post_types)) { 204 foreach($post_types as $post_type) { 205 if(post_type_supports($post_type, 'revisions')) { 206 remove_post_type_support($post_type, 'revisions'); 207 } 208 } 209 } 210 }); 165 211 } 166 212 … … 173 219 add_action('template_redirect', function() { 174 220 if(is_comment_feed()) { 175 wp_die(__('Comments are disabled.', ' better-speed-text'), '', array('response' => 403));221 wp_die(__('Comments are disabled.', 'whysoslow'), '', array('response' => 403)); 176 222 } 177 223 }, 9); … … 211 257 remove_submenu_page('options-general.php', 'options-discussion.php'); 212 258 if($pagenow == 'comment.php' || $pagenow == 'edit-comments.php') { 213 wp_die(__('Comments are disabled.', ' better-speed-text'), '', array('response' => 403));259 wp_die(__('Comments are disabled.', 'whysoslow'), '', array('response' => 403)); 214 260 } 215 261 if($pagenow == 'options-discussion.php') { 216 wp_die(__('Comments are disabled.', ' better-speed-text'), '', array('response' => 403));262 wp_die(__('Comments are disabled.', 'whysoslow'), '', array('response' => 403)); 217 263 } 218 264 }, 9999); … … 288 334 add_filter('script_loader_tag', 'better_speed_defer_scripts', 10, 3); 289 335 336 function better_speed_body_class( $classes ) { 337 if(better_speed_check_other_setting('instant-page')) { 338 $value = better_speed_get_other_setting('instant-intensity') ?: 'default'; 339 if($value!=='default') { 340 echo ' data-instant-intensity="' . $value . '" '; 341 } 342 if(better_speed_check_other_setting('instant-external')) { 343 echo ' data-instant-allow-external-links '; 344 } 345 } 346 return $classes; 347 } 348 add_filter( 'body_class', 'better_speed_body_class' ); 349 290 350 /* 291 351 ----------------------------- Settings ------------------------------ … … 304 364 } 305 365 366 //check checkbox setting 367 function better_speed_get_other_setting($suffix) { 368 $settings = get_option('better-speed-settings'); 369 return (isset($settings['better-speed-' . $suffix]) ? $settings['better-speed-' . $suffix] : ""); 370 } 371 306 372 //add settings page 307 373 function better_speed_menus() { 308 add_options_page(__(' Better Speed','better-speed-text'), __('Better Speed','better-speed-text'), 'manage_options', 'better-speed-settings', 'better_speed_show_settings');374 add_options_page(__('Why So Slow?','whysoslow'), __('Why So Slow?','whysoslow'), 'manage_options', 'better-speed-settings', 'better_speed_show_settings'); 309 375 } 310 376 … … 313 379 register_setting('better-speed','better-speed-settings'); 314 380 315 add_settings_section('better-speed-section-features', __('Disable Features', 'better-speed-text'), 'better_speed_section_features', 'better-speed'); 316 add_settings_field('better-speed-features-emojis', __('Emojis', 'better-speed-text'), 'better_speed_features_emojis', 'better-speed', 'better-speed-section-features'); 317 add_settings_field('better-speed-features-embed', __('Embed Objects', 'better-speed-text'), 'better_speed_features_embed', 'better-speed', 'better-speed-section-features'); 318 add_settings_field('better-speed-features-migrate', __('jQuery Migrate', 'better-speed-text'), 'better_speed_features_migrate', 'better-speed', 'better-speed-section-features'); 319 add_settings_field('better-speed-features-dashicons', __('Dashicons', 'better-speed-text'), 'better_speed_features_dashicons', 'better-speed', 'better-speed-section-features'); 320 add_settings_field('better-speed-features-heartbeat', __('Heartbeat', 'better-speed-text'), 'better_speed_features_heartbeat', 'better-speed', 'better-speed-section-features'); 321 add_settings_field('better-speed-features-comments', __('Visitor Comments', 'better-speed-text'), 'better_speed_features_comments', 'better-speed', 'better-speed-section-features'); 322 add_settings_field('better-speed-features-xmlrpc', __('XML-RPC + Pingback', 'better-speed-text'), 'better_speed_features_xmlrpc', 'better-speed', 'better-speed-section-features'); 323 add_settings_field('better-speed-features-generator', __('Generator', 'better-speed-text'), 'better_speed_features_generator', 'better-speed', 'better-speed-section-features'); 324 add_settings_field('better-speed-features-manifest', __('WLW Manifest', 'better-speed-text'), 'better_speed_features_manifest', 'better-speed', 'better-speed-section-features'); 325 add_settings_field('better-speed-features-rsdlink', __('Really Simple Discovery', 'better-speed-text'), 'better_speed_features_rsdlink', 'better-speed', 'better-speed-section-features'); 326 add_settings_field('better-speed-features-shortlink', __('Short Link', 'better-speed-text'), 'better_speed_features_shortlink', 'better-speed', 'better-speed-section-features'); 327 add_settings_field('better-speed-features-rssfeeds', __('RSS Feeds', 'better-speed-text'), 'better_speed_features_rssfeeds', 'better-speed', 'better-speed-section-features'); 328 add_settings_field('better-speed-features-restapi', __('REST API', 'better-speed-text'), 'better_speed_features_restapi', 'better-speed', 'better-speed-section-features'); 329 add_settings_field('better-speed-features-blocks', __('Block Library', 'better-speed-text'), 'better_speed_features_blocks', 'better-speed', 'better-speed-section-features'); 330 331 add_settings_section('better-speed-section-instant', __('Instant Page', 'better-speed-text'), 'better_speed_section_instant', 'better-speed-instant'); 332 add_settings_field('better-speed-instant-page', __('Instant Page', 'better-speed-text'), 'better_speed_instant_page', 'better-speed-instant', 'better-speed-section-instant'); 381 add_settings_section('better-speed-section-features', __('Disable Features', 'whysoslow'), 'better_speed_section_features', 'better-speed'); 382 add_settings_field('better-speed-features-emojis', __('Emojis', 'whysoslow'), 'better_speed_features_emojis', 'better-speed', 'better-speed-section-features'); 383 add_settings_field('better-speed-features-embed', __('Embed Objects', 'whysoslow'), 'better_speed_features_embed', 'better-speed', 'better-speed-section-features'); 384 add_settings_field('better-speed-features-migrate', __('jQuery Migrate', 'whysoslow'), 'better_speed_features_migrate', 'better-speed', 'better-speed-section-features'); 385 add_settings_field('better-speed-features-dashicons', __('Dashicons', 'whysoslow'), 'better_speed_features_dashicons', 'better-speed', 'better-speed-section-features'); 386 add_settings_field('better-speed-features-heartbeat', __('Heartbeat', 'whysoslow'), 'better_speed_features_heartbeat', 'better-speed', 'better-speed-section-features'); 387 add_settings_field('better-speed-features-comments', __('Visitor Comments', 'whysoslow'), 'better_speed_features_comments', 'better-speed', 'better-speed-section-features'); 388 add_settings_field('better-speed-features-xmlrpc', __('XML-RPC + Pingback', 'whysoslow'), 'better_speed_features_xmlrpc', 'better-speed', 'better-speed-section-features'); 389 add_settings_field('better-speed-features-generator', __('Generator', 'whysoslow'), 'better_speed_features_generator', 'better-speed', 'better-speed-section-features'); 390 add_settings_field('better-speed-features-manifest', __('WLW Manifest', 'whysoslow'), 'better_speed_features_manifest', 'better-speed', 'better-speed-section-features'); 391 add_settings_field('better-speed-features-rsdlink', __('Really Simple Discovery', 'whysoslow'), 'better_speed_features_rsdlink', 'better-speed', 'better-speed-section-features'); 392 add_settings_field('better-speed-features-shortlink', __('Short Link', 'whysoslow'), 'better_speed_features_shortlink', 'better-speed', 'better-speed-section-features'); 393 add_settings_field('better-speed-features-rssfeeds', __('RSS Feeds', 'whysoslow'), 'better_speed_features_rssfeeds', 'better-speed', 'better-speed-section-features'); 394 add_settings_field('better-speed-features-restapi', __('REST API', 'whysoslow'), 'better_speed_features_restapi', 'better-speed', 'better-speed-section-features'); 395 add_settings_field('better-speed-features-blocks', __('Block Library', 'whysoslow'), 'better_speed_features_blocks', 'better-speed', 'better-speed-section-features'); 396 add_settings_field('better-speed-features-revisions', __('Revisions', 'whysoslow'), 'better_speed_features_revisions', 'better-speed', 'better-speed-section-features'); 397 398 add_settings_section('better-speed-section-others', __('Settings', 'whysoslow'), 'better_speed_section_others', 'better-speed-others'); 399 add_settings_field('better-speed-others-timings', __('Server Timings', 'whysoslow'), 'better_speed_others_timings', 'better-speed-others', 'better-speed-section-others'); 400 401 add_settings_section('better-speed-section-instant', __('Instant Page', 'whysoslow'), 'better_speed_section_instant', 'better-speed-instant'); 402 add_settings_field('better-speed-instant-page', __('Instant Page', 'whysoslow'), 'better_speed_instant_page', 'better-speed-instant', 'better-speed-section-instant'); 403 add_settings_field('better-speed-instant-intensity', __('Preload Intensity', 'whysoslow'), 'better_speed_instant_intensity', 'better-speed-instant', 'better-speed-section-instant'); 404 add_settings_field('better-speed-instant-external', __('Preload External Links', 'whysoslow'), 'better_speed_instant_external', 'better-speed-instant', 'better-speed-section-instant'); 333 405 } 334 406 … … 349 421 $whitelist_options['better-speed'][] = 'better-speed-features-restapi'; 350 422 $whitelist_options['better-speed'][] = 'better-speed-features-blocks'; 423 $whitelist_options['better-speed'][] = 'better-speed-features-revisions'; 424 $whitelist_options['better-speed'][] = 'better-speed-others-timings'; 351 425 $whitelist_options['better-speed'][] = 'better-speed-instant-page'; 426 $whitelist_options['better-speed'][] = 'better-speed-instant-intensity'; 427 $whitelist_options['better-speed'][] = 'better-speed-instant-external'; 352 428 return $whitelist_options; 353 429 }); … … 358 434 echo '<div class="wrap">'; 359 435 echo ' <div style="padding:12px;background-color:white;margin:24px 0;">'; 360 echo ' <a href="https:// bettersecurity.co" target="_blank" style="display:inline-block;width:100%;">';436 echo ' <a href="https://whysoslow.co.uk" target="_blank" style="display:inline-block;width:100%;">'; 361 437 echo ' <img src="' . plugins_url('header.png', __FILE__) . '" style="height:64px;">'; 362 438 echo ' </a>'; … … 371 447 } 372 448 echo ' </div>'; 373 echo ' <h1>' . __('Better Speed', 'better-speed-text') . '</h1>'; 374 echo ' <p>' . __('This plugin will allow you to easily remove bloat and turn off unused features, in order to streamline your website and reduce file requests.', 'better-speed-text'); 375 echo ' <p>' . __('This plugin is NOT a caching plugin, but should play well with any caching plugin you decide to use', 'better-speed-text'); 449 450 echo ' <h1>' . __('Why So Slow?', 'whysoslow') . '</h1>'; 451 echo ' <p>' . __('This plugin will allow you to easily remove bloat and turn off unused features, in order to streamline your website and reduce file requests.', 'whysoslow'); 452 echo ' <p>' . __('This plugin is <em>not</em> a caching plugin, but should play well with any caching plugin you decide to use.', 'whysoslow'); 376 453 echo ' <br><br>'; 454 455 //check for bad plugins - list based on https://wpengine.com/support/disallowed-plugins/ 456 if(!function_exists('get_plugins')) { 457 require_once ABSPATH . 'wp-admin/includes/plugin.php'; 458 } 459 $bad_plugins = array( 460 'adminer', 461 'async-google-analytics', 462 'backup', 463 'backup-scheduler', 464 'backupwordpress', 465 'backwpup', 466 'broken-link-checker', 467 'content-molecules', 468 'contextual-related-posts', 469 'duplicator', 470 'dynamic-related-posts', 471 'ezpz-one-click-backup', 472 'file-commander', 473 'fuzzy-seo-booster', 474 'gd-system-plugin', 475 'gd-system-plugin.php', 476 'google-xml-sitemaps-with-multisite-support', 477 'hc-custom-wp-admin-url', 478 'hcs.php', 479 'hello.php', 480 'jr-referrer', 481 'jumpple', 482 'missed-schedule', 483 'ozh-who-sees-ads', 484 'pipdig-power-pack', 485 'portable-phpmyadmin', 486 'recommend-a-friend', 487 'seo-alrp', 488 'si-captcha-for-wordpress', 489 'similar-posts', 490 'spamreferrerblock', 491 'ssclassic', 492 'sspro', 493 'super-post', 494 'superslider', 495 'sweetcaptcha-revolutionary-free-captcha-service', 496 'the-codetree-backup', 497 'toolspack', 498 'ToolsPack', 499 'tweet-blender', 500 'versionpress', 501 'wordpress-gzip-compression', 502 'wp-database-optimizer', 503 'wp-db-backup', 504 'wp-dbmanager', 505 'wp-engine-snapshot', 506 'wp-phpmyadmin', 507 'wp-postviews', 508 'wp-slimstat', 509 'wp-symposium-alerts', 510 'wponlinebackup', 511 'yet-another-featured-posts-plugin', 512 'yet-another-related-posts-plugin', 513 ); 514 $all_plugins = get_plugins(); 515 $count = 0; 516 foreach($all_plugins as $key => $plugin) { 517 $parts = explode('/', $key); 518 $folder = $parts[0]; 519 $file = $parts[1]; 520 if(in_array($folder,$bad_plugins) || in_array($file,$bad_plugins)) { 521 if($count++===0) { 522 echo ' <h2>' . __('Bad Plugins', 'whysoslow') . '</h2>'; 523 echo ' <p>' . __('The following plugin(s) are known to cause performance issues, and are ', 'whysoslow') . '<a href="https://wpengine.com/support/disallowed-plugins/" target="_blank" rel="noopener">' . __('disallowed by hosts such as WPEngine', 'whysoslow') . '</a>. ' . __('We recommend that you go to the Plugins page and Deactivate and Delete them as soon as possible.', 'whysoslow') . '</p>'; 524 echo ' <ul>'; 525 } 526 if(array_key_exists("PluginURI",$plugin)) { 527 echo ' <li><a href="' . $plugin["PluginURI"] . '">' . $plugin["Name"] . '</a></li>'; 528 } 529 else { 530 echo ' <li>' . $plugin["Name"] . '</li>'; 531 } 532 } 533 } 534 if($count>0) { 535 echo ' </ul>'; 536 echo ' <br>'; 537 } 538 377 539 echo ' <form action="options.php" method="post">'; 378 540 settings_fields('better-speed'); 379 541 542 echo ' <style>#better-speed-tabs-recommend .better-speed-recommendation{width:100%;display:block;text-decoration:none}#better-speed-tabs-recommend .better-speed-recommendation img{margin-right:25px;margin-bottom:10px}</style>'; 380 543 echo ' <div id="better-speed-tabs">'; 381 544 echo ' <ul>'; 382 echo ' <li><a href="#better-speed-tabs-disable">' . __('Disable Features', 'better-detect-text') . '</a></li>'; 383 echo ' <li><a href="#better-speed-tabs-instant">' . __('Instant Page', 'better-detect-text') . '</a></li>'; 545 echo ' <li><a href="#better-speed-tabs-disable">' . __('Disable Features', 'whysoslow') . '</a></li>'; 546 echo ' <li><a href="#better-speed-tabs-others">' . __('Settings', 'whysoslow') . '</a></li>'; 547 echo ' <li><a href="#better-speed-tabs-instant">' . __('Instant Page', 'whysoslow') . '</a></li>'; 548 echo ' <li><a href="#better-speed-tabs-recommend">' . __('Recommendations', 'whysoslow') . '</a></li>'; 384 549 echo ' </ul>'; 385 550 echo ' <div id="better-speed-tabs-disable">'; 386 551 do_settings_sections('better-speed'); 387 552 echo ' </div>'; 553 echo ' <div id="better-speed-tabs-others">'; 554 do_settings_sections('better-speed-others'); 555 echo ' </div>'; 388 556 echo ' <div id="better-speed-tabs-instant">'; 389 557 do_settings_sections('better-speed-instant'); 558 echo ' </div>'; 559 echo ' <div id="better-speed-tabs-recommend">'; 560 echo ' <a class="better-speed-recommendation" href="https://wp-rocket.me/?ref=dfdb22ef" target="_blank">'; 561 echo ' <img src="' . plugins_url('images/wprocket.png', __FILE__) . '" width="172px" height="46px" align="left">'; 562 echo ' <h3><u>' . __('WP Rocket', 'whysoslow') . '</u> <small><em>(plugin)</em></small></h3>'; 563 echo ' <p>' . __('WP Rocket is the most powerful web performance plugin in the world. It will instantly reduce your load time and boost your Google PageSpeed and Core Web Vitals scores. No coding skills needed.', 'whysoslow') . '</p>'; 564 echo ' </a>'; 565 echo ' <br>'; 566 echo ' <a class="better-speed-recommendation" href="https://shortpixel.com/wp/af/IJLMBK5514013" target="_blank">'; 567 echo ' <img src="' . plugins_url('images/shortpixel.png', __FILE__) . '" width="172px" height="67px" align="left">'; 568 echo ' <h3><u>' . __('ShortPixel Image Optimizer', 'whysoslow') . '</u> <small><em>(plugin)</em></small></h3>'; 569 echo ' <p>' . __('A freemium, easy to use, comprehensive, stable and frequently updated image compression plugin. It is an easy to use, lightweight, install-and-forget-about-it image optimization plugin that can compress all your past images and PDF documents with a single click.', 'whysoslow') . '</p>'; 570 echo ' </a>'; 571 echo ' <br>'; 572 echo ' <a class="better-speed-recommendation" href="https://shortpixel.com/wpspai/af/IJLMBK5514013" target="_blank">'; 573 echo ' <img src="' . plugins_url('images/shortpixel.png', __FILE__) . '" width="172px" height="67px" align="left">'; 574 echo ' <h3><u>' . __('ShortPixel Adaptive Images', 'whysoslow') . '</u> <small><em>(plugin)</em></small></h3>'; 575 echo ' <p>' . __('An easy to use plugin that can help you solve within minutes all your website’s image-related problems. Display properly sized, smartly cropped and optimized images on your website; Images are processed on the fly and served from their CDN, in the next-gen WebP & AVIF formats, if the browser supports it.', 'whysoslow') . '</p>'; 576 echo ' </a>'; 577 echo ' <br>'; 578 echo ' <a class="better-speed-recommendation" href="https://affiliate.k.io/go/betterspeed" target="_blank">'; 579 echo ' <img src="' . plugins_url('images/krystal.jpg', __FILE__) . '" width="172px" height="43px" align="left">'; 580 echo ' <h3><u>' . __('Krystal', 'whysoslow') . '</u> <small><em>(hosting)</em></small></h3>'; 581 echo ' <p>' . __('UK's best web hosting - expert hosting solutions since 2002. Over 19 years of experience have gone in to creating the perfect cloud hosting platform. WordPress hosting options to suit every budget and requirement, using 100% renewable electricity from sources like the sun, wind and sea.', 'whysoslow') . '</p>'; 582 echo ' </a>'; 583 echo ' <br>'; 584 echo ' <a class="better-speed-recommendation" href="https://www.siteground.com/index.htm?afcode=35f221d1fae43ce8aa828293f9cdf92f" target="_blank">'; 585 echo ' <img src="' . plugins_url('images/siteground.png', __FILE__) . '" width="172px" height="34px" align="left">'; 586 echo ' <h3><u>' . __('SiteGround', 'whysoslow') . '</u> <small><em>(hosting)</em></small></h3>'; 587 echo ' <p>' . __('Web hosting platform crafted for easy website management. Managed WordPress hosting that' powerful, yet simple to use. Building and maintaining a WordPress site is easy with their thoughtfully designed tools.', 'whysoslow') . '</p>'; 588 echo ' </a>'; 589 echo ' <br>'; 590 echo ' <a class="better-speed-recommendation" href="https://shareasale.com/r.cfm?b=1343154&u=2391583&m=41388" target="_blank">'; 591 echo ' <img src="' . plugins_url('images/wpengine.png', __FILE__) . '" width="172px" height="43px" align="left">'; 592 echo ' <h3><u>' . __('WP Engine', 'whysoslow') . '</u> <small><em>(hosting)</em></small></h3>'; 593 echo ' <p>' . __('Managed WordPress hosting that grows with your business. Build or migrate with confidence on the fastest, most reliable managed WordPress hosting platform with award-winning, 24/7 support. Get 3 months <strong><em>free</em></strong> when you get an annual plan.', 'whysoslow') . '</p>'; 594 echo ' </a>'; 595 echo ' <br>'; 596 echo ' <a class="better-speed-recommendation" href="https://www.shaytoder.com/course/?campaign=betterspeed&ref=6" target="_blank">'; 597 echo ' <img src="' . plugins_url('images/shay-logo-3-2.png', __FILE__) . '" width="172px" height="43px" align="left">'; 598 echo ' <h3><u>' . __('Page Speed Optimization', 'whysoslow') . '</u> <small><em>(course)</em></small></h3>'; 599 echo ' <p>' . __('A practical online course that will teach you how to improve the speed of any WordPress site. Brought to you by the winner of 1st place in a worldwide WordPress Performance Contest - Shay Toder.', 'whysoslow') . '</p>'; 600 echo ' </a>'; 601 echo ' <br>'; 602 echo ' <a class="better-speed-recommendation" href="https://shareasale.com/r.cfm?b=1531222&u=2391583&m=96547" target="_blank">'; 603 echo ' <img src="' . plugins_url('images/wpbuffs.png', __FILE__) . '" width="172px" height="38px" align="left">'; 604 echo ' <h3><u>' . __('WordPress Speed Optimization', 'whysoslow') . '</u> <small><em>(service)</em></small></h3>'; 605 echo ' <p>' . __('WP Buffs specializes in speed optimization for WordPress sites of all types and sizes. Never worry about a slow load time causing your visitors to leave, or Google penalizing your site for poor technical performance again. Their speed optimization service aims to have your website loading in under two seconds and improving your Core Web Vitals.', 'whysoslow') . '</p>'; 606 echo ' </a>'; 607 echo ' <br>'; 390 608 echo ' </div>'; 391 609 echo ' </div>'; … … 454 672 $tags += 1; 455 673 } 456 echo ' <h2>' . __('Estimated Savings', ' better-speed-text') . '</h2>';674 echo ' <h2>' . __('Estimated Savings', 'whysoslow') . '</h2>'; 457 675 echo ' <hr>'; 458 676 echo ' <table class="form-table">'; 459 677 echo ' <tbody>'; 460 678 echo ' <tr>'; 461 echo ' <th scope="row">' . __('File Requests', ' better-speed-text') . '</th>';679 echo ' <th scope="row">' . __('File Requests', 'whysoslow') . '</th>'; 462 680 echo ' <td>' . $reqs . '</td>'; 463 681 echo ' </tr>'; 464 682 echo ' <tr>'; 465 echo ' <th scope="row">' . __('File Size', ' better-speed-text') . '</th>';683 echo ' <th scope="row">' . __('File Size', 'whysoslow') . '</th>'; 466 684 echo ' <td>' . ($size>=1024 ? (number_format($size/1024,1)) . 'Mb' : $size . 'kb') . '</td>'; 467 685 echo ' </tr>'; 468 686 echo ' <tr>'; 469 echo ' <th scope="row">' . __('HTML Tags', ' better-speed-text') . '</th>';687 echo ' <th scope="row">' . __('HTML Tags', 'whysoslow') . '</th>'; 470 688 echo ' <td>' . $tags . '</td>'; 471 689 echo ' </tr>'; … … 478 696 $ver = better_speed_phpversion(); 479 697 $col = "critical"; 480 if(version_compare($ver,'7. 2','>=')) {698 if(version_compare($ver,'7.3','>=')) { 481 699 $col = "important"; 482 700 } 483 if(version_compare($ver,'7. 3','>=')) {701 if(version_compare($ver,'7.4','>=')) { 484 702 $col = "success"; 485 703 } … … 541 759 $checked = " checked"; 542 760 } 543 echo '<label><input id="better-speed-features-emojis" name="better-speed-settings[better-speed-features-emojis]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove support for emojis in posts <em>(saves at least 1 file request and ~16kb)</em>', ' better-speed-text');761 echo '<label><input id="better-speed-features-emojis" name="better-speed-settings[better-speed-features-emojis]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove support for emojis in posts <em>(saves at least 1 file request and ~16kb)</em>', 'whysoslow'); 544 762 } 545 763 … … 549 767 $checked = " checked"; 550 768 } 551 echo '<label><input id="better-speed-features-embed" name="better-speed-settings[better-speed-features-embed]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove support for embedding objects in posts <em>(saves at least 1 file request and ~6kb)</em>', ' better-speed-text');769 echo '<label><input id="better-speed-features-embed" name="better-speed-settings[better-speed-features-embed]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove support for embedding objects in posts <em>(saves at least 1 file request and ~6kb)</em>', 'whysoslow'); 552 770 } 553 771 … … 557 775 $checked = " checked"; 558 776 } 559 echo '<label><input id="better-speed-features-migrate" name="better-speed-settings[better-speed-features-migrate]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove support for old jQuery features dropped in 2016 <em>(saves 1 file request and ~10kb)</em>', ' better-speed-text');777 echo '<label><input id="better-speed-features-migrate" name="better-speed-settings[better-speed-features-migrate]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove support for old jQuery features dropped in 2016 <em>(saves 1 file request and ~10kb)</em>', 'whysoslow'); 560 778 } 561 779 … … 565 783 $checked = " checked"; 566 784 } 567 echo '<label><input id="better-speed-features-dashicons" name="better-speed-settings[better-speed-features-dashicons]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove support for Dashicons <u>when not logged in</u> <em>(saves 1 file request and ~46kb)</em>', ' better-speed-text');785 echo '<label><input id="better-speed-features-dashicons" name="better-speed-settings[better-speed-features-dashicons]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove support for Dashicons <u>when not logged in</u> <em>(saves 1 file request and ~46kb)</em>', 'whysoslow'); 568 786 } 569 787 … … 573 791 $checked = " checked"; 574 792 } 575 echo '<label><input id="better-speed-features-heartbeat" name="better-speed-settings[better-speed-features-heartbeat]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove support for auto-save <u>when not editing a page/post</u> <em>(saves 1 file request and ~6kb)</em>', ' better-speed-text');793 echo '<label><input id="better-speed-features-heartbeat" name="better-speed-settings[better-speed-features-heartbeat]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove support for auto-save <u>when not editing a page/post</u> <em>(saves 1 file request and ~6kb)</em>', 'whysoslow'); 576 794 } 577 795 … … 581 799 $checked = " checked"; 582 800 } 583 echo '<label><input id="better-speed-features-comments" name="better-speed-settings[better-speed-features-comments]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove support for leaving comments on posts</u> <em>(saves at least 1 file request and ~2kb)</em>', ' better-speed-text');801 echo '<label><input id="better-speed-features-comments" name="better-speed-settings[better-speed-features-comments]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove support for leaving comments on posts</u> <em>(saves at least 1 file request and ~2kb)</em>', 'whysoslow'); 584 802 } 585 803 … … 589 807 $checked = " checked"; 590 808 } 591 echo '<label><input id="better-speed-features-xmlrpc" name="better-speed-settings[better-speed-features-xmlrpc]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove support for third-party application access <em>(such as mobile apps)</em>', ' better-speed-text');809 echo '<label><input id="better-speed-features-xmlrpc" name="better-speed-settings[better-speed-features-xmlrpc]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove support for third-party application access <em>(such as mobile apps)</em>', 'whysoslow'); 592 810 } 593 811 … … 597 815 $checked = " checked"; 598 816 } 599 echo '<label><input id="better-speed-features-generator" name="better-speed-settings[better-speed-features-generator]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove the generator tag <em>(includes Wordpress version number)</em>', ' better-speed-text');817 echo '<label><input id="better-speed-features-generator" name="better-speed-settings[better-speed-features-generator]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove the generator tag <em>(includes Wordpress version number)</em>', 'whysoslow'); 600 818 } 601 819 … … 605 823 $checked = " checked"; 606 824 } 607 echo '<label><input id="better-speed-features-manifest" name="better-speed-settings[better-speed-features-manifest]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove the Windows Live Writer manifest tag <em>(WLW was discontinued in Jan 2017)</em>', ' better-speed-text');825 echo '<label><input id="better-speed-features-manifest" name="better-speed-settings[better-speed-features-manifest]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove the Windows Live Writer manifest tag <em>(WLW was discontinued in Jan 2017)</em>', 'whysoslow'); 608 826 } 609 827 … … 613 831 $checked = " checked"; 614 832 } 615 echo '<label><input id="better-speed-features-rsdlink" name="better-speed-settings[better-speed-features-rsdlink]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove the Really Simple Discovery (RSD) tag <em>(this protocol never became popular)</em>', ' better-speed-text');833 echo '<label><input id="better-speed-features-rsdlink" name="better-speed-settings[better-speed-features-rsdlink]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove the Really Simple Discovery (RSD) tag <em>(this protocol never became popular)</em>', 'whysoslow'); 616 834 } 617 835 … … 621 839 $checked = " checked"; 622 840 } 623 echo '<label><input id="better-speed-features-shortlink" name="better-speed-settings[better-speed-features-shortlink]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove the Short Link tag <em>(search engines ignore this tag completely)</em>', ' better-speed-text');841 echo '<label><input id="better-speed-features-shortlink" name="better-speed-settings[better-speed-features-shortlink]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove the Short Link tag <em>(search engines ignore this tag completely)</em>', 'whysoslow'); 624 842 } 625 843 … … 629 847 $checked = " checked"; 630 848 } 631 echo '<label><input id="better-speed-features-rssfeeds" name="better-speed-settings[better-speed-features-rssfeeds]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove the RSS feed links and disable the feeds <em>(will redirect to the page instead)</em>', ' better-speed-text');849 echo '<label><input id="better-speed-features-rssfeeds" name="better-speed-settings[better-speed-features-rssfeeds]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove the RSS feed links and disable the feeds <em>(will redirect to the page instead)</em>', 'whysoslow'); 632 850 } 633 851 … … 637 855 $checked = " checked"; 638 856 } 639 echo '<label><input id="better-speed-features-restapi" name="better-speed-settings[better-speed-features-restapi]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove the REST API links and disable the endpoints <u>when not on admin pages</u>', ' better-speed-text');857 echo '<label><input id="better-speed-features-restapi" name="better-speed-settings[better-speed-features-restapi]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove the REST API links and disable the endpoints <u>when not on admin pages</u>', 'whysoslow'); 640 858 } 641 859 … … 645 863 $checked = " checked"; 646 864 } 647 echo '<label><input id="better-speed-features-blocks" name="better-speed-settings[better-speed-features-blocks]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove the Gutenberg blocks library if you are using Classic Editor <em>(saves 1 file request and ~29kb)</em>', 'better-speed-text'); 865 echo '<label><input id="better-speed-features-blocks" name="better-speed-settings[better-speed-features-blocks]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove the Gutenberg blocks library if you are using Classic Editor <em>(saves 1 file request and ~29kb)</em>', 'whysoslow'); 866 } 867 868 function better_speed_features_revisions() { 869 $checked = ""; 870 if(better_speed_check_setting('revisions')) { 871 $checked = " checked"; 872 } 873 echo '<label><input id="better-speed-features-revisions" name="better-speed-settings[better-speed-features-revisions]" type="checkbox" value="YES"' . $checked . '> ' . __('Remove support for creating page/post revisions <em>(reduces database queries and size)</em>', 'whysoslow'); 874 } 875 876 //define output for settings section 877 function better_speed_section_others() { 878 //nothing to output 879 } 880 881 //defined output for settings 882 function better_speed_others_timings() { 883 $checked = ""; 884 if(better_speed_check_other_setting('others-timings')) { 885 $checked = " checked"; 886 } 887 echo '<label><input id="better-speed-others-timings" name="better-speed-settings[better-speed-others-timings]" type="checkbox" value="YES"' . $checked . '> ' . __('Add <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Server-Timing" target="_blank" rel="noopener">Server Timing</a> headers to aid debugging', 'whysoslow'); 648 888 } 649 889 … … 651 891 function better_speed_section_instant() { 652 892 echo '<p><a href="https://instant.page"><img src="' . plugins_url('instant.page.png', __FILE__) . '"></a></p>'; 653 echo '<p><a href="https://instant.page"><strong>instant.page</strong></a> ' . __('is a free and open source library that uses just-in-time preloading, meaning it preloads a page right before a user clicks on it. Pages are preloaded only when there\'s a good chance that a user will visit them, and only the HTML is preloaded, being respectful of your users\' and servers\' bandwidth and CPU. It uses passive event listeners so that your pages stay smooth and doesn\'t preload when the user has data saver enabled. It\'s less than 1kb and loads after everything else.', ' better-speed-text') . '</p>';893 echo '<p><a href="https://instant.page"><strong>instant.page</strong></a> ' . __('is a free and open source library that uses just-in-time preloading, meaning it preloads a page right before a user clicks on it. Pages are preloaded only when there\'s a good chance that a user will visit them, and only the HTML is preloaded, being respectful of your users\' and servers\' bandwidth and CPU. It uses passive event listeners so that your pages stay smooth and doesn\'t preload when the user has data saver enabled. It\'s less than 1kb and loads after everything else.', 'whysoslow') . '</p>'; 654 894 } 655 895 … … 660 900 $checked = " checked"; 661 901 } 662 echo '<label><input id="better-speed-instant-page" name="better-speed-settings[better-speed-instant-page]" type="checkbox" value="YES"' . $checked . '> ' . __('Enable <strong>instant.page</strong> functionality', 'better-speed-text'); 663 } 664 902 echo '<label><input id="better-speed-instant-page" name="better-speed-settings[better-speed-instant-page]" type="checkbox" value="YES"' . $checked . '> ' . __('Enable <strong>instant.page</strong> functionality', 'whysoslow'); 903 } 904 905 //defined output for settings 906 function better_speed_instant_intensity() { 907 $value = better_speed_get_other_setting('instant-intensity') ?: "default"; 908 echo '<select id="better-speed-instant-intensity" name="better-speed-settings[better-speed-instant-intensity]" style="max-width:none!important">'; 909 better_speed_instant_intensity_option($value,'default','After hovering over a link or when the screen is touched (~65ms) - default option'); 910 better_speed_instant_intensity_option($value,'mousedown','After pressing the mouse button or when the screen is touched (~80ms)'); 911 better_speed_instant_intensity_option($value,'mousedown-only','After pressing the mouse button only (~80ms)'); 912 better_speed_instant_intensity_option($value,'viewport','On small screens only, as soon as the link is displayed on screen'); 913 better_speed_instant_intensity_option($value,'viewport-all','On all screens, as soon as the link is displayed on screen'); 914 better_speed_instant_intensity_option($value,'150','After hovering over a link or when the screen is touched, with delay (~150ms)'); 915 better_speed_instant_intensity_option($value,'300','After hovering over a link or when the screen is touched, with delay (~300ms)'); 916 echo '</select>'; 917 } 918 function better_speed_instant_intensity_option($value,$code,$name) { 919 echo '<option value="' . $code . '"' . ($value===$code ? ' selected="selected"' : '') . '>' . $name . '</option>'; 920 } 921 922 //defined output for settings 923 function better_speed_instant_external() { 924 $checked = ""; 925 if(better_speed_check_other_setting('instant-external')) { 926 $checked = " checked"; 927 } 928 echo '<label><input id="better-speed-instant-external" name="better-speed-settings[better-speed-instant-external]" type="checkbox" value="YES"' . $checked . '> ' . __('Preload links that point outside of your website', 'whysoslow'); 929 } 665 930 666 931 //add actions … … 674 939 wp_enqueue_script('jquery-ui-core'); 675 940 wp_enqueue_script('jquery-ui-tabs'); 676 677 941 wp_enqueue_script('better-speed-main-js', plugins_url('main.js', __FILE__),array('jquery','jquery-ui-tabs'),false,true); 678 679 942 wp_enqueue_style('jquery-ui-tabs-min-css', plugins_url('jquery-ui-tabs.min.css', __FILE__)); 680 943 } … … 688 951 //show settings link 689 952 function better_speed_links($links) { 690 $links[] = sprintf('<a href="%s">%s</a>',admin_url('options-general.php?page=better-speed-settings'), __('Settings', ' better-speed-text'));953 $links[] = sprintf('<a href="%s">%s</a>',admin_url('options-general.php?page=better-speed-settings'), __('Settings', 'whysoslow')); 691 954 return $links; 692 955 } -
better-speed/trunk/instant.page.min.js
r2127560 r2675058 1 /*! instant.page v1.2.2 - (C) 2019 Alexandre Dieulot - https://instant.page/license */ 2 var urlToPreload,mouseoverTimer,lastTouchTimestamp,prefetcher=document.createElement("link"),isSupported=prefetcher.relList&&prefetcher.relList.supports&&prefetcher.relList.supports("prefetch"),isDataSaverEnabled=navigator.connection&&navigator.connection.saveData,allowQueryString="instantAllowQueryString"in document.body.dataset,allowExternalLinks="instantAllowExternalLinks"in document.body.dataset; 3 if(isSupported&&!isDataSaverEnabled){prefetcher.rel="prefetch";document.head.appendChild(prefetcher);var eventListenersOptions={capture:!0,passive:!0};document.addEventListener("touchstart",touchstartListener,eventListenersOptions);document.addEventListener("mouseover",mouseoverListener,eventListenersOptions)} 4 function touchstartListener(a){lastTouchTimestamp=performance.now();a=a.target.closest("a");isPreloadable(a)&&(a.addEventListener("touchcancel",touchendAndTouchcancelListener,{passive:!0}),a.addEventListener("touchend",touchendAndTouchcancelListener,{passive:!0}),urlToPreload=a.href,preload(a.href))}function touchendAndTouchcancelListener(){urlToPreload=void 0;stopPreloading()} 5 function mouseoverListener(a){if(!(1100>performance.now()-lastTouchTimestamp)){var b=a.target.closest("a");isPreloadable(b)&&(b.addEventListener("mouseout",mouseoutListener,{passive:!0}),urlToPreload=b.href,mouseoverTimer=setTimeout(function(){preload(b.href);mouseoverTimer=void 0},65))}}function mouseoutListener(a){a.relatedTarget&&a.target.closest("a")==a.relatedTarget.closest("a")||(mouseoverTimer?(clearTimeout(mouseoverTimer),mouseoverTimer=void 0):(urlToPreload=void 0,stopPreloading()))} 6 function isPreloadable(a){if(a&&a.href&&urlToPreload!=a.href){var b=new URL(a.href);if((allowExternalLinks||b.origin==location.origin||"instant"in a.dataset)&&["http:","https:"].includes(b.protocol)&&!("http:"==b.protocol&&"https:"==location.protocol||!(allowQueryString||!b.search||"instant"in a.dataset)||b.hash&&b.pathname+b.search==location.pathname+location.search||"noInstant"in a.dataset))return!0}}function preload(a){prefetcher.href=a} 7 function stopPreloading(){prefetcher.removeAttribute("href")}; 1 /*! instant.page v5.1.0 - (C) 2019-2020 Alexandre Dieulot - https://instant.page/license */ 2 let t,e;const n=new Set,o=document.createElement("link"),i=o.relList&&o.relList.supports&&o.relList.supports("prefetch")&&window.IntersectionObserver&&"isIntersecting"in IntersectionObserverEntry.prototype,s="instantAllowQueryString"in document.body.dataset,a="instantAllowExternalLinks"in document.body.dataset,r="instantWhitelist"in document.body.dataset,c="instantMousedownShortcut"in document.body.dataset,d=1111;let l=65,u=!1,f=!1,m=!1;if("instantIntensity"in document.body.dataset){const t=document.body.dataset.instantIntensity;if("mousedown"==t.substr(0,"mousedown".length))u=!0,"mousedown-only"==t&&(f=!0);else if("viewport"==t.substr(0,"viewport".length))navigator.connection&&(navigator.connection.saveData||navigator.connection.effectiveType&&navigator.connection.effectiveType.includes("2g"))||("viewport"==t?document.documentElement.clientWidth*document.documentElement.clientHeight<45e4&&(m=!0):"viewport-all"==t&&(m=!0));else{const e=parseInt(t);isNaN(e)||(l=e)}}if(i){const n={capture:!0,passive:!0};if(f||document.addEventListener("touchstart",function(t){e=performance.now();const n=t.target.closest("a");if(!h(n))return;v(n.href)},n),u?c||document.addEventListener("mousedown",function(t){const e=t.target.closest("a");if(!h(e))return;v(e.href)},n):document.addEventListener("mouseover",function(n){if(performance.now()-e<d)return;const o=n.target.closest("a");if(!h(o))return;o.addEventListener("mouseout",p,{passive:!0}),t=setTimeout(()=>{v(o.href),t=void 0},l)},n),c&&document.addEventListener("mousedown",function(t){if(performance.now()-e<d)return;const n=t.target.closest("a");if(t.which>1||t.metaKey||t.ctrlKey)return;if(!n)return;n.addEventListener("click",function(t){1337!=t.detail&&t.preventDefault()},{capture:!0,passive:!1,once:!0});const o=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1,detail:1337});n.dispatchEvent(o)},n),m){let t;(t=window.requestIdleCallback?t=>{requestIdleCallback(t,{timeout:1500})}:t=>{t()})(()=>{const t=new IntersectionObserver(e=>{e.forEach(e=>{if(e.isIntersecting){const n=e.target;t.unobserve(n),v(n.href)}})});document.querySelectorAll("a").forEach(e=>{h(e)&&t.observe(e)})})}}function p(e){e.relatedTarget&&e.target.closest("a")==e.relatedTarget.closest("a")||t&&(clearTimeout(t),t=void 0)}function h(t){if(t&&t.href&&(!r||"instant"in t.dataset)&&(a||t.origin==location.origin||"instant"in t.dataset)&&["http:","https:"].includes(t.protocol)&&("http:"!=t.protocol||"https:"!=location.protocol)&&(s||!t.search||"instant"in t.dataset)&&!(t.hash&&t.pathname+t.search==location.pathname+location.search||"noInstant"in t.dataset))return!0}function v(t){if(n.has(t))return;const e=document.createElement("link");e.rel="prefetch",e.href=t,document.head.appendChild(e),n.add(t)} -
better-speed/trunk/readme.txt
r2277059 r2675058 1 === Better Speed===2 Contributors: bettersecurity, riklewis3 Tags: better, security, speed, performance, bloat 4 Requires at least: 3.55 Tested up to: 5. 41 === Why So Slow? === 2 Contributors: whysoslow, bettersecurity, riklewis 3 Tags: better, security, speed, performance, bloat, slow, whysoslow, instant 4 Requires at least: 5.0 5 Tested up to: 5.9 6 6 Stable tag: trunk 7 Requires PHP: 5.67 Requires PHP: 7.0 8 8 License: GPLv3 9 9 License URI: https://www.gnu.org/licenses/gpl-3.0.html 10 10 11 Improve the loading speed of your website by removing bloat and unused features 11 Improve the loading speed of your website by removing bloat and unused features (formerly named Better Speed) 12 12 13 13 == Description == … … 16 16 17 17 It also includes the following additional functionality: 18 - Include [instant.page](https://instant.page) library 18 - Include [instant.page](https://instant.page) library (v5.1.0) with settings 19 - Add Server-Timing headers to enable better debugging 19 20 20 21 This plugin is NOT a caching plugin, but should play well with any caching plugin you decide to use.
Note: See TracChangeset
for help on using the changeset viewer.