示例:实现 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
浏览:151

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]删除
最新教程 更多>
  • 如何使用Regex在PHP中有效地提取括号内的文本
    如何使用Regex在PHP中有效地提取括号内的文本
    php:在括号内提取文本在处理括号内的文本时,找到最有效的解决方案是必不可少的。一种方法是利用PHP的字符串操作函数,如下所示: 作为替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式来搜索特...
    编程 发布于2025-04-25
  • Java字符串非空且非null的有效检查方法
    Java字符串非空且非null的有效检查方法
    检查字符串是否不是null而不是空的if (str != null && !str.isEmpty())Option 2: str.length() == 0For Java versions prior to 1.6, str.length() == 0 can be二手: if(str!= n...
    编程 发布于2025-04-25
  • 如何在Chrome中居中选择框文本?
    如何在Chrome中居中选择框文本?
    选择框的文本对齐:局部chrome-inly-ly-ly-lyly solument 您可能希望将文本中心集中在选择框中,以获取优化的原因或提高可访问性。但是,在CSS中的选择元素中手动添加一个文本 - 对属性可能无法正常工作。初始尝试 state)</option> < op...
    编程 发布于2025-04-25
  • 如何实时捕获和流媒体以进行聊天机器人命令执行?
    如何实时捕获和流媒体以进行聊天机器人命令执行?
    在开发能够执行命令的chatbots的领域中,实时从命令执行实时捕获Stdout,一个常见的需求是能够检索和显示标准输出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    编程 发布于2025-04-25
  • Java数组中元素位置查找技巧
    Java数组中元素位置查找技巧
    在Java数组中检索元素的位置 利用Java的反射API将数组转换为列表中,允许您使用indexof方法。 (primitives)(链接到Mishax的解决方案) 用于排序阵列的数组此方法此方法返回元素的索引,如果发现了元素的索引,或一个负值,指示应放置元素的插入点。
    编程 发布于2025-04-25
  • 解决MySQL插入Emoji时出现的\\"字符串值错误\\"异常
    解决MySQL插入Emoji时出现的\\"字符串值错误\\"异常
    Resolving Incorrect String Value Exception When Inserting EmojiWhen attempting to insert a string containing emoji characters into a MySQL database us...
    编程 发布于2025-04-25
  • 如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求模拟浏览器行为,以及伪造的用户代理提供了一个用户 - 代理标头一个有效方法是提供有效的用户式header,以提供有效的用户 - 设置,该标题可以通过browser和Acterner Systems the equestersystermery和操作系统。通过模仿像Chro...
    编程 发布于2025-04-25
  • 如何使用组在MySQL中旋转数据?
    如何使用组在MySQL中旋转数据?
    在关系数据库中使用mySQL组使用mySQL组进行查询结果,在关系数据库中使用MySQL组,转移数据的数据是指重新排列的行和列的重排以增强数据可视化。在这里,我们面对一个共同的挑战:使用组的组将数据从基于行的基于列的转换为基于列。 Let's consider the following ...
    编程 发布于2025-04-25
  • HTML格式标签
    HTML格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2025-04-25
  • Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    Async Void vs. Async Task在ASP.NET中:为什么Async Void方法有时会抛出异常?
    在ASP.NET async void void async void void void void void的设计无需返回asynchroncon而无需返回任务对象。他们在执行过程中增加未偿还操作的计数,并在完成后减少。在某些情况下,这种行为可能是有益的,例如未期望或明确预期操作结果的火灾和...
    编程 发布于2025-04-25
  • 在JavaScript中如何并发运行异步操作并正确处理错误?
    在JavaScript中如何并发运行异步操作并正确处理错误?
    同意操作execution 在执行asynchronous操作时,相关的代码段落会遇到一个问题,当执行asynchronous操作:此实现在启动下一个操作之前依次等待每个操作的完成。要启用并发执行,需要进行修改的方法。 第一个解决方案试图通过获得每个操作的承诺来解决此问题,然后单独等待它们: co...
    编程 发布于2025-04-25
  • 在GO中构造SQL查询时,如何安全地加入文本和值?
    在GO中构造SQL查询时,如何安全地加入文本和值?
    在go中构造文本sql查询时,在go sql queries 中,在使用conting and contement和contement consem per时,尤其是在使用integer per当per当per时,per per per当per. [&​​&&&&&&&&&&&&&&&默元组方法在...
    编程 发布于2025-04-25
  • 如何从Google API中检索最新的jQuery库?
    如何从Google API中检索最新的jQuery库?
    从Google APIS 问题中提供的jQuery URL是版本1.2.6。对于检索最新版本,以前有一种使用特定版本编号的替代方法,它是使用以下语法:获取最新版本:未压缩)While these legacy URLs still remain in use, it is recommended ...
    编程 发布于2025-04-25
  • 如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    为有效的slug生成首先,该函数用指定的分隔符替换所有非字母或数字字符。此步骤可确保slug遵守URL惯例。随后,它采用ICONV函数将文本简化为us-ascii兼容格式,从而允许更广泛的字符集合兼容性。接下来,该函数使用正则表达式删除了不需要的字符,例如特殊字符和空格。此步骤可确保slug仅包含...
    编程 发布于2025-04-25
  • 如何在php中使用卷发发送原始帖子请求?
    如何在php中使用卷发发送原始帖子请求?
    如何使用php 创建请求来发送原始帖子请求,开始使用curl_init()开始初始化curl session。然后,配置以下选项: curlopt_url:请求 [要发送的原始数据指定内容类型,为原始的帖子请求指定身体的内容类型很重要。在这种情况下,它是文本/平原。要执行此操作,请使用包含以下标头...
    编程 发布于2025-04-25

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

Copyright© 2022 湘ICP备2022001581号-3