性能优化

javascript性能优化

穿精又带淫゛_ 提交于 2019-11-28 05:44:40
1、尊重对象所有权  不要为实例或原型添加属性;  不要为实例或原型添加方法;  不要重定义已存在的方法。 最佳的方法便是永远不修改不是由你所有的对象。所谓拥有对象,就是说这个对象是你创建 的,比如你自己创建的自定义类型或对象字面量。而 Array 、 document 这些显然不是你的,它们在你 的代码执行前就存在了。 2、避免全局变量 最多创建一个全局变量,让其他对象和函数存在其中。请看以下例子: //两个全局量——避免!! var name = "Nicholas"; function sayName(){ alert(name); } 这段代码包含了两个全局量:变量 name 和函数 sayName() 。其实可以创建一个包含两者的对象, 如下例所示: //一个全局量——推荐 var MyApplication = { name: "Nicholas", sayName: function(){ alert(this.name); } }; 3、避免与 null 进行比较  如果值应为一个引用类型,使用 instanceof 操作符检查其构造函数;  如果值应为一个基本类型,使用 typeof 检查其类型;  如果是希望对象包含某个特定的方法名,则使用 typeof 操作符确保指定名字的方法存在于对 象上。 4、使用常量 尽管 JavaScript

JavaScript 性能优化技巧分享

不打扰是莪最后的温柔 提交于 2019-11-28 05:44:12
本文参考文章:https://www.sitepoint.com/javascript-performance-optimization-tips-an-overview/ 转载请注明出自: 葡萄城官网 ,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 JavaScript 作为当前最为常见的直译式脚本语言,已经广泛应用于 Web 应用开发中。为了提高Web应用的性能,从 JavaScript 的性能优化方向入手,会是一个很好的选择。 本文从加载、上下文、解析、编译、执行和捆绑等多个方面来讲解 JavaScript 的性能优化技巧,以便让更多的前端开发人员掌握这方面知识。 什么是高性能的 JavaScript 代码? 尽管目前没有高性能代码的绝对定义,但却存在一个以用户为中心的性能模型,可以用作参考: RAIL模型 。 响应 如果你的应用程序能在100毫秒内响应用户的操作,那么用户会认为该响应为即时的。这适用于可点击的元素,不适用于滚动或拖动操作。 动画 在60Hz的显示器上,我们希望动画和滚动时每秒有60帧,这种情况下每帧大约为16ms。在这16ms的时间内,实际上只有8-10ms来完成所有工作,其余时间则由浏览器的内部和其它差异占据。 空闲工作 如果你有一个耗时很久,需要持续运行的任务时,请确保把它分成很小的块,以便允许主线程对用户的输入操作做出反应

JavaScript性能优化

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

实战Tomcat性能优化

孤街浪徒 提交于 2019-11-28 05:42:01
前言 由于不同的硬件配置导致默认的tomcat配置无法达到最佳的性能,导致我们需要对tomcat的进行相应的配置调整。 Tomcat内存优化 配置信息:JAVA_OPTS=’-Xms1024m -Xmx2048m -XX: PermSize=256M -XX:MaxNewSize=256m -XX:MaxPermSize=256m’ 将以上配置信息在tomcat中的catalina.sh 中配置如下图所示: 参数描述: -server 启用jdk 的 server 版;   -Xms java虚拟机初始化时的最小内存;   -Xmx java虚拟机可使用的最大内存;   -XX: PermSize 内存永久保留区域 -XX:MaxPermSize 内存最大永久保留区域 根据不同的配置硬件设备可适当调整参数的大小,内存大、cpu核数多,可对相应的参数设置过大,反之设置适当偏小。 Tomcat并发优化 并发优化主要在conf中server.xml文件中配置。配置代码如下: <Connector port="8080"   protocol="HTTP/1.1"   maxHttpHeaderSize="8192"   minProcessors="100"   maxProcessors="1000"   acceptCount="1000"   redirectPort="8443"

SQL性能优化-执行计划

