性能优化

干货!SQL性能优化,书写高质量SQL语句

僤鯓⒐⒋嵵緔 提交于 2020-01-06 17:09:35
干货!SQL性能优化,书写高质量SQL语句 点点赞 不迷路 文末领取博主精心为大家准备的面试渡劫大礼包 写SQL语句的时候我们往往关注的是SQL的执行结果,但是是否真的关注了SQL的执行效率,是否注意了SQL的写法规范? 以下的干货分享是在实际开发过程中总结的,希望对大家有所帮助! 1.limit分页优化 当偏移量特别大时,limit效率会非常低。 SELECT id FROM A LIMIT 1000 , 10 很快 SELECT id FROM A LIMIT 90000 , 10 很慢 方案一 select id from A order by id limit 90000 , 10 ; 如果我们结合order by使用。很快,0.04秒就OK。 因为使用了id主键做索引! 当然,是否能够使用索引还需要根据业务逻辑来定,这里只是为了提醒大家,在分页的时候还需谨慎使用! 方案二 select id from A order by id between 90000 and 90010 ; 2.利用limit 1 、top 1 取得一行 有些业务逻辑进行查询操作时(特别是在根据某一字段DESC,取最大一笔).可以使用limit 1 或者 top 1 来终止[数据库索引]继续扫描整个表或索引 反例 SELECT id FROM A LIKE 'abc%' 正例 SELECT id

vue性能优化2--引入cdn

丶灬走出姿态 提交于 2020-01-06 02:27:52
当我们加载页面时,需要将我们所需要的一些依赖加载到当前会话中然后再开始执行,如果我们首屏,模块比较多是,需要等待的时间会比较长,而且。浏览器内存最多执行四十个进程,需要等到加载完前面的才能执行后面的代码,如果我们采用cdn的方式来引入一些第三方资源,就可以缓解我们服务器的压力,原理是将我们的压力分给其他服务器点。 配置 首页引入这些cdn,index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <link rel="icon" href="<%= BASE_URL %>favicon.ico"> <script src="https://cdn.bootcss.com/vue/2.5.2/vue.min.js"></script> <script src="https://cdn.bootcss.com/vue-router/3.0.1/vue-router.min.js"></script> <title>mytest</title> <

网站性能优化(website performance optimization)2

爷,独闯天下 提交于 2020-01-04 03:43:14
我们先研究下构建渲染树前的几个步骤:也就是DOM和CSSOM,通常这些步骤的效果最差使你的网页呈现速度非常慢,我们是讨论尽可能快的将HTML流式传输给客户端,使浏览器能够开始构建DOM,还有其他注意事项吗?有一个HTML的尺寸呢?我想应该尽可能小,我们来看看实现这一目的一些策略,假设我想要优化这个HTML 要优化CSSOM,我们需要删除不必要的样式,缩小和压缩文件并缓存,对吧?对,这些都是很好的策略,安市没记错的话,当我们运行PageSpeed Insignts的时候,它还推荐我们查看下阻止呈现的CSS。假设有个简单的网页,包含一个CSS文件,浏览器下载了HTML然后发现并获取CSS,浏览器最早什么时候就会绘制网页? 我们不能绘制没有样式的网页,也就是阻止呈现的CSS,可以对此作出优化?CSS使我们能够按照特定条件范围应用样式,如这个文件,body规则在所有条件下都适用。但是当设备处于横向模式时,我们会应用特殊的规则。是菜单悬浮在右侧,类似的,如果有用户想要打印网页,我们就会调整文本大小,适用更小的字号,媒体查询对自适应设计来说很重要,但是这回如何帮助我优化关键渲染路径呢?假设我要呈现使用这个CSS文件的网页,我们注意到浏览器会阻止呈现,直到解析了所有的样式,但是直观的来说,你认为它应该对print规则阻止呈现吗?我认为如果我们不打印网页的话,则没必要呈现,对吧?对

UGUI ScrollRect 性能优化

