性能优化

大型网站性能优化的通用方法

拈花ヽ惹草 提交于 2020-03-09 06:17:18
1、HTML静态化 其实大家都知道,效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。但是对于大量内容并且频繁更新的网站,我们无法全部手动去挨个实现,于是出现了我们常见的信息发布系统CMS,像我们常访问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最简单的信息录入自动生成静态页面,还能具备频道管理、权限管理、自动抓取等功能,对于一个大型网站来说,拥有一套高效、可管理的CMS是必不可少的。 除了门户和信息发布类型的网站,对于交互性要求很高的社区类型网站来说,尽可能的静态化也是提高性能的必要手段,将社区内的帖子、文章进行实时的静态化,有更新的时候再重新静态化也是大量使用的策略,像Mop的大杂烩就是使用了这样的策略,网易社区等也是如此。 同时,html静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以考虑使用html静态化来实现,比如论坛中论坛的公用设置信息,这些信息目前的主流论坛都可以进行后台管理并且存储再数据库中,这些信息其实大量被前台程序调用,但是更新频率很小,可以考虑将这部分内容进行后台更新的时候进行静态化,这样避免了大量的数据库访问请求。 2、图片服务器分离 大家知道,对于Web服务器来说

django基础性能优化

自作多情 提交于 2020-03-08 12:23:12
django性能优化 方式1:压缩django响应体 通过压缩响应json数据,从而加快响应速度,并且 django-compression-middleware 支持多种浏览器(除了IE11)。 下载 django-compression-middleware 在settings配置: MIDDLEWARE = [ ... "django.middleware.common.CommonMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "compression_middleware.middleware.CompressionMiddleware", ... ] 使用 django-compression-middleware 之前: 使用 django-compression-middleware 之后: 可以看到,压缩后后响应体,Content-length相比原来缩小了六分之一。需要知道的是Django文档GZipMiddleware章节所说,压缩可能会导致网站出现安全漏洞。 方式2:通过分页来 通过 PageNumberPagination 解决,详见 restFramework之------分页 。 方式3:select_related 一对多关系,一对一关系 前置条件

《面试必问之jvm与性能优化》(二)

烂漫一生 提交于 2020-03-07 17:16:12
1. 说说各个区域的作用? 1、运行时数据区域 运行时数据区域包括方法区、虚拟机栈、本地方法栈、堆、程序计数器。其中方法区和堆是所有线程共享的数据区,其他的是线程隔离的数据区。 1.1、程序计数器 程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器,确定下一条需要执行的字节码指令。java的多线程是通 过线程轮流切换并分配处理器执行时间的方式来实现的,在任何确定的一个时刻,一个处理器只会执行一条线程中的指令。为了线程切换之后能恢复到正确的执行位 置,每个线程都需要有一个独立的程序计数器,各个线程之间的计数器互不影响。如果线程正在执行的是一个java方法,则计数器记录的是正在执行的虚拟机字 节码指令的地址,如果正在执行的是native方法,则计数器值为空。 1.2、java虚拟机栈 java虚拟机栈也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是java方法执行的内存模型:每个方法被执行的时候都会创建一个栈帧用 于存在局部变量表、操作栈、动态链接、方法出口等信息。通过所说的栈是局部变量表,即与对象内存分配关系最密切的内存区域。局部变量表的内存空间在编译期 间完成分配,当进入一个方法时,这个方法需要在帧中分配多大的局部变量空间是确定的,在运行期不会改变。 java虚拟机栈有两种异常:如果线程请求的栈深度大于虚拟机所允许的深度

mongodb性能优化

青春壹個敷衍的年華 提交于 2020-03-06 22:33:26
建立索引是优化数据库最直接的手段.遵循以下索引优化原则,可以建立比较高效和合理的索引. 在索引中包含条件的所有列,可以使用索引形成的屏蔽来拒绝结果集中不合适的行 对于需要排序的引用列,适当地创建索引可以避免排序 考虑到管理上的开销,应避免在索引中使用多于5个的列 对于多列索引,将查询中引用最多的列放在定义的前面 不要在索引中包含经常修改或进行插入、删除的列(主关键字和外来关键字除外) “$”符号不可以作为索引的首字母,”.”不能在索引名的任何位置出现. 索引管理 1.建立索引的函数:ensureIndex(); eg.在name上建立索引1(升序),-1(降序),默认为升序. db.person.ensureIndex( { name : 1 } ); 当系统已有大量数据时,创建索引非常耗时,需要在后头执行,只需要指定background:true即可. db.user.ensureIndex( { age : 1 } , { background : true } ); 建立索引后,同一条查询语句比较2次扫描的记录条数. > db.user.find( { name:"user5" } ).explain(); 2.获取集合中的索引信息 db.person.getIndexKeys(); db.person.getIndexes(); 3.创建唯一索引

Mongodb的性能优化问题

人走茶凉 提交于 2020-03-06 22:02:09
摘要 数据库性能对软件整体性能有着至关重要的影响,对于Mongodb数据库常用的性能优化方法主要有: 范式化与反范式化; 填充因子的使用; 索引的使用; 一. 范式化与反范式化 范式是为了消除重复数据减少冗余数据,从而让数据库内的数据更好的组织,让磁盘空间得到更有效利用的一种标准化标准,满足高等级的范式的先决条件是满足低等级范式。在数据库设计阶段,明确集合的用途是对mongodb数据库性能调优非常重要的一步。根据集合中数据最常用的操作,对于频繁更新和频繁查询的集合,我们最需要关注的重点是他们的范式化程度。 1.1 范式化 1.1.1 范式化的优点: 范式化的数据库更新起来更加快; 范式化之后,只有很少的重复数据,只需要修改更少的数据; 范式化的表更小,可以在内存中执行; 很少的冗余数据,在查询的时候需要更少的distinct或者group by语句。 1.1.2 范式化的缺点: 范式化的表,在查询的时候经常需要很多的关联,因为单独一个表内不存在冗余和重复数据。这导致,稍微复杂一些的查询语句在查询范式的schema上都可能需要较多次的关联。这会增加让查询的代价,也可能使一些索引策略无效。因为范式化将列存放在不同的表中,而这些列在一个表中本可以属于同一个索引。 1.1.3 范式化设计的例子: 以存储一篇图书及其作者为例,作者的信息包括作者的姓名,年龄,国籍。使用范式化的设计如下: {

[性能优化] perf

眉间皱痕 提交于 2020-03-06 15:04:40
运行时性能分析工具 wiki:https://en.wikipedia.org/wiki/Perf_(Linux) linux wiki:https://perf.wiki.kernel.org/index.php/Main_Page tutorial:https://perf.wiki.kernel.org/index.php/Tutorial https://github.com/torvalds/linux/tree/master/tools/perf/Documentation/ perf report --time:: Only analyze samples within given time window: <start>,<stop>. Times have the format seconds.microseconds. If start is not given (i.e., time string is ',x.y') then analysis starts at the beginning of the file. If stop time is not given (i.e, time string is 'x.y,') then analysis goes to end of file. Also support time percent with

前端框架及项目面试-聚焦Vue、React、Webpack

こ雲淡風輕ζ 提交于 2020-03-04 22:58:31
介绍课程制作的背景和课程主要内容。 1-1 课程导学 试看 第2章 课程介绍 先出几道面试真题,引导思考。带着问题来继续学习,效果更好。 2-1 先看几个面试题 试看 第3章 Vue 使用 Vue 是前端面试必考内容,首先要保证自己要会使用 Vue 。本章讲解 Vue 基本使用、组件使用、高级特性和 Vuex Vue-router ,这些部分的知识点和面试题。 3-1 vue使用-考点串讲 3-2 vue基本使用 3-3 vue基本知识点串讲-part2 3-4 vue父子组件如何通讯 3-5 如何用自定义事件进行vue组件通讯 3-6 vue父子组件生命周期调用顺序 3-7 面试会考察哪些vue高级特性 3-8 vue如何自己实现v-model 3-9 vue组件更新之后如何获取最新DOM 3-10 slot是什么 3-11 vue动态组件是什么 3-12 vue如何异步加载组件 3-13 vue如何缓存组件 3-14 vue组件如何抽离公共逻辑 3-15 vue高级特性知识点小结 3-16 vuex知识点串讲 3-17 vue-router知识点串讲 3-18 vue使用-考点总结和复习 第4章 Vue 原理 要保证自己的面试竞争力,必须掌握 Vue 原理,前端高级面试或者大厂面试中常考。本章讲解虚拟DOM,diff 算法,响应式,模板编译,组件渲染等 Vue

前端性能优化归纳总结

自作多情 提交于 2020-03-04 09:02:25
关于前端性能优化的总结,随处都可以看到这方面的文章,而优化方法,也无外乎那些“固定”方面,当然,有些方面已经过时,所以,在这里,我自己也总结一遍吧,加深理解,也希望是一种不同的总结形式。 -----------------------正文总这里开始------------------------------------ 一、什么是前端 性能 优化(what)? 从用户访问资源到资源完整的展现在用户面前的过程中,通过技术手段和优化策略,缩短每个步骤的处理时间从而提升整个资源的访问和呈现速度。 二、为什么要做前端性能优化(why)? 在构建web站点的过程中,任何一个细节都有可能影响网站的访问速度,如果不了解性能优化知识,很多不利网站访问速度的因素会形成累加,从而严重影响网站的性能,导致网站访问速度变慢,用户体验低下,最终导致用户流失。 三、前端性能优化的原则(rule) 1、不要按照准则照本宣科的做,需要根据实际情况因地制宜; 2、不出bug! 四、从浏览器发起请求到页面能正常浏览都有哪些阶段(process)? 预处理——>DNS解析——>建立连接——>发起请求——>等待响应——>接受数据——>处理元素——>布局渲染 五、性能优化的具体方法(way) 一)内容层面 1、DNS解析优化(DNS缓存、减少DNS查找、keep-alive、适当的主机域名) 2、避免重定向(/还是需要的)

性能优化

让人想犯罪 __ 提交于 2020-03-04 08:54:04
1. 使用存储过程, (如果在程序里用exec 存储过程 参数,这样执行似乎并没有快多少) 在数据库里是预编译的,也不需要在字符串传输上花费大量时间。 防sql注入攻击。 2. 尽量优化数据库语句,使逻辑尽量简单。 @ 还有就是在使用函数时 charindex >like > padindex 效率依次递减。 @查询字段是否包含在以,分隔的字段串时,最好不要用in 速度非常慢。 还有好多,可以总结的,这里就不再描述了。 3. EnableViewState(页面的视图状态)。如果无特殊要求设置为false。 使用ViewState ,每个对象都必须先序列化到 ViewState 中,然后再通过回传进行反序列化,因此使用 ViewState是有代价的。尽量减少使用对象, 如果可能,尽量减少放入 ViewState 中的对象的数目。下面情况基本上可以禁用viewstate: (1)页面控件 (.ascx) (2)页面不回传给自身。 (3)无需对控件的事件处理。 (4)控件没有动态的或数据绑定的属性值(或对于每个postpack都在代码中处理) 单个页面或每个页面都禁用 ViewState,如下所示: 单个页面:<%@ Page EnableViewState="False" %> 每个页面:在 web.config 中 <Pages EnableViewState="false" />

性能优化

岁酱吖の 提交于 2020-03-04 08:53:32
最近对原来的项目优化,总结如下:   1. 使用存储过程(如果在程序里用exec 存储过程参数,这样执行似乎并没有快多少)。     在 数据库 里是预编译的,也不需要在字符串传输上花费大量时间。 防sql注入攻击。   2. 尽量优化数据库语句,使逻辑尽量简单   a) 还有就是在使用函数时,charindex >like > padindex 效率依次递减。     b) 查询字段是否包含在以,分隔的字段串时,最好不要用in 速度非常慢。     还有好多,可以总结的,这里就不再描述了。   3. EnableViewState(页面的视图状态)。如果无特殊要求设置为false。   使用ViewState,每个对象都必须先序列化到ViewState中,然后再通过回传进行反序列化,因此使用ViewState是有代价的。尽量减少使用对象,如果可能,尽量减少放入ViewState中的对象的数目。下面情况基本上可以禁用ViewState:   (1) 页面控件 (.ascx)。 (2) 页面不回传给自身。 (3) 无需对控件的事件处理。 (4) 控件没有动态的或数据绑定的属性值(或对于每个postpack都在代码中处理)。   单个页面或每个页面都禁用 ViewState,如下所示:   单个页面:<%@ Page EnableViewState=”False” %>   每个页面