基于JCEF实现网页资源性能分析

文章目录

    • 1、需求
    • 2、实现代码
    • 3、运行效果

1、需求

在使用chrome浏览器访问页面时,浏览器自带的开发者工具可以查看页面每个资源的资源大小和加载时间。
在这里插入图片描述
这个功能可以让我们直接知道接口或资源的耗时情况和大小情况,如果存在性能问题,可以进行分析处理。
但是如果系统的功能页面比较多,每个页面都一个一个分析查看的,会比较耗工作量。功能测试大多是由测试工程师进行,测试工程师更关注功能的完善,不会统计每个页面的性能。运营人员在运营过程中,也会错误上传一些过大的,也需要测试人员在访问这个资源并且同时打开了开发者工具时才能发现。

2、实现代码

本文是基于JCEF框架(Chromium嵌入式框架CEF,允许将Web浏览器嵌入到Java桌面应用中),简单封装了基本浏览器功能,在JCEF的内部接口类CefRequestHandler中实现记录加载时间和资源大小。

public class RequestHandler extends CefResourceRequestHandlerAdapter implements CefRequestHandler {private final Frame owner_;// 记录每个请求的耗时public Map<String, Long> table = new Hashtable<>();public RequestHandler(Frame owner) {owner_ = owner;}/*** 记录http请求结束的时间,并保存到文件*/@Overridepublic void onResourceLoadComplete(CefBrowser browser, CefFrame frame, CefRequest request,CefResponse response, CefURLRequest.Status status, long receivedContentLength) {String requestUrl = request.getURL();String browserUrl = browser.getURL();long size = receivedContentLength;long start = table.getOrDefault(requestUrl, -1L);long takeTime = System.currentTimeMillis() - start;Map<String, String> mapTemp = new HashMap();response.getHeaderMap(mapTemp);JSONObject map = JSONUtil.parseObj(JSONUtil.toJsonStr(mapTemp).toLowerCase());String contentType = map.getStr("content-type", "");String server = map.getStr("server", "");String xPoweredBy = map.getStr("x-powered-by", "");NetworkLog log = new NetworkLog(requestUrl, browserUrl, size, takeTime, contentType, server, xPoweredBy, response.getStatus());FileCsvUtil.writeNetworkLog(log);}/*** 记录http请求开始的时间*/@Overridepublic boolean onBeforeResourceLoad(CefBrowser browser, CefFrame frame, CefRequest request) {String url = request.getURL();table.put(url, System.currentTimeMillis());return false;}// 这里省略其它接口实现代码
}

在JCEF初始化时,需要把RequestHandler添加进去。

public class BrowserCef extends JFrame {private CefApp cefApp_;private CefClient client_;// 省略的代码private void initCef() {try {CefAppBuilder builder = new CefAppBuilder();builder.getCefSettings().cache_path = cachePath.getAbsolutePath();// 远程调试http://127.0.0.1:9999/,支持selenium// builder.getCefSettings().remote_debugging_port = 9999;builder.getCefSettings().windowless_rendering_enabled = false;builder.setAppHandler(new MavenCefAppHandlerAdapter() {@Overridepublic void stateHasChanged(CefApp.CefAppState state) {if (state == CefApp.CefAppState.TERMINATED) System.exit(0);}});cefApp_ = builder.build();client_ = cefApp_.createClient();// 监听页面资源请求client_.addRequestHandler(new RequestHandler(BrowserCef.this));// 省略的代码}public static void main(String[] args) {System.setProperty("file.encoding","UTF-8");System.setProperty("sun.java2d.dpiaware", "true");try {UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());EventQueue.invokeLater(() -> {try {BrowserCef frame = new BrowserCef();frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}});} catch (Exception e) {e.printStackTrace();}}
}

3、运行效果

先使用jcef访问所有网页,然后查看耗时
在这里插入图片描述
在访问时,会把资源的大小和加载时间保存到csv文件。
在这里插入图片描述
使用 excel打开这个文件,可以所有访问过的资源文件性能。
在这里插入图片描述

JCefB应用下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/18338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于springboot+vue的社区医院管理服务系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

AST反混淆|对一段非常复杂的混淆代码深度剖析与还原

关注它&#xff0c;不迷路。 本文章中所有内容仅供学习交流&#xff0c;不可用于任何商业用途和非法用途&#xff0c;否则后果自负&#xff0c;如有侵权&#xff0c;请联系作者立即删除&#xff01; 1.代码片段 ((((ld0 ((ld1 (ld1 Uint8Array) && undefined…

SQLI-labs-第二十七关和第二十七a关

目录 第二十七关 1、判断注入点 2、判断数据库 3、判断表名 第二十七a关 第二十七关 知识点&#xff1a;空格、select、union等过滤绕过 思路&#xff1a; 通过分析源码&#xff0c;我们可以知道对用户的输入进行过滤&#xff0c;对空格、select、union等进行了过滤&…

clickhouse——clickhouse单节点部署及基础命令介绍

clickhouse支持运行在主流的64位CPU架构的linux操作系统之上&#xff0c;可以通过源码编译&#xff0c;预编译压缩包&#xff0c;docker镜像和rpm等多种方式进行安装。 一、单节点部署 1、安装curl工具 yum install -y curl 2、添加clickhouse的yum镜像 curl -s https://pack…

R包Colorfindr识别图片颜色|用刀剑神域方式打开SCI科研配色

1.前言 最近忙里偷闲&#xff0c;捣鼓一下配色&#xff0c;把童年回忆里的动漫都搬进来&#xff0c;给科研信仰充值吧&#xff5e; 提取颜色之前写过一个Py的&#xff0c;那个很准确不过调参会有点麻烦。这里分享一个比较懒人点的R包吧&#xff0c;虽然会有一定误差&#xff…

