我是如何优化网站首页性能的

news/2024/5/9 7:22:51/文章来源:https://blog.csdn.net/weixin_34217773/article/details/89443573

最近接到一个任务,首页性能优化。

目标:95分位值下

  1. 看到页面框架主体内容6s(优化前10s左右),优化提升40%

  2. 看到操作详细内容9s(优化前12s左右),优化提升25%。

侧面看出我们系统的庞大程度吧,这个不值得骄傲,项目比较悠久,历史包袱比较沉重,后面计划node同构方式去重构,但是现阶段需要一个低成本,短时间的方案去提高现有性能作为过渡。

95分位值解释

95分位值目前是我们看性能指标的一个重要参考点。

举例:收集用户打开的时间,从快到慢排列,比如是100个用户数据,95分位值就是取出第95个用户的数据做统计。 50分位值就是第50个人的数据。

为什么是95%,因为跟进高T的优化经验,95分位值的数据取点最能放大问题。50,80的取点暴露的问题不明显。

当我把最慢的那一批人的性能优化好了,哪些快的自然就解决了。

优化难点

  1. 面试经常问到的页面优化点,例如图片合并,js合并,css合并,js压缩等等都已经做了。常规优化点没有什么空间可以优化。

  2. 代码比较老。注释上面都是12-13年的代码。

  3. 改动需要尽量的少,功能点不能改,时间比较紧张,QA没有人力支援,所以需要代码改动比较小的情况下(修改必须可控),不重构的情况下挖掘优化点。

任务拆分

优化性能这种任务其实比较难制定计划,除非经验特别丰富。

第一步:是梳理代码

当然也不是看所有的老业务代码,看的重点是看各个模块的加载逻辑,展现逻辑,看入口即可。

第二部:删遗留代码

大概了解整个首页的初始化流程后,梳理了简单的逻辑后,发现第一个任务,删代码。

梳理大概结构后,目测有大量下线功能的代码任然遗留在系统中,之前的下线逻辑应该是仅仅屏蔽了入口,而没有清理代码。

所以我第一个具体的工作就是找出下线的业务代码并将他清理,不完全统计,清理代码量开发环境下至少5W行。

清理代码好处很多:

  1. 减少无用代码的初始化消耗

  2. 减少静态资源

  3. 让代码更加清晰,减少无用代码的干扰

删除无用代码其实是个脏活,吃力不讨好,删除的代码如果还有地方引用,那么删除了就是引入了一个bug。

删除代码这个工作又没有什么显性的收益,还费工费时。其实就是一个里子的工作,把大家看不到的地方做好。

第三部:优化初始化逻辑

尽量让不是完全依赖的ajax并行,减少串行。当前系统有两个展示模块有串行关系。梳理业务后,找出首页加载的默认逻辑,将串行调整成为并行。

这里是修改代码的地方之一,修改越少越好,因为一旦修改多了,就不好控制了,就需要QA介入,那么整个项目的周期就会大大延长。

第四部:ajax预取

这个是上一个项目经验积累,在加载模块静态资源前,可以并行的请求这些模块的ajax内容。原本逻辑是,加载完毕各个模块的静态资源,然后模块内部开始加载静态资源需要的ajax。这样就避免不了静态资源的请求和静态资源里面ajax的请求形成了一个串行关系。
预取的一个明显优势是,ajax可以提前

节省的时间 = min(ajax请求时间,静态资源加载时间)

这里是修改的另外一个地方:同理,这个地方没有业务逻辑,所以需要和业务完全解耦着做。

第五部:优化打包合并

打包这部分难度比较大,优化空间也相对较多。
这里分了两部分:

一:首屏不展示部分按需加载

目前看很多应该按需加载的内容全部都合并到了一起,放在首屏加载了。例如点击一个按钮出来一个操作页面弹框。其实这个弹框的代码首屏展示是完全不需要。

当时注释:

代码加起来压缩完大概200kb左右,没必要拆的太细,如果代码达到500KB以上,再进一步考虑细拆

实际情况是,这个部分的代码压缩混淆后达到了1.1MB(坑爹啊)。

这种情况就是当初开发人员设想是美好的,后续业务开发人员没有意识或者了解到当初的规定,业务越来越多,代码也就越来越多。

这种情况其实比较常见,因为打包合并这种其实是尽量对业务人员透明的,这种合并后的内容,其实在开发环境体现不出来,只有刻意的压缩代码和优化时才能注意到。

容易忽视的部分就是容易出现问题的地方。

二: 打包合并重复的部分删除