左心房为你撑大大i 提交于 2020-01-04 03:42:15
测试环境 操作系统:Windows8.1 开发工具:Unity5.5.2 1、问题描述,在实际开发过程中经常会使用ScrollRect实现滚动列表,当初次加载数据比较多的情形时,Unity3D会出现比较严重的卡顿,降低帧率,其原因主要为 a、集中式的申请ItemRenderer对象大量堆内存,b、帧Draw Call增加。 2、解决方案,主要逻辑根据Viewport即Mask Visual区域计算当前上下文显示ItemRenderer个数,同时滚动的时候会动态计算scrollLineIndex行数,来重新计算每一个ItemRenderer渲染的位置,从而复用ItemRenderer。   如图所示:当前数据已经有31个,但是ItemRenderer的实例只有21个,即当前满屏情况下最大的显示个数。 3、完成代码 UIWrapItem 用来作为数据、ItemRenderer prefab的 具体关联类。 using UnityEngine; /// <summary> /// Wrapper Item for user data index. /// </summary> public class UIWrapItem : MonoBehaviour { /// <summary> /// User data index /// </summary> private int

C++的性能优化实践

佐手、 提交于 2020-01-04 03:40:59
优化准则: 1. 二八法则:在任何一组东西中,最重要的只占其中一小部分,约20%,其余80%的尽管是多数,却是次要的;在优化实践中,我们将精力集中在优化那20%最耗时的代码上,整体性能将有显著的提升;这个很好理解。函数A虽然代码量大,但在一次正常执行流程中,只调用了一次。而另一个函数B代码量比A小很多,但被调用了1000次。显然,我们更应关注B的优化。 2. 编完代码,再优化;编码的时候总是考虑最佳性能未必总是好的;在强调最佳性能的编码方式的同时,可能就损失了代码的可读性和开发效率; 工具: 1 Gprof 工欲善其事,必先利其器。对于Linux平台下C++的优化,我们使用gprof工具。gprof是GNU profile工具,可以运行于linux、AIX、Sun等操作系统进行C、C++、Pascal、Fortran程序的性能分析,用于程序的性能优化以及程序瓶颈问题的查找和解决。通过分析应用程序运行时产生的“flat profile”,可以得到每个函数的调用次数,消耗的CPU时间(只统计CPU时间,对IO瓶颈无能为力),也可以得到函数的“调用关系图”,包括函数调用的层次关系,每个函数调用花费了多少时间。 2. gprof使用步骤 1) 用gcc、g++、xlC编译程序时,使用-pg参数,如:g++ -pg -o test.exe test.cpp

C#性能优化实践

旧城冷巷雨未停 提交于 2020-01-04 03:40:50
性能主要指两个方面:内存消耗和执行速度。性能优化简而言之,就是在不影响系统运行正确性的前提下,使之运行地更快,完成特定功能所需的时间更短。 本文以.NET平台下的控件产品MultiRow为例,描述C#性能优化的实践。 性能优化原则 · 理解需求 MultiRow的一个性能需求是:“百万行数据绑定下平滑滚动。”整个MultiRow项目的开发过程一直在考虑这个目标。 · 理解瓶颈 99%的性能消耗是由于1%的代码造成的。大部分性能优化都是针对这1%的瓶颈代码进行的。具体实施也就分为两步:“发现瓶颈”和“消除瓶颈”。 · 切忌过度 性能优化本身是有成本的。这个成本不单单体现在做性能优化所付出的工作量,还包括为性能优化而写出复杂的代码导致额外的维护成本,比如引入新的Bug,额外的内存开销等。性能优化常常需要在收益和成本之间做出权衡。 如何发现性能瓶颈 性能优化的第一步是发现性能瓶颈,下面是一些定位性能瓶颈的实践。 · 如何获取内存消耗 以下代码可以获取某个操作的内存消耗。 long start = GC.GetTotalMemory(true); // 在这里写需要被测试内存消耗的代码,例如,创建一个GcMultiRow var gcMulitRow1 = new GcMultiRow(); GC.Collect(); // 确保所有内存都被GC回收 GC

前端性能优化(二):移动端浏览器前端优化策略

