示例:实现 Service Worker 进行缓存

// service-worker.jsself.addEventListener(\\'install\\', function(event) {    event.waitUntil(        caches.open(\\'my-cache\\').then(function(cache) {            return cache.addAll([                \\'/\\',                \\'/index.html\\',                \\'/styles/main.css\\',                \\'/scripts/main.js\\',                \\'/images/logo.png\\'            ]);        })    );});self.addEventListener(\\'fetch\\', function(event) {    event.respondWith(        caches.match(event.request).then(function(response) {            return response || fetch(event.request);        })    );});

以编程方式运行 Lighthouse

您可以使用 Lighthouse Node 模块以编程方式运行 Lighthouse:

const lighthouse = require(\\'lighthouse\\');const chromeLauncher = require(\\'chrome-launcher\\');(async () => {    const chrome = await chromeLauncher.launch({chromeFlags: [\\'--headless\\']});    const options = {logLevel: \\'info\\', output: \\'html\\', onlyCategories: [\\'performance\\'], port: chrome.port};    const runnerResult = await lighthouse(\\'https://example.com\\', options);    // `.report` is the HTML report as a string    const reportHtml = runnerResult.report;    console.log(reportHtml);    // `.lhr` is the Lighthouse Result as a JS object    console.log(\\'Report is done for\\', runnerResult.lhr.finalUrl);    console.log(\\'Performance score was\\', runnerResult.lhr.categories.performance.score * 100);    await chrome.kill();})();

结论

获得完美的 Lighthouse 分数需要持续的努力和对最佳实践的承诺。通过专注于性能优化、可访问性增强、遵循最佳实践、改进 SEO 和实施 PWA 功能,您可以显着提高 Lighthouse 分数。定期测试和迭代是维护高质量 Web 应用程序并提供出色用户体验的关键。

请记住,虽然寻找捷径来提高 Lighthouse 分数可能很诱人,但真正的优化将带来更好的用户体验和更强大的 Web 应用程序。

","image":"http://www.luping.net/uploads/20240806/172292590466b1c350769a4.jpg","datePublished":"2024-08-06T14:31:43+08:00","dateModified":"2024-08-06T14:31:43+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 获得完美的灯塔分数:综合指南

获得完美的灯塔分数:综合指南

发布于2024-08-06
浏览:891

Achieving a Perfect Lighthouse Score: A Comprehensive Guide

Lighthouse 是 Google 开发的一款开源自动化工具,用于提高网页质量。它会根据各种指标审核您的网站,包括性能、可访问性、最佳实践、SEO 和渐进式 Web 应用程序 (PWA) 标准。虽然获得完美的 Lighthouse 分数具有挑战性,但通过系统优化是可能的。本指南将引导您完成增强网站并争取 100% Lighthouse 分数所需的步骤。

1. 性能优化

性能是 Lighthouse 分数的重要组成部分。以下是改进方法:

延迟加载

对图像和视频实施延迟加载,以确保它们仅在出现在视口中时加载。

document.addEventListener("DOMContentLoaded", function() {
    let lazyImages = [].slice.call(document.querySelectorAll("img.lazy"));

    if ("IntersectionObserver" in window) {
        let lazyImageObserver = new IntersectionObserver(function(entries, observer) {
            entries.forEach(function(entry) {
                if (entry.isIntersecting) {
                    let lazyImage = entry.target;
                    lazyImage.src = lazyImage.dataset.src;
                    lazyImage.classList.remove("lazy");
                    lazyImageObserver.unobserve(lazyImage);
                }
            });
        });

        lazyImages.forEach(function(lazyImage) {
            lazyImageObserver.observe(lazyImage);
        });
    } else {
        // Fallback for browsers without IntersectionObserver
        let lazyLoad = function() {
            let scrollTop = window.pageYOffset;
            lazyImages.forEach(function(img) {
                if (img.offsetTop 



压缩

对您的资源使用 Brotli 或 gzip 压缩,以减小其大小并加快加载时间。

缩小化

缩小 JavaScript、CSS 和 HTML 文件以删除不必要的字符并减小文件大小。

缓存

通过设置适当的缓存标头来利用浏览器缓存,以缩短回访者的加载时间。

关键CSS

内联关键 CSS 以确保页面的主要内容快速加载并推迟非关键 CSS。

减少 JavaScript 执行时间

优化您的 JavaScript 代码以最大限度地减少执行时间并确保您的网站保持响应能力。

2. 辅助功能增强

可访问性确保您的网站可以被尽可能多的人使用,包括残疾人。

色彩对比

确保文本和背景颜色有足够的对比度以便于阅读。

阿利亚角色

使用 ARIA 角色和属性来提高 Web 应用程序的可访问性。

制表符顺序

确保交互元素的逻辑 Tab 键顺序,以便于使用键盘进行导航。

标签

向表单元素添加描述性标签,以便屏幕阅读器可以访问它们。

3. 最佳实践

遵循最佳实践有助于确保您的网站安全且性能良好。

HTTPS

通过 HTTPS 为您的网站提供服务,以确保安全的数据传输。

避免混合内容

确保所有资源都通过 HTTPS 加载,以避免混合内容问题。

安全漏洞审核

定期审核您的代码是否存在安全问题并修复任何漏洞。

4、搜索引擎优化

SEO 有助于提高网站在搜索引擎结果中的可见度。

元标签

包含标题、描述和视口的相关元标记。

结构化数据

使用结构化数据(例如 JSON-LD)帮助搜索引擎更好地理解您的内容。

适合移动设备

确保您的网站适合移动设备且响应迅速,以满足各种设备上的用户的需求。

5.渐进式网络应用程序(PWA)

PWA 在网络上提供类似本机应用程序的体验。

清单文件

创建一个 Web 应用清单文件,其中包含使您的网站成为 PWA 所需的所有信息。

服务人员

实现服务工作线程来缓存资产并启用离线功能。

HTTPS

确保您的网站通过 HTTPS 提供服务,因为这是 PWA 的要求。

测试和迭代

定期进行 Lighthouse 审核

使用 Chrome DevTools 或 Lighthouse CLI 运行审核并解决任何问题。

监控性能

使用 WebPageTest、Google PageSpeed Insights 和 GTmetrix 等工具来监控网站的性能。

连续的提高

定期更新和优化您的代码库,以保持高性能和良好的用户体验。

示例:通过预加载优化资源加载

    
    

示例:实现 Service Worker 进行缓存

// service-worker.js
self.addEventListener('install', function(event) {
    event.waitUntil(
        caches.open('my-cache').then(function(cache) {
            return cache.addAll([
                '/',
                '/index.html',
                '/styles/main.css',
                '/scripts/main.js',
                '/images/logo.png'
            ]);
        })
    );
});

self.addEventListener('fetch', function(event) {
    event.respondWith(
        caches.match(event.request).then(function(response) {
            return response || fetch(event.request);
        })
    );
});

以编程方式运行 Lighthouse

您可以使用 Lighthouse Node 模块以编程方式运行 Lighthouse:

const lighthouse = require('lighthouse');
const chromeLauncher = require('chrome-launcher');

(async () => {
    const chrome = await chromeLauncher.launch({chromeFlags: ['--headless']});
    const options = {logLevel: 'info', output: 'html', onlyCategories: ['performance'], port: chrome.port};
    const runnerResult = await lighthouse('https://example.com', options);

    // `.report` is the HTML report as a string
    const reportHtml = runnerResult.report;
    console.log(reportHtml);

    // `.lhr` is the Lighthouse Result as a JS object
    console.log('Report is done for', runnerResult.lhr.finalUrl);
    console.log('Performance score was', runnerResult.lhr.categories.performance.score * 100);

    await chrome.kill();
})();

结论

获得完美的 Lighthouse 分数需要持续的努力和对最佳实践的承诺。通过专注于性能优化、可访问性增强、遵循最佳实践、改进 SEO 和实施 PWA 功能,您可以显着提高 Lighthouse 分数。定期测试和迭代是维护高质量 Web 应用程序并提供出色用户体验的关键。

请记住,虽然寻找捷径来提高 Lighthouse 分数可能很诱人,但真正的优化将带来更好的用户体验和更强大的 Web 应用程序。

版本声明 本文转载于:https://dev.to/koolkamalkishor/achieving-a-perfect-lighthouse-score-a-comprehensive-guide-1ai8?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何在Python中散列大文件而不消耗内存?
    如何在Python中散列大文件而不消耗内存?
    在Python中计算大文件的MD5哈希值Python的hashlib模块为计算加密哈希值提供了一个方便的接口。然而,对于大小超过系统内存的特别大的文件,直接使用 hashlib 可能会出现问题。解决方案:渐进式哈希为了解决这个问题,我们采用渐进式哈希通过以可管理的块读取文件。这种方法可确保对整个文件...
    编程 发布于2024-11-06
  • 使用 Maven 以及 PostgreSQL 数据库对 Java Spring Boot 应用程序进行 Docker 化
    使用 Maven 以及 PostgreSQL 数据库对 Java Spring Boot 应用程序进行 Docker 化
    Docker化 Spring Boot 应用程序涉及创建包含您的应用程序及其依赖项的 Docker 映像。这允许您以一种可以轻松共享并在任何安装了 Docker 的计算机上运行的方式打包应用程序。以下是对基于 Maven 的 Spring Boot 应用程序进行 Docker 化并在 Docker ...
    编程 发布于2024-11-06
  • 如何修复由 Google JAR 文件引起的 Android Studio 中的“GC Overhead Limit Exceeded”错误?
    如何修复由 Google JAR 文件引起的 Android Studio 中的“GC Overhead Limit Exceeded”错误?
    Google JAR 文件导致 Android Studio 中出现 GC 开销限制超出错误Android Studio 用户在以下情况下可能会遇到“GC 开销限制超出”错误使用 Google JAR 文件。此问题通常是由于为 dedex 进程分配的内存不足而引起的。要解决此问题,请考虑以下步骤:1...
    编程 发布于2024-11-06
  • 如何用 SQLSRV 替换 PHP 5.3 中已弃用的 MSSQL 扩展?
    如何用 SQLSRV 替换 PHP 5.3 中已弃用的 MSSQL 扩展?
    PHP 5.3 中 MSSQL 扩展的替代方案随着 PHP 5.3 中 MSSQL 扩展的弃用,寻求替代解决方案变得至关重要。本文深入研究 SQLSRV 扩展作为连接 Microsoft SQL 数据库的可行选项。根据 PHP 手册,PHP 5.3 及更高版本不再支持 MSSQL 扩展。作为替代,M...
    编程 发布于2024-11-06
  • 何时使用 AtomicBoolean:防止多线程应用程序中的数据不一致?
    何时使用 AtomicBoolean:防止多线程应用程序中的数据不一致?
    AtomicBoolean:Volatile Boolean 的更强大的替代品在多线程编程中,确保对共享数据的正确和一致的访问至关重要。一种常见的方法是使用 volatile 关键字将字段标记为共享,确保对变量的更改对其他线程立即可见。但是, volatile 关键字存在一些限制,可能会导致问题,特...
    编程 发布于2024-11-06
  • Jsoup 如何使 Java 中的网页抓取变得简单高效?
    Jsoup 如何使 Java 中的网页抓取变得简单高效?
    Java 中网页抓取的 HTML 解析在软件开发领域,有必要从网站中提取有价值的信息以用于各种目的。这种从在线来源提取数据的过程通常称为网络抓取。 Java 程序员可以使用一种多功能工具来完成此任务:HTML 解析器。强烈推荐的 Java HTML 解析器是 Jsoup。它的出色之处在于其用户友好的...
    编程 发布于2024-11-06
  • Jetmaker - 用于用 Python 构建分布式系统的开源框架
    Jetmaker - 用于用 Python 构建分布式系统的开源框架
    项目:Jetmaker 它是 Python 开发人员将多个分布式节点连接到一个系统中的框架,因此分布式应用程序可以访问彼此的数据和服务。它还提供了同步所有节点的工具,就像在多线程和多处理中所做的那样 Github链接:https://github.com/gavinwei121/Jetmaker 文...
    编程 发布于2024-11-06
  • 驯服电子邮件野兽:我的收件箱管理人工智能之旅
    驯服电子邮件野兽:我的收件箱管理人工智能之旅
    是否曾经感觉您的收件箱是一个数字九头蛇,为您回复的每个人发送两封新电子邮件? ??好吧,科技爱好者们,我决定用秘密武器来对付这个怪物:人工智能! ??️ 尤里卡时刻 想象一下:现在是凌晨 3 点,我周围都是空咖啡杯☕☕☕,盯着一个数量可与国会图书馆相媲美的收件箱。就在那时,我突然想到...
    编程 发布于2024-11-06
  • 为什么 Go 是智能合约开发的新竞争者
    为什么 Go 是智能合约开发的新竞争者
    区块链生态系统迅速发展,引入了创新的解决方案和平台,扩展了分布式账本技术的潜力。这项创新的核心是智能合约——自动执行的程序,无需中介即可自动执行协议。传统上,Solidity 一直是编写智能合约的首选语言,尤其是以太坊区块链。 Solidity 旨在在以太坊虚拟机 (EVM) 中运行,为开发人员提供...
    编程 发布于2024-11-06
  • 如何在等待线程完成时保持 tkinter GUI 响应?
    如何在等待线程完成时保持 tkinter GUI 响应?
    等待线程完成时冻结/挂起 tkinter GUI在 Python 中使用 tkinter GUI 工具包时遇到的常见问题执行某些操作时界面冻结或挂起。这通常是由于在主事件循环中使用了阻塞操作,例如加入线程。理解 tkinter Mainlooptkinter mainloop() 是负责处理用户输入...
    编程 发布于2024-11-06
  • C 和 C++ 中条件运算符的行为有什么区别?
    C 和 C++ 中条件运算符的行为有什么区别?
    条件运算符:剖析 C 与 C 的差异在编程领域,条件运算符 (?:) 充当计算表达式并根据结果返回特定值的简洁方法。虽然此运算符在 C 和 C 中的操作类似,但出现了一个微妙的区别,可能会影响代码执行。C:对左值的限制在 C 中,条件运算符对返回左值(驻留在特定内存地址的变量)施加限制。这意味着类似...
    编程 发布于2024-11-06
  • Java中如何高效地检查字符串中是否存在某个字符?
    Java中如何高效地检查字符串中是否存在某个字符?
    高效字符串字符验证在Java中,一个常见的任务是判断某个特定字符是否出现在字符串中。虽然传统方法涉及遍历字符串,但利用 indexOf() 的有效替代方法消除了循环的需要。IndexOf() 逐个字符扫描字符串,并返回指定字符所在的第一个实例的索引出现。如果该字符不存在,则返回值 -1。考虑检查字符...
    编程 发布于2024-11-06
  • 如何使用 PHP 为图像添加水印?
    如何使用 PHP 为图像添加水印?
    使用 PHP 向图像添加水印如果您正在使用允许用户上传图像的网站,则可能需要添加这些图像的水印,以防止未经授权的使用。添加水印可确保您的徽标或品牌在每个上传的图像上都可见。以下是如何在 PHP 中实现此目的:使用 PHP 函数PHP 手册提供了使用以下函数的综合示例:imagecreatefromp...
    编程 发布于2024-11-06
  • 如何抑制 Tensorflow 调试输出?
    如何抑制 Tensorflow 调试输出?
    抑制Tensorflow调试信息Tensorflow可能会在初始化时在终端中显示调试信息,包括加载的库和发现的设备。虽然此信息对于调试目的很有用,但它也会使控制台混乱并使跟踪重要消息变得困难。要禁用此调试信息,您可以使用 os.environ 模块:import os os.environ['TF_...
    编程 发布于2024-11-06
  • 如何确定我的 MySQL 查询是否利用了索引?
    如何确定我的 MySQL 查询是否利用了索引?
    识别 MySQL 索引的性能优化 MySQL 查询时,评估索引的有效性至关重要。获取索引性能指标要确定您的查询是否使用索引,请执行以下查询:EXPLAIN EXTENDED SELECT col1, col2, col3, COUNT(1) FROM table_name WHERE col1 ...
    编程 发布于2024-11-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3