性能优化

Django的性能优化

帅比萌擦擦* 提交于 2019-11-28 10:35:48
Django的性能优化 一,利用标准数据库优化技术 传统数据库优化技术博大精深,不同的数据库有不同的优化技巧,但重心还是有规则的。在这里算是题外话,挑两点通用的说说:    索引,给关键的字段添加索引,性能能更上一层楼,如给表的关联字段,搜索频率高的字段加上索引等。Django建立实体的时候,支持给字段添加索引,具体参考Django.db.models.Field.db_index。按照经验,Django建立实体之前应该早想好表的结构,尽量想到后面的扩展性,避免后面的表的结构变得面目全非。    使用适当字段类型,本来varchar就搞定的字段,就别要text类型,小细节别不关紧要,后头数据量一上去,愈来愈多的数据,小字段很可能是大问题。 二 ,了解Django的QuerySets   了解Django的QuerySets对象,对优化简单程序有至关重要的作用。QuerySets是有缓存的,一旦取出来,它就会在内存里呆上一段时间,尽量重用它。 # 了解缓存属性: >>> entry = Entry.objects.get(id=1) >>> entry.blog # 博客实体第一次取出,是要访问数据库的 >>> entry.blog # 第二次再用,那它就是缓存里的实体了,不再访问数据库 >>> entry = Entry.objects.get(id=1) >>> entry

React的性能优化

百般思念 提交于 2019-11-28 09:44:48
1. 在constructor中绑定事件函数的this指向 把一个函数赋值给一个变量,然后用那个变量去执行函数会造成this的丢失,所以需要绑定this,把绑定放在构造函数中可以保证只绑定一次函数,如果放在render函数中绑定this的话每次渲染都会去绑定一次this,那样是很耗费性能的。 2. 使用箭头函数也就是异步函数的方式写setState setState它是一个异步函数,他会合并多次修改,降低diff算法的比对频率。这样也会提升性能。 3. 虚拟DOM的使用 用JS对象描述DOM,而不是真的去调用浏览器API生成真实DOM。这样子啊比对前的生成会极大提升性能。 4. 同层比对 新旧状态的比对时采用同层比对,当发现某节点不一致了直接替换该节点的子树。而不管它的子树是不是真的改动了。 5. key值的使用 在列表循环的时候React会要求每一个列表项有一个独一无二,稳定的key值,它的目的是为了当状态改变时新旧状态的每一个列表项能够对应起来,方便比对。 6. shouldComponentUpdate 当父组件被重新渲染时即render函数执行时,子组件就会默认被重新渲染,但很多时候是不需要重新渲染每一个子组件的。这时就可以使用 shouldComponentUpdate 来判断是否真的需要重新渲染子组件。仅仅一个判断,就可以节约很多的消耗。

Spring/Hibernate 应用性能优化的7种方法

£可爱£侵袭症+ 提交于 2019-11-28 09:18:59
对于大多数典型的 Spring/Hibernate 企业应用而言,其性能表现几乎完全依赖于持久层的性能。此篇文章中将介绍如何确认应用是否受数据库约束,同时介绍七种常用的提高应用性能的速成法。本文系 OneAPM 工程师编译整理。 如何确认应用是否受限于数据库 确认应用是否受限于数据库的第一步,是在开发环境中进行测试,并使用 VisualVM 进行监控。VisualVM 是一款包含在 JDK 中的 Java 分析器,在命令行输入 jvisualvm 即可调用。 启用 Visual VM 之后,尝试以下步骤: 双击你正在运行的应用 选择 Sampler 点击 Settings 复选框 选择 Profile only packages ,然后输入下列包: your.application.packages.* org.hibernate.* org.springframework.* your.database.driver.package , 比如 oracle.* 点击 Sample CPU 如果应用性能受限于数据库,其 CPU 分析结果看起来会像下图: 我们看到,客户端 Java 进程花在等待数据库从网络中返回结果的时间占56%。 看到数据库查询是导致应用运行缓慢的原因,其实是好兆头。Hibernate 反射调用占比32.7%是正常情况,无法进一步优化。 性能调优第一步

页面性能优化的简单介绍