浪尽此生 提交于 2020-01-04 03:40:32
相对于桌面端浏览器,移动端Web浏览器上有一些较为明显的特点:设备屏幕较小、新特性兼容性较好、支持一些较新的HTML5和CSS3特性、需要与Native应用交互等。但移动端浏览器可用的CPU计算资源和网络资源极为有限,因此要做好移动端Web上的优化往往需要做更多的事情。首先,在移动端Web的前端页面渲染中,桌面浏览器端上的优化规则同样适用,此外针对移动端也要做一些极致的优化来达到更好的效果。需要注意的是,并不是移动端的优化原则在桌面浏览器端就不适用,而是由于兼容性和差异性的原因,一些优化原则在移动端更具代表性。 一、网络加载类 1.首屏数据请求提前,避免JavaScript文件加载后才请求数据 为了进一步提升页面加载速度,可以考虑将页面的数据请求尽可能提前,避免在JavaScript加载完成后才去请求数据。通常数据请求是页面内容渲染中关键路径最长的部分,而且不能并行,所以如果能将数据请求提前,可以极大程度上缩短页面内容的渲染完成时间。 2.首屏加载和按需加载,非首屏内容滚屏加载,保证首屏内容最小化 由于移动端网络速度相对较慢,网络资源有限,因此为了尽快完成页面内容的加载,需要保证首屏加载资源最小化,非首屏内容使用滚动的方式异步加载。一般推荐移动端页面首屏数据展示延时最长不超过3秒。目前中国联通3G的网络速度为338KB/s(2.71Mb/s)

桌面端前端性能优化策略

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

网站性能优化之缓存篇

浪子不回头ぞ 提交于 2020-01-04 03:39:50
文章来源: http://blog.sina.com.cn/s/blog_71219ee20100sgma.html 大型电子商务网站的性能优化是web程序员必修课之一,基于net开发的web应用程序,通常借助于net提供的cache技术来实现缓存。下面是我对“# 窝窝商城 #”大型btoc网站基于cache缘存的一些记录。 参考资料:OutputCache VaryByParam ASP.NET 的输出缓存 衡量高性能、可缩放的 web 应用程序最重要的一个指标就是缓存了。 ASP.NET 提供了高性能的 web 应用程序的缓存功能 ,ASP.NET 有三种可由 Web 应用程序使用的缓存: · 输出缓存 ,它缓存请求所生成的动态响应。 · 片断缓存 ,它缓存请求所生成的响应的各部分。 · 数据缓存 ,它以编程方式缓存任意对象。为支持这种缓存, ASP.NET 提供了全功能的缓存引擎,使程序员能够轻松地在请求间保留数据。 页的输出缓存是非常有用的。在海量的访问站点中,有些页面的访问频率占了非常大的比重,即使对这些页使用输出缓存很少的时间,也会减轻系统不少的负担,因为后面对这些页面的请求将不在执行创建该页的代码。 但是,这样显得不够灵活,页的请求可能的确是很多,然而在页面上我们缓存了所有的东西,无论是构造成本高还是构造成本低的部分。能否有一种可以缓存页的部分的数据呢?幸运的是

WEB性能优化--缓存

时光总嘲笑我的痴心妄想 提交于 2020-01-04 03:38:31
缓存是位于内存中的一块用于临时存储数据的区域,在java web的开发中,主要用来优化程序与数据库的交互,将频繁的sql查询操作或增,删,改(一般的,查询操作远大于增,删,改的操作),只当第一次请求时,直接请求数据库,然后把结果放到缓存中,后续若再有相同的操作请求,直接去缓存中取值,大大减轻了数据库服务器的压力.(java项目的开发中,数据库是最薄弱的一环) 一.缓存的简单模拟实现代码 1>没有缓存时的代码 public User findById(Integer id){ String sql="SELECT * FROM T_USER WHERE id=?"; return DBHelp.executeQueryForObject(User.class,sql,id); } 2>加上缓存后的代码 public User findById(Integer id){ /**首先去缓存中查找对象,有就直接返回; 没有在去数据库中操作,并且把操作后的结果放入缓存中,方便后续的使用 */ User user = cache.get("user"+id); if(user==null){ String sql="SELECT * FROM T_USER WHERE id=?"; return DBHelp.executeQueryForObject(User.class,sql,id);