CDN静态资源加速&Lighthouse性能监测

京东云开发者
• 阅读 307

本文主要介绍了cdn加速在项目中的实现,以及使用Lighthouse对前端性能指标进行监测打分。

Lighthouse简介

Lighthouse是谷歌开发并开源的web性能测试工具,用于改进网络应用的质量,可以将其作为一个Chrome扩展程序运行,或从命令行运行。只需要为其提供一个需要审查的地址,Lighthouse就会对页面进行一连串的测试,生成一个有关页面性能的报告。

在浏览器的调试工具中默认就存在lighthouse选项,只需要切换至lighthouse,在右侧的选项区选中需要的选项。点击生成报告。

CDN静态资源加速&Lighthouse性能监测

从报告中可以看出某网站的首屏时间是0.6s,可交互时间是1.5s,总阻塞时间是10ms。最大绘制时间是1s。通过这些性能指标就可以看到在哪方面存在性能瓶颈。

CDN静态资源加速&Lighthouse性能监测

在下方会对渲染进行拍照截图,如果空白页面较多也能体现网站白屏时间过长。下面还会给一些优化建议。比如某些资源过大,加载时间过长等,当然这些建议不并一定都是对的,只是一些建议。

CDN静态资源加速&Lighthouse性能监测

接下来我们就使用Lighthouse对项目进行监测衡量,使用cdn静态资源,对项目进行优化加速。

CDN静态资源加速实现

vue3 项目代码改造

// vue.config.js

const CDN = {

js: [

'https://unpkg.com/vue@3.2.13/dist/vue.global.prod.js',

'https://cdn.bootcdn.net/ajax/libs/vue-router/4.0.14/vue-router.global.prod.js',

'https://unpkg.com/vue-demi@0.13.11/lib/index.iife.js',

'https://unpkg.com/pinia@2.0.13/dist/pinia.iife.prod.js',

'https://unpkg.com/axios@0.26.1/dist/axios.min.js',

'https://unpkg.com/element-plus@2.1.7/dist/index.full.min.js',

],

css: [

'https://unpkg.com/element-plus@2.1.7/dist/index.css',

]

}

const objExternals = {

vue: 'Vue',

'element-plus': 'ElementPlus',

'vue-router': 'VueRouter',

'pinia': 'Pinia',

'axios': 'axios'

}

module.exports = {

chainWebpack: config => {

// 配置,将当前页定义的cdn值传到主页面(index.html)

config.plugin('html').tap(args => {

// 这里我是除本地环境,其余均使用CDN,可自己选择是否配置

args[0].cdn = process.env.NODE_ENV === 'development' ? {} : CDN

return args;

});

},

configureWebpack: {

...

// 定义webpack打包配置

externals: process.env.NODE_ENV === 'development' ? {} : objExternals,

},

}

// public文件夹下 index.html 添加如下代码

...

<% for (var i in htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.css) { %>

<% } %>

<%= htmlWebpackPlugin.options.title %>

<% for (let i in htmlWebpackPlugin.options.cdn && htmlWebpackPlugin.options.cdn.js) { %>

<% } %>

行云环境下相关配置改造

行云子应用编译后只生成index.js,没有index.html,新版的plugin-webpack支持修改index.js,可以优先加载外部资源。

but!结果是失败的,外部资源加载到最外层的行云基座上,vue版本、全局的css样式等会直接影响到所有的行云子应用。需要后续行云优化,增加沙箱隔离。

所以,这里只做一个演示,而不做更深层次的优化完善。

文档链接: JModule

// plugin-webpack 依赖需升级到0.4.4版本

// "@jmodule/plugin-webpack": "^0.4.4",

// .jmodule.conf.js

const cdnJsList = [

'https://unpkg.com/vue@3.2.13/dist/vue.global.prod.js',

'https://cdn.bootcdn.net/ajax/libs/vue-router/4.0.14/vue-router.global.prod.js',

'https://unpkg.com/vue-demi@0.13.11/lib/index.iife.js',

'https://unpkg.com/pinia@2.0.13/dist/pinia.iife.prod.js',

'https://unpkg.com/axios@0.26.1/dist/axios.min.js',

'https://unpkg.com/element-plus@2.1.7/dist/index.full.min.js',

]

const cdnCssList = [

'https://unpkg.com/element-plus@2.2.17/dist/index.css'

]

module.exports = {

mode: 'modules',

assetsModifier: (assetsJson) => {

assetsJson.js = cdnJsList.concat(assetsJson.js)

assetsJson.css = cdnCssList.concat(assetsJson.css)

return assetsJson

}

};

CDN加速改造前后数据对比

使用的项目: 流水线-镜像市场

我们从三个维度进行衡量:打包大小、打包用时、lighthouse性能评分

改造前

打包大小

CDN静态资源加速&Lighthouse性能监测