还是上面的原因,打包合并对于开发人员和开发环境透明,很长一段时间后,会发现大量打包重复,比较明显的就是底层依赖库个个文件重复引用。这种不会引发bug,但是会影响首屏静态资源的加载和静态资源的解析。

一和二的成果很明显:静态资源网络压缩后(gz),1.9mb优化到了1.1mb,整体提升了42%。

三: 疑难散文件清理

之前优化过几次散文件,由于成本比较大,遗留了一些散文件。这次就是集中处理了一下,散文件其实是比较严重的,一个散文件就会浪费一个请求。95分位值下,一个散文件可能就是100ms的影响。所以不要小看散文件对于性能的影响。

成果是减少5个js静态资源请求,2个css请求。

优化感受

这些优化本周会上线,期待数据会比较好看。如果本周效果不是很明显,后面的优化空间其实就非常小了,暂时不考虑cdn,依赖后端这些方法,仅仅从静态资源出发。

优化其实就是一个没有那么明确计划的任务,往往有可能对着页面一遍一遍看加载流程或者把源代码挨个扫一遍找找感觉,一个突发奇想,一个奇淫技巧,一个业务展示效果的调整就能达到。

后续看看是否达标,性能不达标的话,还会有《我是如何优化网站首页性能的(番外篇)》。/(ㄒoㄒ)/~~

优化感受2

优化就是细节完善,举个例子:

  1. 有时一个js散文件可能多消耗50ms,但是一旦出现10个,20个影响就叠加起来了。

  2. 一个底层库被重复打包了,可能多了几千行,静态资源增加了几k,加载上可能就是几ms,加上与解析几ms。但是一旦重复的静态资源多了,问题就来了。上万行,上百K的资源都是拖慢系统的根源。难以想象我这次粗滤的清理了一下,清理了0.6MB的资源。

优化没有止境,这一版上线后,肯定还有很多遗留的地方,后续看看效果,继续优化。

ps:最后发现自己整理完这么多,也没有做什么,感觉后面还需努力

博客地址

http://tangguangyao.github.io/

微信公众号

图片描述

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

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

相关文章

PHP商城网站绑定中国银联在线支付接口

PHP商城网站绑定中国银联在线支付接口用的越来越广泛,我们公司这几年给客户建立过很多的商城网站,今天就分析下怎么为自己的PHP商城网站接入中国银联在线支付端的接口。在使用前我们必须先申请成为中国银联在线支付的商户。 第一步:下载中国银…

jmh气象传真图网站_推荐几个好用的民航工具网站,总有一款适合你

一起分享,一起成长您的关注是我们前进的动力估计很多干运行的朋友都有这种感觉,平时在公司能轻松查阅的一些运行资料,等到出了公司,再想查看和使用这些资料就费劲了。因为大多数公司都会把运行资料放在内部网络上,很少…

axure网站后台原型rp_高保真原型原来如此简单

本文先由C鸽分享些最近整理完成的原型组件、原型模板、原型规范、并以高保真原型的方式分享给大家,后续再一 一分享如何画原型。以下列出的所有内容均由C鸽通过axure 8制作完成,数据报表相关组件由axure与百度echarts报表结合使用形成的,因本…

常用搜索博客/网站

zhihu.comjuejin.imgithub.iogitbooks.iosegmentfault.comimportnew.comjianshu.comibm.comjikexueyuan.comcnblogs.comcsdn.netluogu.org欢迎大家补充!基础篇 基本功 面向对象的特征final, finally, finalize 的区别int 和 Integer 有什么区别重载和重写的区别抽象…

linux服务器查看防火墙地址,linux怎么查看防火墙是否关闭了_网站服务器运行维护...

linux打开iso文件怎么打开_网站服务器运行维护linux打开iso文件的方法:首先确认内核加载了loop模块;然后使用命令“mkdir /media/iso;”创建ISO文件挂载点;最后使用命令“mount your-iso-file.iso /media/iso”打开ISO文件即可。linux怎么查看…

linux系统怎么重启网络连接wifi密码,怎么查看linux连接wifi的密码?_网站服务器运行维护,linux,wifi...

如何使用外部硬盘安装linux系统?_网站服务器运行维护使用外部硬盘安装linux系统的方法:首先将格式化的U盘和固态硬盘连接到电脑上并按F9;然后从菜单选择U盘启动并按enter;接着按linux minit程序安装系统并选择中文;最后…

IIS部署FLASK网站

在 Windows 平台部署基于 Python 的网站是一件非常折腾的事情,Linux/Unix 平台下有很多选择,本文记录了 Flask 部署到 IIS 的主要步骤,希望对你有所帮助。 涉及工具和平台 Windows 7 x64 Python 3.4 Flask 完成 Hello Flask 网站 这是一个最…

