性能优化

前端性能优化 - 资源预加载

你离开我真会死。 提交于 2019-12-05 17:46:41
提到前端性能优化时,我们首先会联想到文件的合并、压缩,文件缓存和开启服务器端的 gzip 压缩等,这使得页面加载更快,用户可以尽快使用我们的 Web 应用来达到他们的目标。 资源预加载:是另一个性能优化技术,我们可以使用该技术来预先告知浏览器某些资源可能在将来会被使用到。 引用 Patrick Hamann 的 解释 : 预加载是浏览器对将来可能被使用资源的一种暗示,一些资源可以在当前页面使用到,一些可能在将来的某些页面中被使用。作为开发人员,我们比浏览器更加了解我们的应用,所以我们可以对我们的核心资源使用该技术。 这种做法曾经被称为 prebrowsing ,但这并不是一项单一的技术,可以细分为几个不同的技术: DNS-prefetch 、 subresource 和标准的 prefetch 、 preconnect 、 prerender 。   DNS 预解析 DNS-Prefetch 通过 DNS 预解析来告诉浏览器未来我们可能从某个特定的 URL 获取资源,当浏览器真正使用到该域中的某个资源时就可以尽快地完成 DNS 解析。 例如,我们将来可能从 example.com 获取图片或音频资源,那么可以在文档顶部的 <head> 标签中加入以下内容: <link rel="dns-prefetch" href="//example.com"> 当我们从该 URL

关于UITableView的性能优化

☆樱花仙子☆ 提交于 2019-12-05 12:55:36
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 这个代理方法的实现,在可见的页面是会重复绘制页面的,所以绝大部分人都会在这里做一些代码处理 比如: static NSString *CellIdentifier = @"LazyTableCell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 很常规的,防止cell对象无限的被创建,等同于android里面适配器的方法 public View getView(int position, View convertView, ViewGroup arg2) 以上举例代码是可以让cell被重复使用,一般大概只会在可见页面部分的几个cell会被new下,其他的全部重复使用前面已经有的cell对象,到时候只要填充数据就可以了 啰嗦下,android里面也是类似的处理的,给view添加tag值,到时候利用tag获取view对象 那么仅仅只是如此,恐怕现在的cell自定义的页面不只是文本那么简单,多多少少都会带有一些图片吧

JVM性能优化, Part 3 垃圾回收

半腔热情 提交于 2019-12-05 12:44:43
ImportNew注:本文是JVM性能优化 系列-第3篇-《 JVM性能优化, Part 3 —— 垃圾回收 》 第一篇 《 JVM性能优化, Part 1 ―― JVM简介 》 第二篇《 JVM性能优化, Part 2 ―― 编译器 》 Java平台的垃圾回收机制大大提高的开发人员的生产力,但实现糟糕的垃圾回收器却会大大消耗应用程序的资源。本文作为JVM性能优化系列的第3篇,Eva Andeasson将为Java初学者介绍Java平台的内存模型和GC机制。她将解释为什么碎片化(不是GC)是Java应用程序出现性能问题的主要原因,以及为什么当前主要通过分代垃圾回收和压缩,而不是其他最具创意的方法,来解决Java应用程序中碎片化的问题。 垃圾回收(GC)是旨在释放不可达Java对象所占用的内存的过程,是Java virtual machine(JVM)中动态内存管理系统的核心组成部分。在一个典型的垃圾回收周期中,所有仍被引用的对象,即可达对象,会被保留。没有被引用的Java对象所占用的内存会被释放并回收,以便分配给新创建的对象。 为了更好的理解垃圾回收与各种不同的GC算法,你首先需要了解一些关于Java平台内存模型的内容。 垃圾回收与Java平台内存模型 当你在启动Java应用程序时指定了启动参数_-Xmx_(例如,java -Xmx2g MyApp)

史上最强Tomcat8性能优化

隐身守侯 提交于 2019-12-05 11:16:12
文章目录 授人以鱼不如授人以渔 目的 服务器资源 Tomcat配置优化 Linux环境安装运行Tomcat8 AJP连接 执行器(线程池) 3种运行模式 部署测试用的web项目 查看服务器信息 部署web应用 使用Apache JMeter进行性能测试 下载安装 修改语言 创建接口的测试用例 启动与进行接口测试 查看测试报告 调整Tomcat参数进行优化 禁用AJP连接 设置线程池 最大线程数为150,初始为4 最大线程数为500,初始为50 最大线程数为1000,初始为200 最大线程数为5000,初始为1000 设置最大等待队列数 设置nio2的运行模式 参数说明与最佳实践 执行器参数说明(加粗是重点) 执行器最佳实践 连接器参数说明 通用属性(加粗是重点) 标准实现(加粗是重点) 连接器最佳实践 调整JVM参数进行优化 设置并行垃圾回收器 查看gc日志文件 调整年轻代大小 设置G1垃圾回收器 JVM配置最佳实践 总结 授人以鱼不如授人以渔 本博客的目的不在于给出最佳配置,而是带领开发者,能够从实际情况出发,通过不断的调节tomcat和jvm参数,去发现吞吐量,平均响应时间和错误率等信息的变化,同时根据服务器的cpu和内存等信息,结合接口的业务逻辑,最好是测试使用率最高,并发最大,或者是最重要的接口(比如下单支付接口),设置最优的tomcat和jvm配置参数。 目的

