This approach demonstrates how to measure the loading time from the moment a user clicks on a link until the destination page fully loads. It’s particularly useful for tracking the performance of pages within a sales funnel.
Set Up the Link Click Event Listener
Attach an event listener to the desired links to record the timestamp when a user initiates navigation:
document.addEventListener('click', function(event) {
  const target = event.target.closest('.link');
  if (target) {
    const timeThen = Date.now();
    localStorage.setItem('ip2timing', timeThen.toString());
  }
});Retrieve Stored Data and Send Timing Information
Upon loading the destination page, retrieve the stored timestamp and calculate the duration. Then, send this data to a specified URL for storage or analysis:
window.addEventListener('load', function() {
  const ipElement = document.getElementById('ip');
  if (!ipElement) return;
  const currentIP = ipElement.textContent || '';
  const storedTime = localStorage.getItem('ip2timing');
  if (!storedTime) return;
  const timeThen = parseInt(storedTime, 10);
  const timeNow = Date.now();
  const duration = (timeNow - timeThen) / 1000; // duration in seconds
  const pageId = '7'; // Replace with dynamic value as needed
  // Function to send a ping by loading an image
  function sendPing(url, timeout = 1500) {
    return new Promise((resolve, reject) => {
      const img = new Image();
      let timer;
      img.onload = () => {
        clearTimeout(timer);
        resolve({ status: 'success', duration: Date.now() - timeNow });
      };
      img.onerror = () => {
        clearTimeout(timer);
        resolve({ status: 'error', duration: Date.now() - timeNow });
      };
      timer = setTimeout(() => {
        img.src = ''; // Cancel the image load
        reject({ status: 'timeout', duration: timeout });
      }, timeout);
      img.src = `${url}?cache=${Date.now()}`;
    });
  }
  // Only send the ping if the IP matches
  if (currentIP === currentIP) {
    const pingUrl = `https://www.example.com/search-timing.php?duration=${duration}&page_id=${pageId}&when=${timeNow}`;
    sendPing(pingUrl)
      .then(response => {
        // Handle successful ping
        console.log('Ping response:', response);
      })
      .catch(error => {
        // Handle ping error
        console.error('Ping error:', error);
      });
    localStorage.removeItem('ip2timing');
  }
});Ensure that the element with the ID ip exists on the destination page and contains the user’s IP address or a unique identifier.
Replace '7' with the appropriate page_id value, which can be dynamically set using data attributes, JavaScript variables, AJAX calls, or server-side rendering.
The sendPing function simulates a ping by loading an image from the specified URL. This method is commonly used to send lightweight tracking requests without affecting page performance.
 
                                                     
                                                     
                                                     
                