我的梦境 提交于 2019-11-28 05:38:43
SQL性能优化 首先,要理解什么是执行计划 PLSQL可以看执行计划:圆形框起来的 也可以改代码格式:红框 数据库存储结构: 数据块 是oracle 对数据文件进行管理的单位, 数据库中最小的 数据块 是最小的数据单位,是最小的I/O 单位, 数据区: 连续的数据块构成的数据库逻辑存储分配单位 数据区何时被回收: 如果用户为回滚段(rollbacksegment)设定了 OPTIMAL 参数,Oracle将周期性地从其中回收数据扩展。 使用 drop delete 和 truncate,oracle不会回收对应的字段的数据块 数据段: 数据段是数据库对象的对应,一个数据库对象对应一个数据段 通俗的讲 一个表为一个段,如果表分区了,那么一个表分区是一个段 表空间: 由一个或者多个物理文件组成,建表时,将表建在表空间上 SQL性能优化: 1.select * from 避免使用 2.减少数据库的访问次数 3.索引上加函数,会致使索引失效,不要再索引上加函数 4.隐身转换也会导致索引失效 id='3' 5.like '%xx%' 第一个不要 6.IS NULL", " <>", "!=", "!>", "! <", "NOT", "NOT EXISTS", "NOT IN", "NOT LIKE", and "LIKE '%500'",因为他们不走索引全是表扫描 7

数据库SQL语句性能优化

血红的双手。 提交于 2019-11-28 01:43:12
原文地址: https://www.jiagou1216.com/blog/db/479.html 选择最有效率的表名顺序 ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。 如果有3个以上的表连接查询, 那就需要选择交叉表(intersection table)作为基础表, 交叉表是指那个被其他表所引用的表. WHERE子句中的连接顺序 ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. SELECT子句中避免使用'*' 当你想在select子句中列出所有的column时,使用动态sql列引用''是一个方便的方法,不幸的是,这是一个非常低效的方法。 实际上,oracle在解析的过程中,会将''依次转换成所有的列名。这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间。 字符型字段必须加单引号 字符型字段必须加单引号,避免where查询条件做隐型转换时后出现混乱, select ename,sal,deptno from emp where empno='7782';

Linux性能优化从入门到实战:06 CPU篇:快速定位CPU瓶颈

