性能优化

再谈前端性能优化

最后都变了- 提交于 2019-12-20 00:16:04
好的设计应该简单,而且始终可以提供最佳性能。 一、优化原因 谷歌的数据表明,一个有10条数据0.4秒可以加载完的页面,在变成30条数据加载时间为0.9秒后,流量和广告收入减少了20%。当谷歌地图的首页文件大小从100kb减少到70~80kb时,流量在第一周涨了10%,接下来的三周涨了25%。 腾讯的前端工程师根据长期的数据监控也发现页面的一秒钟延迟会造成9.4%的PV的下降,8.3%跳出率的增加以及3.5%转化率的下降。 可以看出,性能优化商业上来说很重要。 但是,更重要的还是屏幕前我们的用户,让用户在使用产品时有更快更舒适的浏览体验,这算是一种前端工程师的自我修养。 二、优化目标 以让用户满意为目标呈现网页是终极的目标。当然页面速度要快,不过快只是构成满意的一个因素。 我们使用Google团队提出的RAIL模型作为优化的目标。 目前国内包括腾讯在内的团队都在使用这个评估方案。 Response:100ms内响应; Animation:10ms内生成一帧; Idle:最大程度增加空闲时间; Load:1000ms内呈现内容; 1)以用户为中心 User-centered 用户是性能优化的中心,一切性能优化皆是为了用户获得更佳的体验。 那么,我们的用户如何评价性能延迟: 0-16ms 用户可以感知每秒渲染 60 帧的平滑动画转场。也就是每帧 16 毫秒 留给应用大约 10

170322、Spring Boot 性能优化之将Servlet容器变成Undertow

末鹿安然 提交于 2019-12-20 00:14:26
需求缘起:在研究Spring Boot加速启动的时候,发现我们在实际中,可能比较注重我们服务器的内存的情况,那么我们会想如果在启动的时候,所占用的内存越低是越好,基于这个想法,我们看看Spring Boot启动之后的一个内存占用情况。 我们看看本节的大纲: (1)Spring Boot之Tomcat内存情况; (2)Spring Boot之Undertow内存情况; 接下来看下具体看下每个部分的内容: (1)SpringBoot之Tomcat内存情况; 我们知道,默认情况下,Spring Boot使用Tomcat来作为内嵌的Servlet容器。我们启动项目之后可以使用VisualVM进行查看应用所占的内存情况: (1)进入到你的jdk的安装目录下bin,找到:jvisualvm.exe,双击打开 (2)双击打开之后,你能在左边操作栏找到【本地】--【应用程序的包名】--【双击打开】: 以上是我使用Spring Boot默认的方式启动应用后,用VisualVM监控到的内存占用情况:堆内存占用50M,17个线程被开启。没有比较就没有伤害,一比较我吓一跳,哈哈,单独的一个tomcat是无法看出来效果的,我们看看Undertow的情况下。 (2)SpringBoot之Undertow内存情况; 我们将Web服务器切换到Undertow来提高应用性能

Mysql性能优化三(分表、增量备份、还原)

不羁岁月 提交于 2019-12-19 23:38:14
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 对表进行水平划分 如果一个表的记录数太多了,比如上千万条,而且需要经常检索,那么我们就有必要化整为零了。如果我拆成100个表,那么每个表只有10万条记录。当然这需要数据在逻辑上可以划分。一个好的划分依据,有利于程序的简单实现,也可以充分利用水平分表的优势。比如系统界面上只提供按月查询的功能,那么把表按月拆分成12个,每个查询只查询一个表就够了。如果非要按照地域来分,即使把表拆的再小,查询还是要联合所有表来查,还不如不拆了。所以一个好的拆分依据是 最重要的。关键字:UNION 例: 订单表根据订单产生时间来分表(一年一张) 学生情况表 查询电话费,近三个月的数据放入一张表,一年内的放入到另一张表 对表进行垂直划分 有些表记录数并不多,可能也就2、3万条,但是字段却很长,表占用空间很大,检索表时需要执行大量I/O,严重降低了性能。这个时候需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系。 (JOIN) 【试题内容】、【答案信息】两个表,最初是作为几个字段添加到【试题信息】里的,可以看到试题内容和答案这两个字段很长,在表里有3万记录时,表已经占 了1G的空间,在列试题列表时非常慢。经过分析,发现系统很多时候是根据【册】、【单元】、类型、类别、难易程度等查询条件,分页显示试题详细内容。而每

前端性能优化策略