win10消息推送服务器,推送--Win10系统 - Win10系统官方网站

在 Windows 10 正式发布之后,微软一直保持着大约六个月提供一次“较大功能更新”、以及每月至少发布两次累积更新的节奏,以便为用户带来更快的功能和体验改进。两周前,微软宣[阅读全文 →]其中,Fast Ring(快速通道)收获Build 1834…

Chrome和Firefox即将开始在不安全的网站显示警告信息

Google和Firefox的网络浏览器即将更新,之后用户在浏览不安全的网站时将会收到警告信息。2017年1月发布的Chrome 56和Firefox 51将成为提供警告信息的首个常规版本。\\Google多次发出公告,从Chrome 56版本开始,如果用户访问需要输入密码或信用…

github设置中文_利用 Github+Hexo 搭建个人博客网站

题图:by watercolor.illustrations from Instagram阅读文本大概需要 3 分钟。1 什么是 Hexo?Hexo 是一个基于 node.js 制作的快速、简洁且高效的博客框架。Hexo 可以将我们撰写的 Markdown 文档解析渲染成静态的 HTML 网页。2 Hexo VS Jeklly•本地环境J…

html网站中怎么更新站点,如何升级你的网站全新改进升级到HTML5

升级到HTML5是相当容易的,因为它与HTML4兼容。事实上,我们没有理由摒弃HTML4的所有,因为HTML5只是一个简单的增加一堆新而酷的功能 添加到HTML4核心语言。升级(如果你是这样认为)到HTML5是非常简单的。你所需要做的的是修改你的DOCTYPE。这种…

django从0到1搭建网站

曾经有人说我前端很水,那么在这一系列文章中我打算把前后端融合在一起来做一次网站的全面重构,希望可以把刚刚入行的同学带上正途 请尊重原创,转载请注明来源网站www.shareditor.com以及原始链接地址 聊聊工程 如今,数据科学家已经…

linux设置网站的错误页面,轻松几步设置nginx的404错误页面

众所周知设置404页面能够帮助网站有效的避免出现死链、避免降权惩罚和降低信任度,而最重要的一点是能够提升用户的体验,引导用户到网站其他页面继续浏览。那么我们如何在nginx中设置404页面呢?在本文中课课家笔者就为大家介绍具体的方法步骤供…

一匿名黑客组织拿下近20%黑市网站:仅用21个步骤实现

1万多个Tor网站遭匿名黑客组织攻击,当访问者进入这些网站时会看到以下信息--“Freedom Hosting II(以下简称FH2),你已经被攻击。”据独立安全调查员Sarah Jamie Lewis公布的一份报告显示,FH2总共运行了近20%的黑市网站。而没过多久&#xff0…

BlogEngine.Net架构与源代码分析系列part14:实现分析(下)——网站页面上值得参考的部分...

BlogEngine.Net的成功不仅在于它的架构设计,它的代码实现细节也都是很经典的,每个结构分割的很清晰很自然,希望大家多多品位一下。在这篇文章里我将给大家介绍一下BlogEngine.Net的Web实现上的几个亮点,包括Web.config&#xff0c…

【第一期】如何打造属于自己的网站编辑器——CKEditor与UEditor之争

首先说明一下由于经常写项目最近比较忙,所以一直没时间整理文章,现在把近阶段的一些心得分享出来,这是第一期,接下来我会跟大家讲讲ASP.NET单层,三层,以及多层开发企业建站和具体要求和操作,希望…

网站上显示农历及阳历节日

把阳历日期转换为农历用到的函数为ChinaDate.ConvertToNongLi(DateTime.Now); 得到节日的函数为 ChinaDate.GetFestival(DateTime.Now); 代码: using System.Globalization; using System.Collections; using System;namespace NetWeb2011.Common {public static cl…

AWWWB 网站克隆器 v1.0 发布

软件名称:AWWWB.COM网站克隆器1.0 开发商(主页):www.awwwb.com 联系人:awwwb.comqq.com 软件性质:免费软件/开源软件 软件描述: AWWWB.COM网站克隆器:输入被克隆网站的首页网址&…

一个Java语言所写的shop网站框架明细

核心框架Spring Framework :作为一个优秀的开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。 模板引擎FreeM…

iframe懒加载_wordpress网站视频和图片懒加载插件的对比与使用 a3 Lazy Load

都说wordpress网站速度慢,三人成虎,养虎为患,今天就推荐个使wordpress网站提速度的插件。特别是图片或者视频较多的站,用个懒加载插件将大大减少一时的http(s)请求、减少服务器端压力,使服务器按需加载。对于用户体验&…