数据分析之统计学基础

数据分析是现代企业和科研中不可或缺的一部分&#xff0c;而统计学是数据分析的基石。在本篇博客中&#xff0c;我们将介绍统计学的基础知识&#xff0c;涵盖数据类型、描述性统计&#xff08;集中趋势、离散程度和偏差程度&#xff09;&#xff0c;并通过代码实例加以说明。 …

redis数据类型之string,list

华子目录 key操作说明SCAN cursor [MATCH pattern] [COUNT count]dump与restorekeys 通配符 示例演示 string说明setbit key offset valuegetbit key offsetsetrange key offset value List结构图相关命令lrem key count valueltrim key count value示例&#xff1a;使用 LTRIM…

Octo:伯克利开源机器人开发框架

【摘要】在各种机器人数据集上预先训练的大型策略有可能改变机器人学习&#xff1a;这种通用机器人策略无需从头开始训练新策略&#xff0c;只需使用少量领域内数据即可进行微调&#xff0c;但具有广泛的泛化能力。然而&#xff0c;为了广泛应用于各种机器人学习场景、环境和任…

IC618 虚拟机 EDA Calibre2019 Hspice2018 Spectre19.1

虚拟机包含 CentOS 7.9 Cadence IC618 Calibre 2019 Hspice 2018 Spectre19.1 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1aMtPO2G5ad-x5BtIJjCDig?pwdxcii 提取码&#xff1a;xcii

闹掰了? 传Google Pixel 10芯片转单了 | 百能云芯

根据最新消息&#xff0c;Google Tensor G5处理器可能将选择台积电作为其新的生产伙伴&#xff0c;并计划在2025年的Pixel 10系列手机上亮相。这一消息由Android Authority率先报道&#xff0c;引起了业界的广泛关注。 据悉&#xff0c;自从2021年Google推出自研的Tensor处理器…

14.微信小程序之地理定位功能

目录 1.地理定位介绍 1.1 申请开通 1.2 使用方法 2.拒绝授权后的解决方案 3.开通腾讯位置服务 4.LBS 逆地址解析 1.地理定位介绍 小程序地理定位是指通过小程序开发平台提供的 API&#xff0c;来获取用户的地理位置信息。用户在使用小程序时&#xff0c;可以授权小程序获…

【前端常见面试题整理】

开放性的题目 自我介绍 突出学习能力 我想换工作的主要原因是 介绍项目 平时是如何学习前端开发的 主要就是两个途径&#xff0c;一个是查阅官方文档&#xff0c;然后就是在网上查找技术资料或者视频去学习。平时没事的时候也会看看github&#xff0c;同时关注一些社区和IT网…

医疗小程序源码SpringBoot2.X + Vue + UniAPP全栈开发

源码说明&#xff1a; 看到好多坛友都在求SpringBoot2.X Vue UniAPP&#xff0c;全栈开发医疗小程序 – 带源码课件&#xff0c;我看了一下&#xff0c;要么链接过期&#xff0c;要么课件有压缩密码。 特意整理了一份分享给大家&#xff0c;个人认为还是比较全面的。 希望…

【数据结构】-- 栈

栈 引入&#xff1a; 一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。栈中的元素遵循先进后出的原则&#xff0c;先入栈的元素总是先后出栈。 压栈&#xff1a;栈的插入操作叫…

04--SpringBoot热部署与日志

1、热部署 1.1 引言 为了进一步提高开发效率&#xff0c;SpringBoot为我们提供了全部项目热部署&#xff0c;日后在开发过程中修改了部分代码或者相关配置文件之后&#xff0c;不需要再重启服务使其生效。在项目中开启了全局热部署之后&#xff0c;只需要在修改之后等待几秒钟…

广东省保健食品行业协会批复成为“世界酒中国菜”活动指导单位

广东省保健食品行业协会正式批复成为“世界酒中国菜”系列活动指导单位&#xff0c;共促餐饮文化交流发展 近日&#xff0c;广东省保健食品行业协会正式批复荐酒师国际认证&#xff08;广州&#xff09;有限公司&#xff0c;成为备受瞩目的“世界酒中国菜”系列活动的指导单位…

填补领域空白!TerDiT:首次探索大规模DiT模型量化问题(MMLab出品)

论文链接&#xff1a;https://arxiv.org/pdf/2405.14854 项目链接&#xff1a;https://github.com/Lucky-Lance/TerDiT 最近在大规模预训练的文本到图像扩散模型方面的发展显著提高了高保真图像的生成能力&#xff0c;特别是基于transformer架构的扩散模型&#xff08;DiTs&a…

奈飞CEO最新访谈:抢走你饭碗的不是AI,而是能熟练使用AI的人

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

新书推荐:7.5 goto、break、continue语句

本节必须掌握的知识点&#xff1a; 示例二十六 代码分析 汇编解析 示例二十七 代码分析 汇编解析 7.5.1 示例二十六 ■goto语句&#xff1a;无条件转移语句。 语法格式&#xff1a; goto label; label : 代码; ●语法解析&#xff1a; 执行到goto语句时&#xff0c;则无…

Jetpack架构组件_1.基本知识

1.什么是Jetpack&#xff1f; Jetpack 是一个由多个库组成的套件&#xff0c;可帮助开发者遵循最佳做法、减少样板代码并编写可在各种 Android 版本和设备中一致运行的代码&#xff0c;让开发者可将精力集中于真正重要的编码工作。Jetpack 包含一系列 Android 库&#xff0c;它…