前端性能优化

故事扮演 提交于 2019-12-05 10:40:47
前端性能优化,目的是为什么?让用户有更友好的体验,让服务商节省可观的资源。 对优化方向进行分类,直接来看表: 优化方向 优化手段 请求数量 CSS Sprites,合并脚本和样式表 请求带宽 使用Gzip压缩传输文件,精简JS文件 缓存利用 使用http缓存,使用CDN,ajax,减少DNS查找 页面结构 样式表放顶部,脚本放底部 代码校验 避免CSS表达式,避免重定向 减少Repaint和Reflow 设置class,脱离文档流,减少dom操作 下面具体解释其中一些优化点: CDN Content Delivery Network 即内容分发网络,CDN把 内容分发 到距离用户近的缓存服务器,然后DNS托管(把DNS解析的地址改成CDN提供的),DNS服务器根据用户IP地址,将域名解析成相应节点的缓存服务器IP地址,实现 用户就近访问 ,提高网站渲染速度和性能。 减少repaint和reflow 回流与重绘 通过设置class的方式,而不是多次修改元素style属性。 有动画效果的元素可以将position属性设为fixed或absolute。 权衡速度的平滑性,函数节流(自己的理解) 减少对DOM元素的查询和修改,查询时可将其赋值给局部变量。 CSS引用 尽量使用link代替@import,因为link是在页面加载时同时加载,import是等页面加载完再加载。 有关缓存

常见性能优化策略的总结

感情迁移 提交于 2019-12-05 09:38:27
本文要感谢我职级评定过程中的一位评委,他建议把之前所做的各种性能优化的案例和方案加以提炼、总结,以文档的形式沉淀下来,并在内部进行分享。力求达到如下效果: 1. 形成可实践、可借鉴、可参考的各种性能优化的方案以及选型考虑点,同时配合具体的真实案例,其他人遇到相似问题时,不用从零开始。 2. 有助于开阔视野,除了性能优化之外,也能提供通用的常见思路以及方案选型的考虑点,帮助大家培养在方案选型时的意识、思维以及做各种权衡的能力。 文章在内部分享后,引起强烈分享,得到了不少同事和朋友的认可和好评,觉得对日常的工作有很好的指导作用。考虑到这些经验可能对业界同行也有帮助,所以在美团点评技术团队博客公开。 代码 之所以把代码放到第一位,是因为这一点最容易引起技术人员的忽视。很多技术人员拿到一个性能优化的需求以后,言必称缓存、异步、JVM等。实际上,第一步就应该是分析相关的代码,找出相应的瓶颈,再来考虑具体的优化策略。有一些性能问题,完全是由于代码写的不合理,通过直接修改一下代码就能解决问题的,比如 for循环次数过多、作了很多无谓的条件判断、相同逻辑重复多次 等。 数据库 数据库的调优,总的来说分为以下三部分: SQL调优 这是 最常用、每一个技术人员都应该掌握基本的SQL调优手段(包括方法、工具、辅助系统等) 。这里以MySQL为例,最常见的方式是,由 自带的慢查询日志或者开源的慢查询系统

《C++性能优化指南》第四章:优化字符串的使用

放肆的年华 提交于 2019-12-05 09:06:05
第四章:优化字符串的使用 针对C++的std::string进行讲解。 4.1 字符串的三个特性 (1)字符串是动态分配的    原因: 字符串内部的字符缓冲区的大小是固定的,当有使字符串变长的操作时,可能会使字符串的长度超出它内部的缓冲区的大小,从而发生从内存管理器中 malloc/new 一块新的缓冲区,并将字符串 copy 到新的缓冲区中,并 free/delete 原来的空间。   解释上文中出现可能性的原因,是有些字符串的实现方式所申请的字符缓冲区的大小是需要存储字符数的 2 倍。 (2)字符串是值,而非引用   也就是说,要把字符串当成一个整体对待,不能看成是组合的字节。比如:   1)赋值语句 = copy:一个字符串赋值给另一个字符串时,每个字符串变量都拥有一份它们所保存的内容的私有副本。   2)表达式 = 存在中间临时值:字符串表达式的中间结果也是值。     比如:s1 = s2 + s3 + s4;      s2 + s3 会malloc新的临时字符串并copy,+ s4 会再malloc新的临时字符串并copy和free,= 会取代 s1 之前的值并free,所以总共有2次malloc,2次free,5次copy。      (3)字符串会进行大量复制   因为字符串是以值的方式来处理的,当创建字符串、赋值、或将其作为参数传递给函数时

