Plugin Directory

Changeset 2675058


Ignore:
Timestamp:
02/08/2022 01:51:23 PM (4 years ago)
Author:
bettersecurity
Message:

Changed from 'Better Speed' to 'Why So Slow?'
Updated instant.page version and added settings
Added option to include Server-Timing headers for debugging
Added 'Recommendations' tab to settings page

Location:
better-speed
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • better-speed/trunk/better-speed.php

    r2208874 r2675058  
    11<?php
    22/*
    3 Plugin Name:  Better Speed
    4 Description:  Improve the loading speed of your website by removing bloat and unused features
    5 Version:      1.2
    6 Author:       Better Security
    7 Author URI:   https://bettersecurity.co
     3Plugin Name:  Why So Slow?
     4Description:  Improve the loading speed of your website by removing bloat and unused features <em>(formerly named <strong>Better Speed</strong>)</em>
     5Version:      2.0
     6Author:       Why So Slow?
     7Author URI:   https://whysoslow.co.uk
    88License:      GPL3
    99License URI:  https://www.gnu.org/licenses/gpl-3.0.en.html
    10 Text Domain:  better-speed-text
     10Text Domain:  whysoslow
    1111Domain Path:  /languages
    1212*/
     
    3131*/
    3232
     33function 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
     41function 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}
     50add_action('setup_theme', 'better_speed_setup_theme', 0);
     51
     52function 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}
     59add_action('setup_theme', 'better_speed_setup_theme', 0);
     60
     61function 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
    3366function better_speed_shutdown() {
    3467  global $timestart;
    3568  $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}
    3971
    4072/*
     
    152184    add_filter('rest_authentication_errors', function($result) {
    153185            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));
    155187            }
    156188            return $result;
     
    163195      wp_dequeue_style('wp-block-library');
    164196    }, 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        });
    165211    }
    166212
     
    173219        add_action('template_redirect', function() {
    174220            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));
    176222      }
    177223        }, 9);
     
    211257                    remove_submenu_page('options-general.php', 'options-discussion.php');
    212258                    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));
    214260                    }
    215261                    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));
    217263                    }
    218264                }, 9999);
     
    288334add_filter('script_loader_tag', 'better_speed_defer_scripts', 10, 3);
    289335
     336function 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}
     348add_filter( 'body_class', 'better_speed_body_class' );
     349
    290350/*
    291351----------------------------- Settings ------------------------------
     
    304364}
    305365
     366//check checkbox setting
     367function 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
    306372//add settings page
    307373function 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');
    309375}
    310376
     
    313379    register_setting('better-speed','better-speed-settings');
    314380
    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');
    333405}
    334406
     
    349421  $whitelist_options['better-speed'][] = 'better-speed-features-restapi';
    350422  $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';
    351425  $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';
    352428  return $whitelist_options;
    353429});
     
    358434  echo '<div class="wrap">';
    359435  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%;">';
    361437  echo '      <img src="' . plugins_url('header.png', __FILE__) . '" style="height:64px;">';
    362438  echo '    </a>';
     
    371447  }
    372448  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');
    376453    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
    377539    echo '  <form action="options.php" method="post">';
    378540    settings_fields('better-speed');
    379541
     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>';
    380543  echo '  <div id="better-speed-tabs">';
    381544  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>';
    384549  echo '    </ul>';
    385550  echo '    <div id="better-speed-tabs-disable">';
    386551  do_settings_sections('better-speed');
    387552  echo '    </div>';
     553  echo '    <div id="better-speed-tabs-others">';
     554  do_settings_sections('better-speed-others');
     555  echo '    </div>';
    388556  echo '    <div id="better-speed-tabs-instant">';
    389557  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&apos;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&apos; 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>';
    390608  echo '    </div>';
    391609  echo '  </div>';
     
    454672        $tags += 1;
    455673    }
    456     echo '  <h2>' . __('Estimated Savings', 'better-speed-text') . '</h2>';
     674    echo '  <h2>' . __('Estimated Savings', 'whysoslow') . '</h2>';
    457675  echo '  <hr>';
    458676  echo '  <table class="form-table">';
    459677  echo '    <tbody>';
    460678    echo '      <tr>';
    461     echo '        <th scope="row">' . __('File Requests', 'better-speed-text') . '</th>';
     679    echo '        <th scope="row">' . __('File Requests', 'whysoslow') . '</th>';
    462680    echo '        <td>' . $reqs . '</td>';
    463681    echo '      </tr>';
    464682    echo '      <tr>';
    465     echo '        <th scope="row">' . __('File Size', 'better-speed-text') . '</th>';
     683    echo '        <th scope="row">' . __('File Size', 'whysoslow') . '</th>';
    466684    echo '        <td>' . ($size>=1024 ? (number_format($size/1024,1)) . 'Mb' : $size . 'kb') . '</td>';
    467685    echo '      </tr>';
    468686    echo '      <tr>';
    469     echo '        <th scope="row">' . __('HTML Tags', 'better-speed-text') . '</th>';
     687    echo '        <th scope="row">' . __('HTML Tags', 'whysoslow') . '</th>';
    470688    echo '        <td>' . $tags . '</td>';
    471689    echo '      </tr>';
     
    478696  $ver = better_speed_phpversion();
    479697  $col = "critical";
    480   if(version_compare($ver,'7.2','>=')) {
     698  if(version_compare($ver,'7.3','>=')) {
    481699    $col = "important";
    482700  }
    483   if(version_compare($ver,'7.3','>=')) {
     701  if(version_compare($ver,'7.4','>=')) {
    484702    $col = "success";
    485703  }
     
    541759        $checked = " checked";
    542760    }
    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');
    544762}
    545763
     
    549767        $checked = " checked";
    550768    }
    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');
    552770}
    553771
     
    557775        $checked = " checked";
    558776    }
    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');
    560778}
    561779
     
    565783        $checked = " checked";
    566784    }
    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');
    568786}
    569787
     
    573791        $checked = " checked";
    574792    }
    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');
    576794}
    577795
     
    581799        $checked = " checked";
    582800    }
    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');
    584802}
    585803
     
    589807        $checked = " checked";
    590808    }
    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');
    592810}
    593811
     
    597815        $checked = " checked";
    598816    }
    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');
    600818}
    601819
     
    605823        $checked = " checked";
    606824    }
    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');
    608826}
    609827
     
    613831        $checked = " checked";
    614832    }
    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');
    616834}
    617835
     
    621839        $checked = " checked";
    622840    }
    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');
    624842}
    625843
     
    629847        $checked = " checked";
    630848    }
    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');
    632850}
    633851
     
    637855        $checked = " checked";
    638856    }
    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');
    640858}
    641859
     
    645863        $checked = " checked";
    646864    }
    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
     868function 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
     877function better_speed_section_others() {
     878    //nothing to output
     879}
     880
     881//defined output for settings
     882function 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');
    648888}
    649889
     
    651891function better_speed_section_instant() {
    652892  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>';
    654894}
    655895
     
    660900        $checked = " checked";
    661901    }
    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
     906function 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}
     918function 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
     923function 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}
    665930
    666931//add actions
     
    674939      wp_enqueue_script('jquery-ui-core');
    675940      wp_enqueue_script('jquery-ui-tabs');
    676 
    677941        wp_enqueue_script('better-speed-main-js', plugins_url('main.js', __FILE__),array('jquery','jquery-ui-tabs'),false,true);
    678 
    679942        wp_enqueue_style('jquery-ui-tabs-min-css', plugins_url('jquery-ui-tabs.min.css', __FILE__));
    680943    }
     
    688951//show settings link
    689952function 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'));
    691954    return $links;
    692955}
  • 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 */
     2let 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, riklewis
    3 Tags: better, security, speed, performance, bloat
    4 Requires at least: 3.5
    5 Tested up to: 5.4
     1=== Why So Slow? ===
     2Contributors: whysoslow, bettersecurity, riklewis
     3Tags: better, security, speed, performance, bloat, slow, whysoslow, instant
     4Requires at least: 5.0
     5Tested up to: 5.9
    66Stable tag: trunk
    7 Requires PHP: 5.6
     7Requires PHP: 7.0
    88License: GPLv3
    99License URI: https://www.gnu.org/licenses/gpl-3.0.html
    1010
    11 Improve the loading speed of your website by removing bloat and unused features
     11Improve the loading speed of your website by removing bloat and unused features (formerly named Better Speed)
    1212
    1313== Description ==
     
    1616
    1717It 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
    1920
    2021This 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.