Skip to Content


Attempt to predict the next pageview for caching/prefetching.

JavaScript February 7, 2021




This function does not accept any parameters. Is this incorrect?

Additional Notes

If a service worker is being used (and Cache API is available), the resource will be fetched and added to the cache. Otherwise, it will attempt to prefetch with a resource hint instead.

It also does not run when offline.

Note: This only enables event listeners! To add to the cache, see nebulaAddToCache() ornebulaPrefetch().

Source File

Located in /assets/js/modules/optimization.js on line 340.

No Hooks

This function does not have any filters or actions available. Request one?
nebula.predictiveCacheListeners = async function(){
    //If Save Data is supported and Save Data is requested do not bother with predictive listeners
    if ( navigator.connection?.saveData ){
        return false;

    //Any post listing page
    if ( jQuery('.first-post .entry-title a').length ){
        nebula.prefetch(jQuery('.first-post .entry-title a').attr('href'));

    //Internal link hovers
    let predictiveHoverTimeout;
    jQuery('a').on('mouseenter', function(){
        let oThis = jQuery(this);
        let url = oThis.attr('href');

        if ( url && !predictiveHoverTimeout ){
            predictiveHoverTimeout = window.setTimeout(function(){
                predictiveHoverTimeout = null; //Reset the timer
                nebula.prefetch(url); //Attempt to prefetch
            }, 250);
    }, function(){
        if ( predictiveHoverTimeout ){
            predictiveHoverTimeout = null;

    //Once idle, prefetch the top-level nav items and buttons
    //Disabled to reduce the broad background loading. The above hover prefetch is more focused.
//     if ( typeof window.requestIdleCallback === 'function' ){ //Waiting for Safari to support requestIdleCallback
//         //Prefetch certain elements on window idle
//         window.requestIdleCallback(function(){
//             //Top-level primary nav links
//             jQuery('ul#menu-primary > > a').each(function(){
//                 nebula.prefetch(jQuery(this).attr('href'), false, jQuery(this));
//             });
//             //First 5 buttons
//             jQuery('a.btn, a.wp-block-button__link').slice(0, 4).each(function(){
//                 nebula.prefetch(jQuery(this).attr('href'), false, jQuery(this));
//             });
//         });
//     }


To override or disable this JavaScript function, simply redeclare it with the exact same function name.

nebula.predictiveCacheListeners = function(){
    //Write your own code here, leave it blank, or return false.