打包用时

// 各模块打包计时插件 speed-measure-webpack-plugin

// 下载依赖

npm i speed-measure-webpack-plugin

// vue.config.js

const SpeedMeasurePlugin = require("speed-measure-webpack-plugin");

const smp = new SpeedMeasurePlugin();

module.exports = {

configureWebpack: smp.wrap({

...

}),

}

打包结果如图,统计五次次打包数据:

CDN静态资源加速&Lighthouse性能监测

lighthouse性能评分

独立域名

CDN静态资源加速&Lighthouse性能监测

行云子应用

CDN静态资源加速&Lighthouse性能监测

改造后

打包大小

CDN静态资源加速&Lighthouse性能监测

打包用时

CDN静态资源加速&Lighthouse性能监测

lighthouse性能评分

独立域名

CDN静态资源加速&Lighthouse性能监测

行云子应用

CDN静态资源加速&Lighthouse性能监测

总结

从上面数据可以看出,经过CDN加速后,项目打包大小减小80%左右,打包用时减少50%以上,lighthouse性能评分也有明显提高。

lighthouse是一款非常好的web性能测试工具,通过监测打分并给出相应的优化建议,我们可以根据其建议对项目进行性能优化。

作者:京东零售 刘慧斌

来源:京东云开发者社区 转载请注明来源

点赞
收藏
评论区
推荐文章
Stella981 Stella981
3年前
FikkerCDN主控
FikkerCDN主控系统是一个免费的,开源的CDN加速管理平台,可对大量FikkerCDN节点进行集中管理,系统分为管理端和用户端,可以快速搭建好CDN运营平台,3分钟建立自有的CDN节点群;如果你有多余的服务器资源,就可以通过FikkerCDN快速的建立起自己的CDN加速节点,国内、国外、联通、电信等线路任由你分发。每部署一个CDN节点只需
Stella981 Stella981
3年前
GLUT Tutorials 17:子窗口的reshape
博客转自:http://www.lighthouse3d.com/tutorials/gluttutorial/subwindowreshape/(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.lighthouse3d.com%2Ftutorials%2Fgluttutor
Wesley13 Wesley13
3年前
CDN是什么?
CDN是ContentDeliveryNetwork的简称,即“内容分发网络”的意思。一般我们所说的CDN加速,一般是指网站加速或者用户下载资源加速。CDN是通过在网络各处放置节点服务器,形成在现有的互联网基础之上的一层智能虚拟网络。CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户
Stella981 Stella981
3年前
Memcached 介绍 协议 结构 分布式 一致性
Memcached简介:    Memcached是一款开源、高性能、分布式内存对象缓存系统,可应用各种需要缓存的场景,其主要目的是通过降低对Database的访问来加速web应用程序。它是一个基于内存的“键值对”存储,用于存储数据库调用、API调用或页面引用结果的直接数据,如字符串、对象等。    Memcached是以LiveJour
Wesley13 Wesley13
3年前
Java 应用发布后,需要关注的7个性能指标
在某个重大发布之后,都需要记录相应的指标,本文介绍了最重要的几个Java性能指标,包括响应时间和平均负载等。为理解应用程序在生产环境中如何运行,就需要遵循一些Java性能指标。在以前,当软件被发布后,开发者是没有方法去了解它在生产环境中的运行情况;而现在,几乎任一个你可以想到的指标都可以被监测和报告。时下,开发者面临的问题并不是缺乏信息,
艾木酱 艾木酱
2年前
应用实战|使用DBGate管理MemFireDB数据库
MemFireCloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专注于编写前端应用程序代码,加速WEB或APP应用开发。简介DbGate是一款开源、开源、跨平台的数据库管理功能
CDN与前端技术
CDN(ContentDeliveryNetwork)是一种广泛应用于网络加速和内容分发的技术。它通过在全球各地部署服务器节点,将静态资源如图片、CSS和JavaScript文件等缓存到离用户最近的节点上,从而提供更快速和可靠的内容交付。在前理、前端与CDN的结合以及一些最/佳实践。
实践指南-前端性能提升 270% | 京东云技术团队
本文详细介绍了一个前端项目优化的详细过程,从优化前的问题分析,到具体的优化措施,最终实现了前端性能提升了近3倍。同时也将性能指标落到监控平台,实现可视化的监控前端性能指标。
小白学大数据 小白学大数据
2个月前
如何使用 Lua 脚本进行更复杂的网络请求,比如 POST 请求?
在当今的互联网世界中,网络请求是数据交换的基础。无论是在开发Web应用程序、自动化测试还是进行数据抓取,掌握如何发送网络请求是一项基本技能。Lua,作为一种轻量级、高性能的脚本语言,经常被用于这些场景。本文将详细介绍如何使用Lua脚本进行更复杂的网络请求,