如何回答性能优化的问题,才能打动阿里面试官?

泪湿孤枕 提交于 2019-12-05 06:33:23
阿里妹导读:日常工作中,我们多少都会遇到应用的性能问题。在阿里面试中,性能优化也是常被问到的题目,用来考察是否有实际的线上问题处理经验。面对这类问题,阿里工程师齐光给出了详细流程。来阿里面试前,先看看这篇文章哦。 性能问题和Bug不同,后者的分析和解决思路更清晰,很多时候从应用日志(文中的应用指分布式服务下的单个节点)即可直接找到问题根源,而性能问题,其排查思路更为复杂一些。 对应用进行性能优化,是一个系统性的工程,对工程师的技术广度和技术深度都有所要求。一个简单的应用,它不仅包含了应用代码本身,还和容器(虚拟机)、操作系统、存储、网络、文件系统等紧密相关,线上应用一旦出现了性能问题,需要我们从多方面去考虑。 与此同时,除了一些低级的代码逻辑引发的性能问题外,很多性能问题隐藏的较深,排查起来会比较困难,需要我们对应用的各个子模块、应用所使用的框架和组件的原理有所了解,同时掌握一定的性能优化工具和经验。 本文总结了我们在进行性能优化时常用的一些工具及技巧,目的是希望通过一个全面的视角,去感知性能优化的整体脉络。本文主要分为下面三个部分: 第一部分会介绍性能优化的一些背景知识。 第二部分会介绍性能优化的通用流程以及常见的一些误区。 第三部分会从系统层和业务层的角度,介绍高效的性能问题定位工具和高频性能瓶颈点分布。 本文中提到的线程、堆、垃圾回收等名词,如无特别说明,指的是 Java

iOS-APP性能优化的那些事

≯℡__Kan透↙ 提交于 2019-12-05 05:51:28
前言 本人在这家公司已经三年多了,这款三年多我一直在做的APP也烂熟于心,APP也0到1到目前的500万的用户量;对于APP的功能来说也是比较全面的,用到的技术知识点也比较多吧,APP的优化也是一直在做的事情,而且APP性能的优化也不是一朝一夕的事情,在此离别之际,我将详细说明讲解一下我在三年里对APP性能优化方面做过的一些事,大家仁者见仁智者见智,也欢迎大家进群提供宝贵的意见和建议! 这里我主要讲性能方面的优化,代码方面的优化或者说API包方面的优化请看我的另一篇博文: ? iOS-APP包的瘦身之旅(从116M到现在的36M的减肥之路) ? 基础优化 使用ARC,现在的iOS开发大家用的都是ARC,几乎没有人再去使用MRC了,使用ARC的好处就是不用再时时刻刻注意要释放创建的对象了;避免使用xib或者storyboard。 这里说一下xib和sb的缺点吧,如下: 1.占用API包比较大; 2.导致APP启动时间比较耗时,因为在APP启动main()以前需要加载他们; 3.加载速度比较慢; 4.后期的版本更新迭代维护时间成本比较高; 5.多人开发容易引起冲突。 列表图片优化 列表不论在哪一个APP中是使用最为广泛的一款控件了,在我的APP中也不例外,我们的APP只要功能列表类似于微信的朋友圈,图片有0~9张的形式还可以是视频文件,如下图: 先说一说图片吧,如果一个列表都是9张图片

前端常见的性能优化和浏览器兼容性问题

只愿长相守 提交于 2019-12-05 05:17:49
前端常见的性能优化有哪些? 01.尽量减少 HTTP 请求 02.使用 CDN(内容分发网络) 03.添加 Expirem 头 04.压缩组件(Gzip) 05.将 CSS 样式表放在顶部(head) 06.将 js 脚本放在底部 07.避免使用 CSS 表达式 08.减少 DNS 查询 09.精简 js(压缩/混淆) 10.避免重定向(不要丢'/') 11.使用 Ajax 可缓存 12.删除重复脚本(代码模块化) 前端常见的浏览器兼容性问题 1.不同浏览器的标签默认的外补丁和内补丁 解决方案:CSS 里增加通配符 * { margin: 0 ; padding: 0 ; } 2.IE6 双边距问题:在 IE6 中设置了 float,同时又设置 margin,就会出现边距问题 解决方案:设置 display:inline; 3.当标签的高度设置小于 10px,在 IE6、IE7 中会出现超出自己设置的位置 解决方案:超出高度的标签位置 overflow:hidden ,或者设置 line-height 的值小于你的设置高度 4.图片默认有间隙 解决方案:使用 float 为 img 布局 5.IE9 以下的浏览器不能使用 opacity 解决方案: opacity:0.5; filter:alpha(opacity = 50); filter:progid