为君一笑 提交于 2019-12-19 19:08:58
一、网络加载类 1、减少 HTTP 资源请求次数   合并静态资源图片、JavaScript 或 CSS 代码,减少页面请求数和资源请求消耗   避免重复的资源,防止增加多余请求 2、减小 HTTP 请求大小   减少没必要的图片、JavaScript、CSS 及 HTML 代码   对文件进行压缩优化   使用 gzip 等方式压缩传输文件 3、将 CSS 或 JavaScript 放到外部文件中,避免使用 <style> 或 <script> 标签直接引入   在 HTML 文件中引用外部资源可以有效利用浏览器的静态资源缓存 4、避免页面中空的 href 和 src   当 <link> 标签的 href 属性为空,或 <script> 、 <img> 、 <iframe> 标签的 src 属性为空时,浏览器在渲染的过程中仍会将 href 属性或 src 属性中的空内容进行加载,直至加载失败,这样就阻塞了页面中其他资源的下载进程 , 而且最终加载到的内容是无效的,因此要尽量避免 5、为 HTML 指定 Cache-Control 或 Expires   为 HTMl 内容设置 CaChe-Control 或 Expires 可以将 HTML 内容缓存起来,避免频繁向服务器端发送请求。 <meta http-equiv="Cache-Control" content="max

开发性能优化

爱⌒轻易说出口 提交于 2019-12-19 02:04:09
1.前端优化 ①:尽量避免多次请求后端,可以在按钮请求后置灰,避免重复点击请求 ②:如果访问量很大时,可以在几秒内不可再次请求(如秒杀场景,抢票场景时) 2.后端优化 ①:避免大量请求数据库,可以使用redis(单线程,内存存储的)这种缓存机制 ②:通过消息队列,RabbitMQ处理操作数据库的逻辑 3.数据优化 ①:数据量少的话,通过优化sql语句(in,like这种全表查的少用)及添加索引来优化 ②:数据量多的话,通过分表分库,读写分离(读写放到不同的数据库服务器上)等操作 4.服务器优化 ①:尽可能多的服务器,服务器尽可能配置高点 ②:通过Nginx的负载均衡,将请求分发到不同的服务器上,避免同一个服务器的压力过大 来源: CSDN 作者: mxz19901102 链接: https://blog.csdn.net/mxz19901102/article/details/103604014

Golang使用pprof进行性能优化

人盡茶涼 提交于 2019-12-18 21:44:40
文章目录 pprof模块 准备工具 图形化工具 压测工具 go-torch 工具型应用 服务型应用 Gin框架使用pprof pprof与性能测试结合 go tool pprof命令 介绍 图形化展示 命令行交互界面 top list pdf help 参考 pprof模块 Go语言项目中的性能优化主要有以下几个方面: CPU profile:报告程序的 CPU 使用情况,按照一定频率去采集应用程序在 CPU 和寄存器上面的数据 Memory Profile(Heap Profile):报告程序的内存使用情况 Block Profiling:报告 goroutines 不在运行状态的情况,可以用来分析和查找死锁等性能瓶颈 Goroutine Profiling:报告 goroutines 的使用情况,有哪些 goroutine,它们的调用关系是怎样的 Go语言内置了获取程序的运行数据的工具,包括以下两个标准库: runtime/pprof :采集工具型应用运行数据进行分析 net/http/pprof :采集服务型应用运行时数据进行分析 pprof开启后,每隔一段时间(10ms)就会收集下当前的堆栈信息,获取格格函数占用的CPU以及内存资源;最后通过对这些采样数据进行分析,形成一个性能分析报告。 注意,我们只应该在性能测试的时候才在代码中引入pprof。 准备工具 图形化工具

服务器性能优化(二):apache调优

早过忘川 提交于 2019-12-18 21:05:23
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1) MPM(多处理模块)配置(主要负责管理网络连接,调度请求) Apache有3个MPM,分别是: event , prefork和worker。 event这个MPM是在Apache2.4后才有稳定版,比较适用于大量连续连接的情况。event为不同的任务使用单独的线程池. KeepAlive的好处是,可以同一个tcp连接中响应多个请求,这种方式,可以使一个包含大量图片和html文档的请求加速50%,在Apache配置文件httpd.conf中设置KeepAlive设置为On. prefork是一个非线程的MPM。它的特点:不快但很稳定.它能够隔离每个请求,所以如果某个请求出现故障,不会影响其他请求.使用prefork最重要的一个参数是MaxClients。这个MaxClients足够大,这样可以在访问高峰时发挥很好的性能,但是同时又不能太大,致使Apache所需内存超过物理内存。 worker这个MPM,速度比prefork快很多,由于使用多线程进行访问处理,所以能够处理相对海量的请求,而系统资源的占用要小于基于进程的服务器.work有2个比较重要的参数:ThreadPerChild和MaxClients.ThreadPerChild是用来控制每个子进程允许建立的线程数

