性能优化

前端性能优化指南

本小妞迷上赌 提交于 2019-12-17 02:35:42
作者: JowayYoung 仓库: Github 博客: 掘金 、 思否 、 知乎 、 简书 、 头条 、 CSDN 公众号: Uzero 联系我:关注公众号后有我的 微信 哟 特别声明:未经授权不得对此文章进行转载或抄袭,否则通过法律途径进行解决,如需转载或开通公众号白名单可联系我,希望各位尊重原创的知识产权 前言 发现总结性的小干货可以为大家提升更好的开发技巧和编码思维,对代码量产化提供更扎实的质量和支持。这次我们来聊聊大家可能都比较关心的话题: 性能优化 。 一说到页面的性能优化,大家可能都会想起 雅虎军规 、 2-5-8原则 、 3秒钟首屏指标 等规则,这些规则在开发过程中不是强制要求的,但是有时候为了追求页面性能的完美和体验,就不得不对原有的代码进行修改和优化。 下面就结合自己三年多的开发经验和大量的项目实践,整理出一些常用的性能优化要点,同时再罗列一下 雅虎军规 、 2-5-8原则 、 3秒钟首屏指标 这三个常用规则的要点。 为了方便记忆和阅读,文章使用部分简写名词,解释如下 D端 :桌面端页面 Desktop End Page M端 :移动端页面 Mobile End Page 概述指南 D端优化手段在M端同样适用 在M端提出3秒钟渲染完成 首屏指标 基于第二点,首屏加载3秒内完成或使用 Loading 进行占位 基于联通3G网络平均 338kb/s(2.71mb

淘宝首页性能优化实践

不打扰是莪最后的温柔 提交于 2019-12-16 17:55:30
想必很多人都已经看到了新版的淘宝首页,它与以往不太一样,这一版页面中四处弥散着个性化的味道,由于独特的个性化需求,前端也面临各方面的技术挑战: 数据来源多 串行请求渲染一个模块 运营数据和个性化数据匹配和管理 数据兜底容灾 本次淘宝首页改版,虽已不再支持 IE6 和 IE7 等低版本的古董浏览器,但依然存在多个影响首页性能的因素: 依赖系统过多 ,数据的请求分为三块,其一是静态资源(如 js/css/image/iconfont 等);其二是推到 CDN 的静态数据(如运营填写的数据、前端配置信息等);其三是后端接口,不同的模块对应不同的业务,而且页面中还有不少的广告内容,粗略估计页面刚加载时首屏发出的接口请求就有 8 个,滚到最底下,得发出 20 多个请求。 无法直接输出首屏数据 ,首屏很多数据是通过异步请求获取的,由于系统限制,这些请求不可避免,而且请求个数较多,十分影响首屏时间。 模块过多 ,为了能够在后台隔离运营之间填写数据的权限,模块必须做细粒度的拆分,如下图所示: 一个简单的模块必须拆分成多个行业小模块,页面中其他位置也是如此,而且这些被拆分出来的模块还不一定会展现出来,需要让算法告诉前端展示哪些模块。 图片过多 ,翻页往下滚动,很明显看到,页面整屏整屏的图片,有些图片是运营填写,有些图片由个性化接口提供,这些图片都没有固定的尺寸。 网页性能衡量指标

7 MySQL的维护、性能优化

不想你离开。 提交于 2019-12-16 03:14:56
《MySQL实战45讲》 Rows_examined:https://blog.csdn.net/weixin_34332905/article/details/90683568 恢复数据库:https://blog.51cto.com/laobaiv1/1960846 性能优化:https://www.cnblogs.com/angelica-duhurica/p/11303281.html 1 MySQL有哪些“饮鸩止渴”提高性能的方法 1.1 短连接风暴 解决: 方法1 先处理掉那些占着连接但是不工作的线程。 建议是处理掉查询任务之类的连接,插入的就不处理,避免数据库状态有损 方法2 减少连接过程的消耗。 让数据库跳过权限验证阶段 1.2 慢查询性能问题 在MySQL中,会引发性能问题的慢查询,有以下三种可能: 索引没有设计好; SQL语句没写好; MySQL选错了索引。 1.2.1 索引没有设计好 ⼀般通过紧急创建索引来解决 MySQL 5.6版本以后,创建索引都支持Online DDL了,对于那种高峰期数据库已经被这个语句打挂了的情况,最高效的做法就是直接执行alter table 语句。 比较理想的是能够在备库先执行; 假设现在的服务是⼀主⼀备:主库A、备库B,这个方案的大致流程是这样的: 在备库B上执行 set sql_log_bin=off ,也就是不写binlog

iOS面试题:简述性能优化

雨燕双飞 提交于 2019-12-16 03:06:20
在性能优化中一个最具参考价值的属性是FPS:Frames Per Second,其实就是屏幕刷新率,苹果的iphone推荐的刷新率是60Hz,也就是说GPU每秒钟刷新屏幕60次,这每刷新一次就是一帧frame,FPS也就是每秒钟刷新多少帧画面。静止不变的页面FPS值是0,这个值是没有参考意义的,只有当页面在执行动画或者滑动的时候,FPS值才具有参考价值,FPS值的大小体现了页面的流畅程度高低,当低于45的时候卡顿会比较明显。 图层混合: 每一个layer是一个纹理,所有的纹理都以某种方式堆叠在彼此的顶部。对于屏幕上的每一个像素,GPU需要算出怎么混合这些纹理来得到像素RGB的值。 当Sa = 0.5时,RGB值为(0.5, 0, 0),可以看出,当两个不是完全不透明的CALayer覆盖在一起时,GPU大量做这种复合操作,随着这中操作的越多,GPU越忙碌,性能肯定会受到影响。 公式: R = S + D * ( 1 – Sa ) 结果的颜色是源色彩(顶端纹理)+目标颜色(低一层的纹理)*(1-源颜色的透明度)。 当Sa = 1时,R = S,GPU将不会做任何合成,而是简单从这个层拷贝,不需要考虑它下方的任何东西(因为都被它遮挡住了),这节省了GPU相当大的工作量。 一、入门级 1、用ARC管理内存 2、在正确的地方使用 reuseIdentifier 3、尽量把views设置为透明

cocos2dx性能优化

让人想犯罪 __ 提交于 2019-12-16 00:52:13
游戏性能应该在设计编码时就需要认真对待,在按照常规处理之后需要使用工具查找游戏性能瓶颈,之后针对处理. 主要的性能问题所在基本是GPU,CPU.经常涉及到游戏逻辑优化,优化效果的指标:帧率、内存、drawcall. 查找 GPU 性能瓶颈的工具 使用 Xcode OpenGL ES Profiler。 文档链接地址 如果你想 profiling 特定 GPU 的移动设备的图形性能,我们可以使用这些 GPU 制造商提供的工具: 对于 ARM Mali GPU,可以使用 mali graphics debugger: http://malideveloper.arm.com/resources/tools/mali-graphics-debugger/ 对于 Imagination PowerVR GPU,可以使用 PVRTune: https://community.imgtec.com/developers/powervr/tools/pvrtune/ 对于 Qualcomm Adreno GPU,可以使用 adreno GPU profiler: https://developer.qualcomm.com/software/adreno-gpu-profiler 使用工具查看图形渲染管线哪个阶段遇到瓶颈了,是顶点处理阶段,还是像素着色阶段。 查找 CPU 性能瓶颈的工具 Mac

Linux性能优化系列---CPU 上下文切换(下)

故事扮演 提交于 2019-12-16 00:36:36
怎么查看系统的上下文切换情况 通过前面学习我们知道,过多的上下文切换,会把 CPU 时间消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,缩短进程真正运行的时间,成了系统性能大幅下降的一个元凶。 既然上下文切换对系统性能影响那么大,你肯定迫不及待想知道,到底要怎么查看上下文切换呢?在这里,我们可以使用 vmstat 这个工具,来查询系统的上下文切换情况。 vmstat 是一个常用的系统性能分析工具,主要用来分析系统的内存使用情况,也常用来分析 CPU 上下文切换和中断的次数。 比如,下面就是一个 vmstat 的使用示例: # 每隔 5 秒输出 1 组数据 [root@node2 ~]# vmstat 5 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 7113928 2108 562564 0 0 0 65 133 203 0 0 100 0 0 我们一起来看这个结果,你可以先试着自己解读每列的含义。在这里,我重点强调下,需要特别关注的四列内容: cs(context switch)是每秒上下文切换的次数。 in(interrupt

Android开发性能优化总结

南楼画角 提交于 2019-12-15 18:38:13
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Android性能调优包含 移动网络优化 Java(Android)代码优化 布局优化 数据库性能优化 参考链接 http://www.trinea.cn/android/android-traceview/ 本文主要针对代码调优 应用程序的性能问题体现在很多方面, 比如第一次启动速度慢,或者进入某一界面速度慢;动画执行过程不流畅,或者动画执行卡顿时间长;ListView列表滑动过程中卡顿,不流畅;应用程序自定义的某特定界面执行速度慢;响应某一用户事件时长时间无响应(ANR);操作数据库时,执行大量数据的增删改查操作,执行速度慢;文件读写频繁,缓存文件过大导致卡顿;应用长时间运行后,随机出现卡顿现象。 以上的问题的原因可能不只一个,并且很多情况下并不是应用本身的问题,也有可能是系统其他层次有问题,只不过体现在应用层。所以开发人员在处理性能问题时,需要做的第一件事情就是判断是否是应用自身引起的性能问题,然后再对症下药;但有些时候应用本身逻辑正常,但由于系统的硬件配置不足引起了异常,此时就要根据产品或项目需求,采取一些更加精准的方式优化性能,以弥补硬件配置的不足。 以下从几个不同的角度总结一下应用程序性能优化的一些方法。 一、编程思想 应用层的性能优化通常可以从以下几个方面考虑: 了解编程语言的编译原理

JVM性能优化--Java的垃圾回收机制

半世苍凉 提交于 2019-12-15 10:10:53
一、Java内存结构 1、Java堆(Java Heap)   java堆是java虚拟机所管理的内存中最大的一块,是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。   java堆是垃圾收集器管理的主要区域,因此也被成为“GC堆”(Garbage Collected Heap)。从内存回收角度来看java堆可分为:新生代和老生代。从内存分配的角度看,线程共享的Java堆中可能划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer,TLAB)。无论怎么划分,都与存放内容无关,无论哪个区域,存储的都是对象实例,进一步的划分都是为了更好的回收内存,或者更快的分配内存。   根据Java虚拟机规范的规定,java堆可以处于物理上不连续的内存空间中。当前主流的虚拟机都是可扩展的(通过 -Xmx 和 -Xms 控制)。如果堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError异常。 2、Java虚拟机栈(Java Virtual Machine Stacks)   java虚拟机也是线程私有的,它的生命周期和线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧

