Home  >  Article  >  Backend Development  >  How to use PHP and Lighthouse for website performance testing

How to use PHP and Lighthouse for website performance testing

WBOY
WBOYOriginal
2023-06-19 15:36:00843browse

As a web developer, you must know the importance of website performance to user experience and search engine rankings. To maintain a high-performance website, regular performance testing is required to detect and optimize website performance. Well, in this article, we will introduce how to use PHP and Lighthouse for website performance testing.

Lighthouse is an open source tool developed by Google for testing the quality and performance of web applications. It not only tests the speed of a web page, but also evaluates its accessibility, best practices, and search engine optimization. Generally speaking, we can use Lighthouse in Chrome browser, but if you need to integrate Lighthouse testing into your CI/CD pipeline or script, PHP is a good choice.

First of all, you need to make sure you have installed PHP and have some basic knowledge of PHP. Next, we need to install the Lighthouse PHP package. You can do it using the following command in the terminal:

composer require nunomaduro/laravel-mix-phplighthouse --dev

Here we use the nunomaduro/laravel-mix-phplighthouse package because it provides simple and easy-to-use commands to run Lighthouse tests and can easily Integrated with Laravel Mix. If you are not using Laravel Mix, consider using other PHP Lighthouse packages.

After the installation is complete, we need to set some configuration options of Lighthouse. Create a lighthouse.php file in the root directory of the project and add the following content:

<?php
return [
    'temp_dir' => 'storage/app/lighthouse',
    'chrome_path' => '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
    'chrome_flags' => [
        '--show-paint-rects',
        '--headless',
    ],
    'audits' => [
        'first-contentful-paint',
        'largest-contentful-paint',
        'first-meaningful-paint',
        'speed-index',
        'total-blocking-time',
        'cumulative-layout-shift',
        'interactive',
        'uses-long-cache-ttl',
        'user-timings',
        'critical-request-chains',
        'redirects',
        'content-width',
        'font-display',
        'optimal-images',
    ],
];

In this configuration file, we define several options:

  • temp_dir: Specify Lighthouse The directory where test data is saved.
  • chrome_path: Specify the location of the Chrome browser.
  • chrome_flags: Specify some parameters of the Chrome browser, for example --headless means running in headless mode.
  • audits: Specify the audit items used in Lighthouse testing. Here we have selected some commonly used audit items, you can add or delete them according to your needs.

Next, create a file named test.php in the root directory of the project and add the following content:

<?php

require_once __DIR__.'/vendor/autoload.php';

use NunoMaduroPHPUnitLaravelTestCasesBrowserTestCase;

class LighthouseTest extends BrowserTestCase
{
    public function testPerformance()
    {
        $this->artisan('lighthouse https://www.example.com --json --no-interaction');
        $output = json_decode(file_get_contents(base_path('storage/app/lighthouse/report.json')), true);
        $this->assertArrayHasKey('audits', $output['categories']);
    }
}

In this file we created a file named LighthouseTest Test class, in this class, we define a test method called testPerformance. In this method, we use Artisan commands to run Lighthouse tests and save the results in JSON format to the specified directory. We then use the assertArrayHasKey method to check whether the Audits section is included in the test results.

Now you can run the test. Use the following command in the terminal to run the test:

./vendor/bin/phpunit --filter=LighthouseTest

This will run the testPerformance test method in the LighthouseTest test class we just created. If everything goes well, you will see that the test passed and a report.json file was generated in the storage/app/lighthouse directory, containing detailed information about the test results.

In addition to using the command line, we can also integrate Lighthouse testing into our PHP applications. Suppose we have a script named performancelog.php to record the performance of each page, then we can add the following code in this script to run the Lighthouse test:

require_once __DIR__.'/vendor/autoload.php';

use NunoMaduroPHPUnitLaravelTestCasesBrowserTestCase;

class LighthouseTest extends BrowserTestCase
{
    public function run()
    {
        $url = 'https://www.example.com';
        $this->artisan("lighthouse {$url} --json --no-interaction");
        $output = json_decode(file_get_contents(base_path('storage/app/lighthouse/report.json')), true);
        $categories = array_intersect_key($output['categories'], array_flip(['performance']));
        $score = array_sum(array_column($categories['performance']['auditRefs'], 'score')) / count($categories['performance']['auditRefs']);
        file_put_contents('performance.log', "{$url}: {$score}
", FILE_APPEND);
    }
}

$LighthouseTest = new LighthouseTest;
$LighthouseTest->run();

In this example, we use Lighthouse test The specified URL and log the score to the performance.log file. You can run this script periodically to monitor the performance of your web application.

In this article, we introduce how to use PHP and Lighthouse for website performance testing. Whether you are a web developer or a system administrator, you can use this tutorial to instrument and optimize the performance of your web applications.

The above is the detailed content of How to use PHP and Lighthouse for website performance testing. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn