innoge/laravel-speculation-rules-api

这是一个Laravel包,它为使用speculation rules api提供了一种简化的解决方案。

v0.1.0 2024-08-09 17:06 UTC

This package is auto-updated.

Last update: 2024-09-09 17:22:29 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

此Laravel包提供了一个简化的解决方案来利用Speculation Rules API,可显著加快您网站的性能。

注意

Speculation Rules API是一项实验性技术。
更多详细信息,请参阅MDN Web Docs

安装

您可以通过composer安装此包

composer require innoge/laravel-speculation-rules-api

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="laravel-speculation-rules-api-config"

这是已发布配置文件的内容

<?php

return [
    /*
    |--------------------------------------------------------------------------
    | Default Eagerness
    |--------------------------------------------------------------------------
    |
    | This value is the default eagerness for the prerender and prefetch rules.
    | You can set it to 'eager', 'moderate' or 'conservative'.
    |
    */

    'default_eagerness' => 'moderate',

    /*
    |--------------------------------------------------------------------------
    | Prerender Rules
    |--------------------------------------------------------------------------
    |
    | Here you may specify custom prerender rules for the application.
    |
    */

    'prerender' => [
//        [
//            'source' => 'list',
//            'urls' => ['page-1', 'page-2'],
//            'eagerness' => 'moderate',
//        ],
//        // parameter usage example
//        [
//            ['href_matches' => '/page-3/*'],
//            ['not' => ['href_matches' => '/page-3/*/*']],
//        ],
    ],

    /*
    |--------------------------------------------------------------------------
    | Prefetch Rules
    |--------------------------------------------------------------------------
    |
    | Here you may specify custom prefetch rules for the application.
    |
    */

    'prefetch' => [
//        [
//            'urls' => ['page-4'],
//            'referrer_policy' => 'no-referrer',
//            'eagerness' => 'moderate',
//        ],
    ],

];

请在head标签内添加以下Blade指令。

<html>
<head>
<!-- ... -->
@speculationRulesApi
</head>
...
</html>

用法

要预渲染或预取一个路由,只需将prerenderprefetch方法添加到路由定义中。

// prerender
Route::get('/page-1', function () {
    return view('...');
})->prerender();

// prefetch
Route::get('/page-1', function () {
    return view('...');
})->prefetch();

eagerness级别可以作为参数传递给prerenderprefetch方法,例如。

// prerender
Route::get('/page-1', function () {
    return view('...');
})->prerender('eager');

// prefetch
Route::get('/page-1', function () {
    return view('...');
})->prefetch('eager');

预渲染/预取

如果您预渲染一个URL,所有资源都将被获取,DOM将在后台渲染。这将避免您之前遇到的许多布局偏移。如果您预取一个页面,则只获取资源。这可以导致页面加载速度更快。

有关更多信息,请参阅以下页面

急切级别(从Chrome 122开始可用)

  • eager立即预渲染/预取URL。
  • moderate在链接悬停时预渲染/预取。
  • conservative仅在链接点击时预渲染/预取。

或者,您可以通过包配置使用Speculation Rules API,例如。

return [

    // ...

    'prerender' => [
        [
            'source' => 'list',
            'urls' => ['page-1'],
            'eagerness' => 'moderate',
        ],
    ],
    
    'prefetch' => [
        [
            'urls' => ['page-2'],
            'referrer_policy' => 'no-referrer',
            'eagerness' => 'moderate',
        ],
    ],
    
];

有关可用选项的更多信息,请参阅MDN Web Docs

测试

composer test

变更日志

有关最近更改的更多信息,请参阅CHANGELOG

贡献

有关详细信息,请参阅CONTRIBUTING

安全漏洞

有关如何报告安全漏洞的更多信息,请参阅我们的安全策略

致谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件