web前端性能优化

断了今生、忘了曾经 提交于 2019-12-18 18:10:25
web前端性能优化 一、资源合并与压缩 1.html压缩,可使用html-minifier 2.css压缩,可使用clean-css 无效代码删除 删除注释 css语义合并 3.js压缩,可使用uglifyjs2 无效字符的删除 删除注释 剔除注释 代码予以的缩减和优化,更改变量名来简短变量名的长度 二、图片优化 1.不同场景选择不同格式的图片 jpeg:有损压缩,压缩率高,不支持透明 png:支持透明 png8:2^8种颜色,支持透明,png中大小最小 png24:2^24种颜色,不支持透明 png32:2^24种颜色,加8位支持透明,png中大小最大 webp:压缩程度更好,支持无损压缩和有损压缩,google推出的,支持Android svg:矢量图,代码内嵌,相对较小,适用于icon 2.图片压缩 css雪碧图:利用background-position来获取相应的图片, 解析雪碧图样式 优点:减少http请求数量 缺点:整合图片比较大时,一次加载比较慢 图片image-inline:将图片内容转化为base64内嵌到html当中 优点:减少http请求数量 缺点:整体的文件大小会变大 icon使用矢量图 优点:减小大小,且放大不会失真 在安卓下用webp 优点:比jpeg和png更优的压缩算法,能带来更小的体积,支持无损压缩和有损压缩 3.在线压缩 TinyPNG 智图

从零开始入门 K8s | etcd 性能优化实践

ⅰ亾dé卋堺 提交于 2019-12-18 08:17:56
作者 | 陈星宇(宇慕) 阿里云基础技术中台技术专家 本文整理自 《CNCF x Alibaba 云原生技术公开课》 第 17 讲。 导读 :etcd 是容器云平台用于存储关键元信息的组件。阿里巴巴使用 etcd 已经有 3 年的历史, 在今年 双11 过程中它又一次承担了关键角色,接受了 双11 大压力的检验。本文作者从 etcd 性能背景出发,带领我们了解了 etcd server 端性能优化及 etcd client 使用最佳实践,希望能够为大家运行一个稳定而且高效的 etcd 集群提供帮助。 一、etcd 简要介绍 etcd 诞生于 CoreOs 公司,使用 Golang 语言开发,是一个分布式 KeyValue 存储引擎。我们可以利用 etcd 来作为分布式系统元数据的存储 数据库 ,存储系统里面重要的元信息。etcd 同样也被各大公司广泛使用。 下图为 etcd 的基本架构 如上所示,一个集群有三个节点:一个 Leader 和两个 Follower。每个节点通过 Raft 算法同步数据,并通过 boltdb 存储数据。当一个节点挂掉之后,另外的节点会自动选举出来一个 Leader,保持整个集群的高可用特性。Client 可以通过连接任意一个节点完成请求。 二、理解 etcd 性能 首先我们来看一张图: 上图是一个标准的 etcd 集群架构简图。可以将 etcd

MySQL性能优化

亡梦爱人 提交于 2019-12-18 05:48:47
1.索引对查询速度的影响 MySQL中提高性能的一个最有效的方式就是对数据表设计合理的索引。索引提供了高效访问数据的方法,并且加快查询的速度,因此,索引对查询的速度由着至关重要的影响。使用索引可以快速地定位表中的某条记录,从而提高数据库查询的速度,提高数据库的性能。本小结将为读者介绍索引对查询速度的影响。 如果查询时没有使用索引,查询语句将扫描表中的所有记录。在数据量大的情况下,这样查询的速度回很慢。如果使用索引进行查询,查询语句可以根据索引快速定位到待查询记录,从而减少查询的记录数,达到提高查询速度的目的。 1 #下面是查询语句中不使用索引和使用索引的对比。首先,分析未使用索引的查询情况,EXPLAIN语句执行如下: 2 explain select * from t_fruits where f_name='apple'; 3 explain select * from t_fruits where f_name='apple'; 4 +----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+-------------+ 5 | id | select_type | table | partitions | type |