。_饼干妹妹 提交于 2019-11-28 07:42:15
前言:为什么要进行页面性能优化   互联网有一项著名的8秒原则。用户在访问Web网页时,如果时间超过8秒就会感到不耐烦,如果加载需要太长时间,他们就会放弃访问。 大部分用户希望网页能在2秒之内就完成加载。事实上,加载时间每多1秒,你就会流失7%的用户。8秒并不是准确的8秒钟,只是向网站开发者表明了加载时间的重要性。那我们如何优化页面性能,提高页面加载速度呢?这是本文主要要探讨的问题,然而性能优化是个综合性问题,没有标准答案,想要面面俱到罗列出来,并非易事。 本文只是简单介绍了一下页面性能优化有哪些常用方法,给新手普及知识用。也是自我学习的一个过程 一、资源压缩与合并 资源压缩主要包括这些方面:    html压缩    css 压缩    js的压缩和混乱    文件合并 资源压缩 可以从文件中去掉多余的字符,比如 回车 、 空格 。你在编辑器中写代码的时候,会使用缩进和注释,这些方法无疑会让你的代码简洁而且易读,但它们也会在文档中添加多余的字节,这些字符就是网页中多余的东西,会影响网页的性能。 1.html压缩 html代码压缩就是压缩这些在文本文件中有意义,但是在HTML中不显示的字符,包括 空格 , 制表符 , 换行符 等,还有一些其他意义的字符,如HTML注释也可以被压缩。 如何进行html压缩: 使用在线网站进行压缩(开发过程中一般不用) nodejs 提供了html

Redis特点分析及性能优化

瘦欲@ 提交于 2019-11-28 07:29:00
一.Key   》Redis key值是二进制安全的,这意味着可以可以使用任何二进制序列作为key值。空字符串也是有效的key值。   》key取值原则     1.键值不需要太长,消耗内存,且在数据中查找这类键值计算成本较高     2.键值不宜过短,可读性较差,不宜数据分类和扩展   》过期     1.Redis中可以给key设置一个有效时间【秒或毫秒】,当达到这个时长后,这些键值将会被自动删除   》有效     1.查看剩余有效时间【TTL key/PTTL key】【TTL time to live】       >key存在但没有设置TTL,返回-1       >key存在,还在有效期内,返回剩余的秒或毫秒值       >key曾经存在,但已失效,返回-2【2.8版本之前返回-1】   》查找【KEYS pattern】     1.pattern取值       >*任意长度字符       >?任意一个字符       >[]字符集合,表示可以是集合中的任意一个   》key类型【TYPE key】   》key是否存在【EXISTS key】   》key重命名【RENAME key newkey/RENAMENX key newkey】   》key删除【DEL key】 二.value   》字符串是一种最基本的Redis值类型

Linux 性能优化排查工具

♀尐吖头ヾ 提交于 2019-11-28 06:47:35
下图1为 Linux 性能优化排查工具的总结 图1 诊断 CPU 工具 查看 CPU 核数 总核数 = 物理CPU个数 X 每颗物理CPU的核数 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l 查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo| grep "cpu cores"| uniq 查看逻辑CPU的个数 cat /proc/cpuinfo| grep "processor"| wc -l 或者 top 后按 1,第三行开始数有几个CPU 就是几个逻辑CPU 如图2只有一个逻辑CPU0 图2 top top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。 语法 top [选项] 选项 -b:以批处理模式操作; -c:显示完整的治命令; -d:屏幕刷新间隔时间; -I:忽略失效过程; -s:保密模式; -S:累积模式; -i<时间>:设置间隔时间; -u<用户名>:指定用户名; -p<进程号>:指定进程; -n<次数>:循环显示的次数。 图3 在 Linux 命令终端输入 top

数据库性能优化策略

你说的曾经没有我的故事 提交于 2019-11-28 06:42:39
1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描 3.应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。 4.应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num=10 or Name = 'admin' 可以这样查询: select id from t where num = 10 union all select id from t where Name = 'admin' 5.in 和 not in 也要慎用,否则会导致全表扫描,如: select id from t where num in(1,2,3) 对于连续的数值,能用 between 就不要用 in 了: select id from t where num between 1 and 3 很多时候用 exists 代替 in 是一个好的选择: select num from a where num in(select num from b) 用下面的语句替换:

