跳转到主要内容

Service Workers

A Service Worker is used to handle the HTTP traffic using the in-browser PHPRequestHandler. Imagine your PHP script renders the following page in the iframe viewport:

<html>
    <head>
        <title>John's Website</title>
    </head>
    <body>
        <a href="/">Homepage</a>
        <a href="/blog">Blog</a>
        <a href="/contact">Contact</a>
    </body>
</html>

When the user clicks, say the Blog link, the browser would normally send a HTTP request to the remote server to fetch the /blog page and then display it instead of the current iframe contents. However, our app isn’t running on the remote server. The browser would just display a 404 page. Enter Service Workers – a tool to intercept the HTTP requests and handle them inside the browser: Service worker data flow

Service Worker setup

The main application living in /index.html is responsible for registering the service worker. Here’s the minimal setup: /app.js:

function main() {
    await registerServiceWorker(
        phpClient,
        "default", // PHP instance scope
        "/sw.js",  // Must point to a valid Service Worker implementation.
        "1"        // Service worker version, used for reloading the script.
    );

}

You will also need a separate /service-worker.js file that actually intercepts and routes the HTTP requests. Here’s what a minimal implementation looks like: /service-worker.js:

// Intercepts all HTTP traffic on the current domain and
// passes it to the Worker Thread.
initializeServiceWorker();