java 性能问题排查与性能优化

帅比萌擦擦* 提交于 2019-12-14 13:39:56
1. 代码相关 遇到性能问题,首先应该做的是检查否与业务代码相关——不是通过阅读代码解决问题,而是通过日志或代码,排除掉一些与业务代码相关的低级错误。 性能优化的最佳位置,是应用内部。 譬如,查看业务日志,检查日志内容里是否有大量的报错产生,应用层、框架层的一些性能问题,大多数都能从日志里找到端倪(日志级别设置不合理,导致线上疯狂打日志);再者,检查代码的主要逻辑,如 for 循环的不合理使用、NPE、正则表达式、数学计算等常见的一些问题,都可以通过简单地修改代码修复问题。 **别动辄就把性能优化和缓存、异步化、JVM 调优等名词挂钩,复杂问题可能会有简单解,「二八原则」在性能优化的领域里里依然有效。**当然了,了解一些基本的「代码常用踩坑点」,可以加速我们问题分析思路的过程,从 CPU、内存、JVM 等分析到的一些瓶颈点优化思路,也有可能在代码这里体现出来。 下面是一些高频的,容易造成性能问题的编码要点。 1)正则表达式非常消耗 CPU(如贪婪模式可能会引起回溯),慎用字符串的 split()、replaceAll() 等方法;正则表达式表达式一定预编译。 2)String.intern() 在低版本(Java 1.6 以及之前)的 JDK 上使用,可能会造成方法区(永久代)内存溢出。在高版本 JDK 中,如果 string pool 设置太小而缓存的字符串过多

C#性能优化:延迟初始化Lazy

我怕爱的太早我们不能终老 提交于 2019-12-14 09:49:51
1. 概述 我们创建某一个对象需要很大的消耗,而这个对象在运行过程中又不一定用到,为了避免每次运行都创建该对象,这时候延迟初始化(也叫延迟实例化)就出场了。延迟初始化出现于.NET 4.0,主要用于提高性能,避免浪费计算,并减少程序内存要求。也可以称为,按需加载。 2. 基本语法 Lazy<T> xx = new Lazy<T>();//xx代表变量名 3. 举例实现 首先创建一个Student类,代码如下: 代码using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace LazyTest { class Student { public Student() { this.Name = "DefaultName"; Console.WriteLine("调用Student的构造函数"); } public string Name { get; set; } } } 代码using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks