性能优化

前端性能优化

会有一股神秘感。 提交于 2019-12-18 05:47:40
1.减少HTTP请求 在浏览器(客户端)和服务器发生通信时,就已经消耗了大量时间,尤其是在网络情况比较糟糕的时候,这个问题尤其突出。 一个正常HTTP请求的流程简述:如在浏览器中输入"www.xxxxxx.com"并按下回车,浏览器再与这个URL指向的服务器建立连接,然后浏览器才能向服务器发送请求信息,服务器在接受到请求的信息后再返回相应的信息,浏览器接收到来自服务器的应答信息后,对这些数据解释执行。 而当我们请求的网页文件中有很多图片、CSS、JS甚至音乐等信息时,将会频繁的与服务器建立连接,与释放连接,这必定会造成资源的浪费,且每个HTTP请求都会对服务器和浏览器产生性能负担。 网速相同的条件下,下载一个100KB的图片比下载两个50KB的图片要快。所以,请减少HTTP请求。 解决办法: 合并图片(css sprites),合并CSS和JS文件;图片较多的页面也可以使用 lazyLoad 等技术进行优化。 2.请正确理解 Repaint 和 Reflow Repaint(重绘)就是在一个元素的外观被改变,但没有改变布局(宽高)的情况下发生,如改变visibility、outline、背景色等等。 Reflow(重排)就是DOM的变化影响到了元素的几何属性(宽和高),浏览器会重新计算元素的几何属性,会使渲染树中受到影响的部分失效

前端性能优化(十四)

