整套解决方案:前端性能优化之数据采集Performance API实战篇
优采云 发布时间: 2022-10-29 16:22整套解决方案:前端性能优化之数据采集Performance API实战篇
目录
问题状态
1 简介
为了量化页面性能指标数据,量化页面性能优化措施所达到的优化效果,为合作伙伴提供准确可靠的性能数据报告,研发方需要对现有性能数据进行兼容性和功能性采集。研究,以利于后续制定数据采集计划。
2. 问题状态
性能数据目前在前端业务中非常重要,但结果处于无从下手的阶段,基本为零。系统用户、客户和内部需求都需要可测量的性能数据。
三、术语说明
什么是前端性能数据,简单来说就是window.performance。前端性能数据采集是获取并上报需要的性能数据到自己的后端或日志系统。需要后续分析和监控处理。这里只涉及性能相关的数据采集。
4.数据采集
性能采集方式中的性能数据:
主动采集-getEntry系列方法被动监控-Observer方法原创方法-performance.timing4.1主动采集
性能附加了三种方法,可以通过get来获取性能数据。获取的性能数据为PerformanceEntry类型。规范要求后续所有不同类型性能数据的实现都需要实现以下接口,可以通过以下接口获取。to,数据类型继承PerformanceEntry。在此基础上实现的新性能 API。
使用示例如下:
4.2 被动监控
您可以通过 PerformanceObserver 注册*敏*感*词*函数来获取性能数据。示例如下:
4.3 性能.时序
如果浏览器不支持以上两种方式,可以通过性能对象的计时属性获取早期版本导航类的性能数据。这个API比较早,采集接收的数据格式是时间戳格式,兼容性很好,但是时间精度可能达不到要求。
4.4 问题描述
资源类的性能数据数量有限。如果超出限制,将触发 performance.onresourcetimingbufferfull。需要通过Performance.clearResourceTimings()清空性能数据缓冲区,否则新的资源类性能数据将不被记录,无法使用。.
五、行业标准现状
网上关于性能的帖子真的很多。页面加载时间节点和流程的常见图也有几种,但并不统一。人们眼花缭乱,不知道那是什么。比如chrome中得到的性能,为什么外层有performace.timing,入口中可以得到类似的导航时序,为什么有导航过程*敏*感*词*,字段略有不同。下面对性能数据相关的规范进行说明,以方便后续对相关API的理解。
与性能数据相关的规格列表:
5.1 性能数据分类
主要性能数据类型有:
navigation - 导航类,页面打开的整体流程数据 resource - 页面中的资源,如css js img ajax 请求等 标记/衡量用户可以根据业务需求按需做的性能数据 paint - 渲染类5.2 性能数据格式(高分辨率时间级别 2)
说到性能数据,我们首先要说的是性能数据的格式。上面提到的导航性能数据导航最原创的方式就是通过performance.timing。从截图可以看出,包括performance.timeOrigin在内的数据都是时间戳格式。在某些情况下,这种时间精度可能是可能的。它不能满足人们对性能数据的度量要求,所以W3C提出了高进度时间戳DOMHighResTimeStamp的定义,所有后续的性能数据规范返回时间都需要基于这个API定义来实现,并返回高精度的时间戳。
资源类数据的原创时间戳格式与高进度时间戳格式对比:
5.3 数据采集方法(Performance Timeline Level 2)
基于高精度时间戳的定义,性能时间线定义了获取数据的方法,包括getEntry接口和PerformanceObserver的定义。有了时间的定义、格式和获取方式,下面是不同类型性能数据的具体实现。
5.4. 导航计时
Navigation Timing Level 2 定义了导航类性能数据的格式。定义的时间字段与加载过程的对应关系如下。这张图片来自规范的第二版。如果您看到另一张图片,它来自规范的第一版。不要混淆。
导航可以通过观察者导航类型的数据获得。
如果观察者不支持,可以通过getEntry获取(坑:浏览器可能支持getEntry获取数据,但是如果无法获取导航类型,只能获取资源,这里需要进行异常处理)
如果以上两种方法都无法获取,那么就取原方法performance.timing来获取。
5.5. 资源计时
resource 是资源类的性能数据,包括页面 css js img 文件加载、ajax 请求等。
从资源所涉及的数据范围可以想象,资源数据会很多,浏览器无法记录无限的记录。于是就有了缓冲区的概念。
设置缓冲区:Performance.setResourceTimingBufferSize()
*敏*感*词*缓冲区满事件:Performance.onresourcetimingbufferfull
清除缓冲区:Performance.clearResourceTimings()
资源 API 有两个版本。第一个版本的默认缓冲区大小为 150,第二个版本建议最小缓冲区大小为 250。
另外,如果buffer类的性能数据想要获取的不是PerformanceEntry定义的tcp http dns进程的数据,就会出现跨域问题。如果需要采集跨域相关数据,需要添加资源跨域头Timing -Allow-Origin。(注意,如果ajax类的性能数据需要获取服务端的耗时,可以通过ServerTiming规范中指定的Server-Timing头获取服务端数据serverTiming。这个时间格式的获取是也受跨域头限制。如果请求是跨域请求,则需要两个响应,这样浏览器才能采集去服务器,取serverTiming)
6.总结
页面端可以使用性能数据采集API做的功能包括:
通用数据采集:(2)自定义数据采集:
页面可以根据业务需要使用性能API自行管理采集。
其中,需要注意的问题有:
7. 官方规范文件
官方相关规范文件的主要内容如下:
[High Resolution Time Level 2]() 高精度时间戳 DOMHighResTimeStamp 定义 [Performance Timeline]()[Performance Timeline Level 2]()
2的主要内容如下:
核心方法:网站收录完美解决的SEO必备手段
热门文章板块:所谓热门文章,即当前网站或点击量高的文章类。从文章页面链接到这些文章页面是通过链接传递权重的最佳方式,可以显着提高此类页面的排名。
编辑推荐版块:编辑推荐可能会夹杂着广告文章,也会有一些对行业非常重要的文章,增加了我们自定义文章的曝光自由度>,可以更灵活地使用。
随机文章推荐:所谓随机,即每次生成网页时从其他类别中随机选择的文章。这是 SEO 的一种交叉链接做法。如果随机推荐机制是每次刷新网页时这里检索到的文章都不一样,也可以增加网页的更新频率。
其他:当然,这些推荐逻辑的使用范围很广,取决于不同公司的平台和技术能力。可能还有其他的,但这里我要强调的是,与当前网页主题关系越密切的应该调用越多,与当前文章主题相关或弱相关的应该越细化。
原创Degrees:如果你能原创完成每一件作品文章,那就最好了。如果不行,尽量保证文章的句子连贯,上下段落的意思连贯。让用户读一读,别上大江山大河,下一个就是毛毛雨。
关于飓风算法:百度推出飓风算法,就是要打击“不良”采集行为,这里重点关注bad这个词。所谓不好的不仅仅是采集,版面不好,内容不连贯,不能满足搜索用户的需求。全机械化文章。所以正常的 采集 行为被别人唾弃,但搜索引擎本身不会惩罚它。只要您为用户提供更优质、更准确的内容。你很好。
网页的速度如何影响收录?
网页的打开速度对收录也有至关重要的影响。首先需要在收录之前有爬虫爬取,爬取爬取耗时,而搜索引擎爬虫对网站的爬取,都有配额。假设时间配额是 10 分钟,那么你的 网站 访问速度是 50ms,也就是说 10 分钟除以 50ms = 200 次爬取,但是如果你将访问速度提高到 25ms 呢?也就是说爬虫会同时爬取400次配额纬度。它已经翻了一番。如果单独考虑,收录也会提高,排名也会提高。自然流量增加了吗?
此外,网页的打开速度也会影响用户的体验。百度之前提到,在移动端,如果一个网页打开超过3秒,就会被百度视为垃圾页面。试想一下,我们谁愿意等很久才能在百度上找东西呢?如果要等一会才开几个网站,那你会说百度体验不好或者说网站不是好呢?
提高访问速度的方法有很多,我会在下面列出其中的一些,但不限于这些:
gzip压缩:压缩你当前的网页,从而减小网页本身的大小;
代码简化:源码中一些可以集成在一起的内容,比如html页面中写的一些js代码、css代码等,可以通过引入js和css文件来解决,文件本身就少一些是*敏*感*词*的,越少越好。还有很多注释代码,比如一些网页,删除不必要的代码,留下有用的。
CDN加速:使用CDN加速技术对你的网站 ip节点进行加速,提高网站的速度;
amp/mip:启用网页加速技术,对整个站点的源码进行改造,从而提高网页的整体加载时间;
缓存机制:所谓缓存机制,就是将用户浏览过的元素缓存起来,当再次出现请求时,直接从用户的浏览器中读取,无需请求服务器。这将改善 网站 真实问题的加载时间。就像您网页的徽标图片一样,它是存在于整个网站上的图片。当用户打开主页时,缓存机制将这张图片缓存在用户的浏览器中。当用户通过首页点击其他页面时,直接从用户的浏览器读取,不会再从服务器发起请求。
Etag的使用:Etag是http协议中的一串token,用来标记一个网页是否发生了变化。通俗的讲,每次网页变化时,Etag的值都会发生变化。对于爬虫来说,他知道Etag没有改变,不会再爬取。如果发现 Etag 的值发生了变化,就会被爬取。这样既节省了爬虫的爬取资源,又减少了对服务器的请求次数,从而提高了服务器性能。提升服务器性能,提升网页自然打开速度。
当然,还有程序优化、数据库优化,以及一些提高加速的服务器设置和配置。我不会在这里详细介绍。你应该先做我上面说的,这方面你已经做到了。很好。服务器、程序和数据库必须由专人维护,否则我们大多数 SEO 将无法做到这些。
链接提交使 网站收录 更快
我们先来拆解爬虫的“grab”和“fetch”这两个词。这两个词代表两个动作。Grab 可以理解为爬虫在网上寻找更多的网站信息,而 fetch 可以理解为爬虫访问抓取的 URL 进行数据检索。从而形成抓取。那么爬虫本身的机制就是不断发现和阅读网页的过程。链接提交的本质是让爬虫保存发现网页的链接。这样不仅可以提高爬虫的工作效率,还可以提高爬虫获取我们网页数据的效率。
下面以百度为例,分享三种最常见的链接提交方式:
1.百度收录sitemap.xml文件提交工具
sitemap.xml文件的提交方式是比较传统的链接提交方式,已有十多年的历史。这不仅百度支持,其他搜索引擎也支持。关于如何设置sitemap提交方式,请参考文章:网站是否需要制作sitemap.xml地图?
2.自动推送百度收录提交工具
自动推送就是在你的网站中添加一段代码,这段代码是百度搜索资源平台给出的,就像在你的网站中添加统计代码一样简单。下图是我百度自动推送的收录提交代码。
以上代码可以放在百度收录的网页源码中。
自动推送的推送逻辑是,每当访问你的网站中添加了此代码的网页时,该网页就会被推送到百度,然后爬虫会爬取收录。
3、积极推送百度收录提交方式
主动推送是指您通过自己的技术能力主动向百度提交文章。说白了,可以理解为自动化手动提交的功能。
百度搜索资源平台给出了代码实现的参考示例,如下图:
如上图所示,可以看到不同编程语言的实现示例,提交成功会返回什么等。
自动提交百度收录有什么区别?
上面提到的三个自动提交百度收录词条有什么区别,是不是都要全部设置呢?
首先,必须设置它。具体区别如下:
网站地图文件提交到百度收录
这个文件收录了你所有的url文件,每次访问都会被百度检索。比如你的一个网页没有收录,没有人会访问,所以自动推送不会生效,你会忘记手动提交。主动推送可能早就提交了,而不是 收录。这时候爬虫在访问你的sitemap文件时,会重新爬取这些没有被收录的历史URL,获得收录的机会。
另外,360、搜狗、必应、谷歌等都支持这种方式,相当于制作了一个站点地图,提交给很多搜索引擎的网址,等待收录。
百度自动推送提交收录
自动推送的方法和sitemap一样,只是针对比较流行的网页。搜索引擎的源访问者不访问您的网页,这并不意味着直接访问或从其他来源访问的人不访问,更不用说您会自己访问。不?
有时,我们自己会忽略哪些内容很受欢迎,而不是专注于优化。但是游客骗不了我们。大多数人经常访问的网页一定很受欢迎。以自动推送的方式将词条提交到百度收录,让百度蜘蛛抓取。也非常好。
主动推送提交方式
主动推送方式主要针对我们的文章页面/详情页面。毕竟这种页面第一次生成后,我通过自动推送发给百度,这样不仅可以保证实时性,而且当有很大的网站采集我网站,我提到了提交网址的时间,以证明我的是原创。
所以,以上三种方式各有千秋,不过话说回来,我们何不好好珍惜一次把网址提交到百度收录的机会呢?多次提交收录不就是增加收录的机会吗?
以上就是我们解决网站收录的核心方法。这篇文章可能不完整,但总的来说我们要从三点入手:页面的速度,页面的整体质量,以及链接提交等辅助搜索引擎的东西。如有其他补充,请在留言区补充。当然,如果您有任何问题,您可以通过回复在留言区留言。
现在我有 10000 多个朋友关注我