℡╲_俬逩灬. 提交于 2019-11-28 01:26:06
CPU性能指标       (1)CPU使用率 :1) 用户态CPU使用率(包括用户态 user 和低优先级用户态 nice)、2) 系统CPU使用率、3) 等待 I/O 的CPU使用率、4) 软中断和硬中断的CPU使用率、5) 虚拟机占用的CPU使用率。    (2)平均负载 Load Average :过去 1 分钟、过去 5 分钟和过去 15 分钟的平均负载    (3)进程上下文切换 :1) 无法获取资源而导致的自愿上下文切换;2) 被系统强制调度导致的非自愿上下文切换。    (4)CPU缓存命中率 :因为CPU处理速度比内存访问速度快得多,则需要等待内存的响应。为了协调两者性能差距,出现了CPU的多级缓存。如下图所示,L1、L2属于单核,L3用在多核中,缓存大小依次增大、性能依次降低。缓存命中率,衡量的是CPU缓存的复用情况,命中率越高、复用越多,性能越好。       性能工具    (1)平均负载案例 : 1) uptime 查看了系统的平均负载,2) mpstat 和 pidstat 分别观察了每个 CPU 和每个进程 CPU 的使用情况。    (2)上下文切换的案例 :1)vmstat 查看系统的上下文切换次数和中断次数;2)pidstat 观察进程的自愿上下文切换和非自愿上下文切换情况;3)pidstat 观察线程的上下文切换情况。    (3

Linux性能优化从入门到实战:07 CPU篇:CPU性能优化方法

纵饮孤独 提交于 2019-11-28 01:26:03
性能优化方法论   动手优化性能之前,需要明确以下三个问题:    (1)如何评估性能优化的效果? 确定性能的量化指标、测试优化前的性能指标、测试优化后的性能指标。   量化指标的选择。至少要从应用程序和系统资源这两个维度,分别选择不同的指标:1)应用程序的维度,我们可以用吞吐量和请求延迟来评估应用程序的性能。2)系统资源的维度,我们可以用 CPU 使用率来评估系统的 CPU 使用情况。   行性能测试注意点:1)避免性能测试工具干扰应用程序的性能;2)避免外部环境的变化影响性能指标的评估。    (2)多个性能问题同时存在,选择优化哪些? 二八原则,并不是所有的性能问题都值得优化,找出最重要的、可以最大程度提升性能的问题。   优先优化系统资源使用问题、性能指标变化幅度最大的问题。    (3)多种优化方法,选择哪种? 选能最大提升性能的方法,但性能优化通常会带来复杂度的提升,降低程序的可维护性,还可能引发其他指标的异常。    CPU优化方法 (1)应用程序 优化   最好方法是, 排除所有不必要的工作 ,只保留最核心的逻辑。比如减少循环的层次、减少递归、减少动态内存分配等等。    编译器优化 :gcc 就提供了优化选项 -O2。    算法优化 :使用复杂度更低的算法,可以显著加快处理速度。比如,在数据比较大的情况下,可以用 O(nlogn) 的排序算法(如快排、归并排序等

Linux性能优化从入门到实战:03 CPU篇:CPU上下文切换

ぃ、小莉子 提交于 2019-11-28 01:25:40
  linux操作系统是将CPU轮流分配给任务,分时执行的。而每次执行任务时,CPU需要知道 CPU寄存器 (CPU内置的内存)和 程序计数器PC (CPU正在执行指令和下一条指令的位置)值,这些值是CPU执行任务所依赖的环境,也就是 CPU上下文 。    CPU上下文切换 ,就是把前一个任务的CPU上下文(CPU寄存器和程序计数器)保存起来,然后加载入新任务的上下文到CPU寄存器和程序计数器中,最后跳转到程序计数器所指的位置,运行新任务。   保存下来的上下文会在系统内核中,并在任务重新调度执行时再次加载进来,让任务看起来是连续执行的。   根据任务的不同,CPU上下文切换分为进程上下文切换、线程上下文切换、中断上下文切换。       进程上下文切换   Linux把进程的运行空间分为内核空间和用户空间,并对进程按照 特权等级 划分,从内核空间Ring 0至用户空间Ring 3:Ring 0具有最高权限,可以直接访问所有资源;Ring 3只能访问受限资源,不能直接访问内存等硬件设备,需要通过 系统调用 陷入到内核中,才能访问这些特权资源。      进程运行在用户空间为进程的用户态,陷入内核空间为进程的内核态。从用户态到内核态的转变,需要通过系统调用来完成,期间涉及CPU上下文的切换:先保存原来用户态指令位置,然后更新内核态指令新位置,最后执行内核态代码;系统调用结束后

Linux性能优化从入门到实战:05 CPU篇:硬中断、软中断

╄→гoц情女王★ 提交于 2019-11-28 01:25:14
  软中断(softirq)会导致CPU 使用率升高    中断 是系统用来响应硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来响应设备的请求。中断其实是一种异步的事件处理机制,可以提高系统的并发处理能力。由于中断处理程序会打断其他进程的运行,所以,为了减少对正常进程运行调度的影响,中断处理程序就需要尽可能快地运行。并且当CPU执行在中断处理函数中时,不会响应同时发生的又一次中断。   所以为了加快中断处理程序执行和解决中断丢失的问题,Linux将中断分为上半部和下半部。    上半部 , 硬中断 ,用来 快速处理 中断,它在中断禁止模式下运行,主要处理跟硬件紧密相关的或时间敏感的工作,会打断 CPU 正在执行的任务。    下半部 , 软中断 ,用来 延迟处理 上半部未完成的工作,通常由内核触发,以内核线程的方式运行。并且每个 CPU 都对应一个软中断内核线程,名字为 “ksoftirqd/ ” 。软中断不仅包括硬件处理程序的下半部,还包括一些内核自定义的事件,比如内核调度、RCU 锁(Read-Copy Update)、网络收发、定时等。   如:网卡接收数据的过程。对上半部来说,是把网卡的数据读到内存中,然后更新一下硬件寄存器的状态,再发送一个软中断信号,下半部就从内存中找到网络数据,再按照网络协议栈,对数据进行逐层解析和处理