若如初见. 提交于 2019-12-18 05:46:41
避免大规模、复杂的布局 布局,就是浏览器计算DOM元素的几何信息的过程:元素大小和在页面中的位置。每个元素都有一个显式或隐式的大小信息,决定于其CSS属性的设置、或是元素本身内容的大小、抑或是其父元素的大小。在Blink/WebKit内核的浏览器和IE中,这个过程称为布局。在基于Gecko的浏览器(比如Firefox)中,这个过程称为Reflow。虽然称呼不一样,但二者在本质上是一样的。 布局,就是浏览器计算DOM元素的几何信息的过程:元素大小和在页面中的位置。每个元素都有一个显式或隐式的大小信息,决定于其CSS属性的设置、或是元素本身内容的大小、抑或是其父元素的大小。在Blink/WebKit内核的浏览器和IE中,这个过程称为布局。在基于Gecko的浏览器(比如Firefox)中,这个过程称为Reflow。虽然称呼不一样,但二者在本质上是一样的。 与样式计算类似,布局的时间消耗主要在于: 需要布局的DOM元素的数量 布局过程的复杂程度 尽可能避免触发布局 当你修改了元素的样式属性之后,浏览器会将会检查为了使这个修改生效是否需要重新计算布局以及更新渲染树。对于DOM元素的“几何属性”的修改,比如width/height/left/top等,都需要重新计算布局。 .box { width: 20px; height: 20px; } /** * Changing width and

ASP.NET性能优化

情到浓时终转凉″ 提交于 2019-12-18 05:46:18
1. 数据库访问性能优化   数据库的连接和关闭   访问数据库资源需要创建连接、打开连接和关闭连接几个操作。这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源。ASP.NET中提供了连接池(Connection Pool)改善打开和关闭数据库对性能的影响。系统将用户的数据库连接放在连接池中,需要时取出,关闭时收回连接,等待下一次的连接请求。   连接池的大小是有限的,如果在连接池达到最大限度后仍要求创建连接,必然大大影响性能。因此,在建立数据库连接后只有在真正需要操作时才打开连接,使用完毕后马上关闭,从而尽量减少数据库连接打开的时间,避免出现超出连接限制的情况。   使用存储过程   存储过程是存储在服务器上的一组预编译的SQL语句,类似于DOS系统中的批处理文件。存储过程具有对数据库立即访问的功能,信息处理极为迅速。使用存储过程可以避免对命令的多次编译,在执行一次后其执行规划就驻留在高速缓存中,以后需要时只需直接调用缓存中的二进制代码即可。   另外,存储过程在服务器端运行,独立于ASP.NET程序,便于修改,最重要的是它可以减少数据库操作语句在网络中的传输。   优化查询语句   ASP.NET中ADO连接消耗的资源相当大,SQL语句运行的时间越长,占用系统资源的时间也越长。因此,尽量使用优化过的SQL语句以减少执行时间。比如,不在查询语句中包含子查询语句

关于电量性能优化的总结

痞子三分冷 提交于 2019-12-18 01:40:27
耗电设备 手机各个硬件模块的耗电量是不一样的,有些模块非常耗电,而有些模块则相对显得耗电量小很多。 电量消耗的计算与统计是一件麻烦而且矛盾的事情,记录电量消耗本身也是一个费电量的事情。唯一可行的方案是使用第三方监测电量的设备,这样才能够获取到真实的电量消耗。 屏幕 当设备处于待机状态时消耗的电量是极少的,以 Nexus 5 为例,打开飞行模式,可以待机接近 1 个月。可是点亮屏幕,味着系统的各组件要开始进行工作,界面也需要开始执行渲染,这会需要消耗很多电量。 蜂窝网络 通常情况下,使用移动网络传输数据,电量的消耗有三种状态: Full Power 能量最高的状态,移动网络连接被激活,允许设备以最大的传输速率进行操作。 Low power 一种中间状态,对电量的消耗差不多是 Full power 状态下的 50%。 Standby 最低的状态,没有数据连接需要传输,电量消耗最少。 总之,为了减少电量的消耗,在蜂窝移动网络下,最好做到批量执行网络请求,尽量避免频繁的间隔网络请求。 使用 Battery Historian 我们可以得到设备的电量消耗数据,如果数据中的移动蜂窝网络(Mobile Radio)电量消耗呈现下面的情况,间隔很小,又频繁断断续续的出现,说明电量消耗性能很不好: battery bad 经过优化之后,如果呈现下面的图示,说明电量消耗的性能是良好的: battery

java并发编程——性能和扩展性

夙愿已清 提交于 2019-12-17 23:33:18
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 第一部分:对性能的思考 并发编程的最主要目的是提高程序的运行性能,线程可以使程序更加充分的利用系统的可用处理能力,从而提高系统的资源利用率。然而使用多线程时也会引入额外的开销,这些开销包括:线程之间的协调(加锁,内存同步等)、增加的的上下文切换、线程的创建和销毁和线程的调度等等。如果过度以及不恰当的使用线程,这些开销甚至会抵消由于提高吞吐量、计算能力带来的性能提升。一个设计糟糕的多线程程序其性能可能比相同功能的串行程序效率还低。 提升性能意味着用更少的资源做更多的事情。资源的范围很广,比如CPU,内存,网络带宽,IO,磁盘空间等等。当操作性能由于某种特定的资源而受到限制时,我们通常称为资源密集型操作,比如CPU密集型等等。 要想通过并发来获得良好的性能,需要努力做好两件事:要有效的利用现有的资源,以及新的处理资源出现时程序能够有效的利用新增的资源。从性能监视的视角来看,CPU需要尽可能保持忙碌状态(当然这不意味着把CPU用在一些无用的计算上)。 应用程序的性能可以通过多个指标来衡量,比如一些指标(服务时间,等待时间)用来衡量运行速度,另一些指标(生产量、吞吐量)来衡量处理能力。因此,“多快”、“多少”是性能优化的两个不同方向,它们相互独立,有时甚至是互相矛盾的。因此,在优化之前必须要先确保以下几点: 第一

Web服务器及性能优化

你。 提交于 2019-12-17 14:07:48
一、WEB服务器 1.1 概述: 1.2 区别: 1.2.1 Apache 1.2.2 Tomcat 1.2.3 Jboss 二、浏览器端,关于浏览器端优化 2.1 压缩源码和图片 2.2 选择合适的图片格式 2.3 合并静态资源 2.4 开启服务器端的Gzip压缩 2.5 使用CDN 2.6 延长静态资源缓存时间 2.7 把CSS放在页面头部,把JavaScript放在页面底部 三、服务端优化 3.1 HTML静态化 3.2 图片服务器分离 3.3 数据库集群、库表散列 3.4 缓存 3.5 镜像 3.6 负载均衡 3.6.1 硬件四层交换 3.6.2 软件四层交换 一、WEB服务器 1.1 概述: Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。 Apache与Tomcat都是Apache开源组织开发的用于处理HTTP服务的项目,两者都是免费的,都可以做为独立的Web服务器运行。 Apache是Web服务器而Tomcat是Java应用服务器。 1.2 区别: 1.2.1 Apache 是C语言实现的,专门用来提供HTTP服务。 特性:简单、速度快、性能稳定、可配置(代理) 1、主要用于解析静态文本,并发性能高,侧重于HTTP服务; 2、支持静态页(HTML)

Web前端性能优化——编写高效的JavaScript

穿精又带淫゛_ 提交于 2019-12-17 05:23:48
前言 随着计算机的发展,Web富应用时代的到来,Web 2.0早已不再是用div+css高质量还原设计的时代。自Gmail网页版邮件服务的问世开始,Web前端开发也开启了新的纪元。用户需求不断提高,各种新的技术层出不穷,前端工程师的地位也越来越重要。然而任何事物都是有两面性的,随着前端技术的发展,前端业务越来越繁重,这大大增加了JS代码量。因此,要提高Web的性能,我们不仅需要关注页面加载的时间,还要注重在页面上操作的响应速度。那么,接下来我们讨论几种能够提高JavaScript效率的方法。 一、从JavaScript的作用域谈起 当JavaScript代码执行时,JavaScript引擎会创建一个执行环境,又叫执行上下文。执行环境定义了变量或函数有权访问的其他数据,决定了它们的行为,每个执行环境都有一个与它关联的 变量对象, 环境中定义的所有函数、变量都保存在这个对象中。在页面加载的时候,JavaScript引擎会创建一个全局的执行环境,所有全局变量和函数都是作为window对象(浏览器中)的属性和方法创建的。在此之后,每执行一个函数,JavaScript引擎都会创建一个对应的执行环境,并将该环境放入环境栈中,所以当前正在执行的函数的执行环境是在环境栈的最顶部的,当函数执行完毕之后,其执行环境会弹出栈,并被销毁,保存在其中的变量和函数定义也会被销毁。 当代码在一个执行环境中执行时

MySQL分页查询性能优化

徘徊边缘 提交于 2019-12-17 04:22:28
当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询。对于数据库分页查询,也有很多种方法和优化的点。下面简单说一下我知道的一些方法。 准备工作 为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明。 表名:order_history 描述:某个业务的订单历史表 主要字段:unsigned int id,tinyint(4) int type 字段情况:该表一共37个字段,不包含text等大型数组,最大为varchar(500),id字段为索引,且为递增。 数据量:5709294 MySQL版本:5.7.16 线下找一张百万级的测试表可不容易,如果需要自己测试的话,可以写shell脚本什么的插入数据进行测试。 以下的 sql 所有语句执行的环境没有发生改变,下面是基本测试结果: select count(*) from orders_history; 返回结果:5709294 三次查询时间分别为: 8903 ms 8323 ms 8401 ms 一般分页查询 一般的分页查询使用简单的 limit 子句就可以实现。limit 子句声明如下: SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于指定

Java性能优化JVM、Tomcat、MySQL面试题一次彻底扫盲

二次信任 提交于 2019-12-17 03:25:41
本文转载自: Java性能优化JVM、Tomcat、MySQL面试题一次彻底扫盲 性能优化是什么?性能优化,简而言之,就是在不影响系统运行正确性的前提下,使之运行地更快,完成特定功能所需的时间更短。 在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。 今天就由京东资深技术官来详解「Java性能优化」问题,从JVM、Tomcat、MySQL三种调优方式来详细讲解,以下含一些面试题、脑图以及调优文档等资料。 核心技术JVM、Tomcat、MySQL面试题一次彻底扫盲 1. 调优篇 JVM知识整理 JVM内存区域划分 JVM执行子系统 垃圾回收器和内存分配策略 编写高效优雅Java程序 性能优化 JVM相关面试题 什么是JVM? 类加载器是如何加载 class 文件的? 双亲委派模型(Parent Delegation Model)? 垃圾回收算法有哪些? GC什么时候开始? JVM 内存分哪几个区,每个区的作用是什么? GC 的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路? 2. Tomcat 调优篇 Tomcat架构解析 Tomcat介绍 Tomcat总体架构 CatAlina Coyote Jasper Tomcat配置管理 Web服务器集成

记一次结算程序的性能优化过程

女生的网名这么多〃 提交于 2019-12-17 03:18:29
背景:某项目结算程序,业务系统每日生成当天全量交易数据并上传至FTP,该结算程序从FTP中获取文件后解析交易数据,执行余额变更操作及登记资金流水。 第一轮压测结果:TPS=3 分析源码后发现,开发童鞋是串行单笔处理的,简化后的核心代码如下: //遍历每条交易数据 foreach(){ insertLogAndUpdateBalance(); } //启用事务 insertLogAndUpdateBalance(){ //插入资金流水 insertLog(); //更新余额 updateBalance(); } 第一轮改进方法: 1、改串行单笔处理为串行多笔处理 2、余额变更update转insert,即先记入余额流水表,再异步刷新回余额表 3、这里引入了一个新问题:如何保证余额不被扣成负数?该问题后面另起专题介绍。 简化后的核心代码 //遍历每批交易数据,每500条一批 foreachBatch(){ insertLogAndUpdateBalanceBatch(); } //启用事务 insertLogAndUpdateBalance(){ //插入资金流水 insertLogBatch(); //更新余额 updateBalanceBatch(); } 第二轮压测结果:TPS很不稳定,15 - 45之间 第二轮改进方法: 经过排除后发现开发人员使用定时任务的方式为,