SQLSERVER SQL性能优化

一世执手 提交于 2019-11-28 06:32:30
1.选择最有效率的表名顺序(只在基于规则的优化器中有效)      SQLSERVER 的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表driving table)将被最先处理,在FROM子句中包含多个表的情况下,必须选择记录条数最少的表作为基础表,当 SQLSERVER 处理多个表时,会运用排序及合并的方式连接它们,    首先,扫描第一个表(FROM子句中最后的那个表)并对记录进行排序;然后扫描第二个表(FROM子句中最后第二个表);最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并    例如: 表 TAB1 16,384 条记录表 TAB2 5 条记录,选择TAB2作为基础表 (最好的方法) select count(*) from tab1,tab2 执行时间0.96秒,选择TAB2作为基础表 (不佳的方法) select count(*) from tab2,tab1 执行时间26.09秒; 如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其他表所引用的表      例如:    EMP表描述了LOCATION表和CATEGORY表的交集    SELECT *    FROM LOCATION L,    CATEGORY C,    EMP E  

Linux性能优化从入门到实战:17 网络篇:网络基础

耗尽温柔 提交于 2019-11-28 06:21:37
网络模型 为了解决网络互联中异构设备的兼容性问题,并解耦复杂的网络包处理流程,国际标准化组织制定了开放式系统互联通信参考模型(Open System Interconnection Reference Model),简称 OSI 网络模型。OSI 模型把网络互联的框架分为应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层等 七层网络模型 ,每个层负责不同的功能。 应用层 Application,负责为应用程序提供统一的接口。 表示层 Presentation,负责把数据转换成兼容接收系统的格式。 会话层 Session,负责维护计算机之间的通信连接。 传输层 Transport,负责为数据加上传输表头,形成数据包。 网络层 Network,负责数据的路由和转发。 数据链路层 Data Link,负责 MAC 寻址、错误侦测和改错。 物理层 Physical,负责在物理网络中传输数据帧。 更为实用的 四层网络模型 ,即 TCP/IP 网络模型。 应用层,负责向用户提供一组应用程序,比如 HTTP、FTP、DNS 等。 传输层,负责端到端的通信,比如 TCP、UDP 等。 网络层,负责网络包的封装、寻址和路由,比如 IP、ICMP 等。 网络接口层,负责网络包在物理网络中的传输,比如 MAC 寻址、错误侦测以及通过网卡传输网络帧等。 Linux 网络栈 TCP/IP

JavaScript性能优化

▼魔方 西西 提交于 2019-11-28 05:44:56
如今主流浏览器都在比拼JavaScript引擎的执行速度,但最终都会达到一个理论极限,即无限接近编译后程序执行速度。 这种情况下决定程序速度的另一个重要因素就是代码本身。 在这里我们会分门别类的介绍JavaScript性能优化的技巧,并提供相应的测试用例,供大家在自己使用的浏览器上验证, 同时会对特定的JavaScript背景知识做一定的介绍。 目录 变量查找优化 变量声明带上var 慎用全局变量 缓存重复使用的全局变量 避免使用with 核心语法优化 通过原型优化方法定义 避开闭包陷阱 避免使用属性访问方法 避免在循环中使用try-catch 使用for代替for…in…遍历数组 使用原始操作代替方法调用 传递方法取代方法字符串 脚本装载优化 使用工具精简脚本 启用Gzip压缩 设置Cache-Control和Expires头 异步加载脚本 DOM操作优化 减少DOM元素数量 优化CSS样式转换 优化节点添加 优化节点修改 减少使用元素位置操作 避免遍历大量元素 事件优化 使用事件代理 动画优化 设置动画元素为absolute或fixed 使用一个timer完成多个元素动画 变量查找优化 变量声明带上var 1. 如果声明变量忘记了var,那么js引擎将会遍历整个作用域查找这个变量,结果不管找到与否,都是悲剧。 如果在上级作用域找到了这个变量,上级作用域变量的内容将被无声的改写