阅读更多

1顶
0踩

Web前端
随着网络的高速发展,网络性能的持续提高成为能否在芸芸App中脱颖而出的关键。高度联结的世界意味着用户对网络体验提出了更严苛的要求。假如你的网站不能做到快速响应,又或你的App存在延迟,用户很快就会移情你的竞争对手。以下为大家总结10条有关性能提升的经验,以供参考:



1.采用反向代理服务器(Reverse Proxy Server)来对应用进行加速和保护

其作用主要在以下三方面:
  • 负载平衡 – 运行在反向代理服务器上的负载平衡器会在不同的不服务器  间进行传输平衡。透过它,你可以进行无差别的服务器增添。
  • 存静态文件 – 对于直接的文件请求,例如图片文件或代码文件,可以直接存储在反向代理服务器然后直接发送给用户,从而可以进行快速访问并为应用服务器进行减负使得程序性能得到提升。
  • 安全保护 – 反向代理服务器可以进行高安全度配置和对威胁进行识别和监测。

2.增添一个负载平衡器

为网站增添一个负载平衡器是一个相对简单的变更,但是它可以带来不错的性能和安全性提升。负载平衡器的作用在于在不同服务器间进行传输分发。

负载平衡器的实施前提是有一个反向代理服务器,它在接收到Internet通信后把相关请求发送到其它服务器。平衡器的妙处在于它支持两个或以上的应用服务器,使用选择算法来分割服务器间的请求。

3.缓存静态和动态内容

缓存技术的使用可使内容更快地展示给用户,其处理策略有:在需求发出时更快地处理内容,把内容存放在更快的设备上,或是使内容离用户更近。

4.数据压缩

压缩技术是一个巨大的潜在性能加速器。其主要作用体现在对图片,视频或音频等文件,能够进行高效的压缩处理。

5.优化SSL/TLS访问

尽管SSL/TLS变得越来越流行,但是它对于性能的影响也应得到重视。其对性能的影响主要体现在两个方面:
  • 每当新的连接开启,初始化握手都是无法避免的,即浏览器每次都需要使用HTTP/1.X建立服务器连接。
  • 存放于服务器上的加密数据会越来越大,加密后用户读取时也需要进行解码。

那么该如何进行处理呢?
  • 会话缓存—使用ssl_session_cache来直接缓存建立新SSL/TLS连接的参数
  • 会话ID化—把指定SSL/TLS的标识/ID存放起来,但要建立新连接时,就可以直接取用,从而免去重新建立通信的繁琐。
  • OCSP stapling优化—通过抓取SSL/TLS认证信息来减免建立通信的时间。

6.部署HTTP/2或SPDY

对于已经启用SSL/TLS的网站,一旦结合HTTP/2和SPDY将能实现性能上的强强联合;因为其结果是会让单一连接的建立仅需一次通信握手。SPDY和HTTP/2的主要特性是它们使用的是单一连接而不是多方连接。

7.定期更新软件版本

8.优化Linux性能

例如对Linux进行以下配置或处理:
  • Backlog队列

如果你有一些将要停用的连接,可以考虑增加net.core.somaxconn。
  • 文件描述符

NGINX允许每个连接最多使用两个文件描述符。如果你的系统服务的是多个连接,你可能需要考虑增大sys.fs.file_max的值。
  • 瞬时端口

当作为一个代理使用时,NGINX会为每个upstream服务器创建临时的瞬时(ephemeral)端口。因此可以尝试加大net.ipv4.ip_local_port_range的值来增加可用端口数。

9.优化Web服务器性能
  • 访问日志优化

在NGINX中,在access_log中加入buffer=size参数来实现日志的缓存写入;加入flush=time则可实现在某个时间间隔后进行缓存内容写入。
  • 缓存

启用缓存可使连接响应更快。
  • 客户端活动连接

活动连接可减少重连的次数,特别是启用SSL/TLS的情况下。
  • Upstream活动连接

Upstream连接指的是连接到程序服务器,数据库服务器等的连接。
  • 限制资源的访问

采取合适的策略来限制资源访问可以提高性能和安全性。
  • 进行worker处理

Worker处理模式就是请求驱动处理模式。NGINX使用了一个基于事件的模型和OS依赖机制来有效地对请求进行分发。
  • 进行socket分表

Socket分表可以为每个worker处理创建一个socket监听器,当核心委派连接分到给监听器时,可以马上知道哪个处理是即将执行的,从而使处理流程变得简洁。
  • 线程池处理

任何计算机线程都有可能由于单个缓慢的操作而挂起。对于web服务器软件来说,磁盘访问是一个性能瓶颈,例如进行数据复制等操作。当使用线程池来处理时,可以把一些响应慢的操作单独地放入某个任务组里面,从而不会对其它操作造成影响。

10.进行实时监控以快速解决问题和瓶颈

实施实时监控,可以全面掌握系统的运行情况,发现问题解决问题,甚至是找出造成性能瓶颈或运行缓慢的原因。

例如可对如下的问题进行监控:
  • 服务器宕机
  • 连接访问丢失
  • 服务器缓存丢失严重
  • 服务器发送了错误的数据

原文来自:Nginx
  • 大小: 100 KB
1
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • ext布局问题之tab panel内的gridpanel内容数据变多,出现滚动条

    1)解决之道: 1.修改tabPanel var tabs= new Ext.TabPanel({ border: false, region:'center', id:'center', activeTab:0, items: [{ 2.将tabPanel的...

  • Ext布局

    ExtJS常用的布局都在Ext.layout下,这里几乎涵盖了所有的布局方式(但是值得注意的是通常我们不是直接通过new来创建这些类的对象然后往里面添加控件使用,而是作为控件一个配置属性使用让Ext自动创建对应的类),...

  • extjs中的flex_ExtJS中layout的12种布局风格

    extjs的容器组件都可以设置它的显示风格,它的有效值有 absolute, accordion, anchor, border, card, column, fit, form and table. 一共9种。另外几种见: ...

  • Extjs初学入门,详细panel、form、grid等介绍

    layout 1.面板  (1)类结构  Ext.Base  Ext.AbstractComponent  Ext.Component  Ext.Container.AbstractContainer  Ext.container.Container  

  • Ext JS 容器Containers

    Ext JS 容器(Containers)

  • EXT 使用百度地图

    1,效果如图 2,index.html 中引入 3,view /** * Created by Sukla on 2017/12/19. */ Ext.define('app.view.common.baiduMap.BaiduMapView', { extend: 'Ext.panel.Panel', alias: 'widget.baidu-map...

  • extjs给panel添加滚动条,如何在ExtJs中向面板添加水平滚动条?

    I have created a panel using ExtJs.This panel is center item of a border layout viewport. I want to add a horizontal scrollbar into this panel.The coding for this panel is given below.var centerpanel....

  • ext renderer ajax,Ext JS的summaryRenderer功能没有要求

    This is my viewExt.define('view.OrdersGrid', {extend: 'Ext.grid.Panel',alias: 'widget.ordersgrid',store: 'TicketOrders',features:[{ftype: 'groupingsummary',groupHeaderTpl: ['{[values.rows[0].data.Even...

  • ExtJS 4.2心得和总结:布局系统详解(Ext.layout.container)

    在ExtJS 4.2中,提供了十几种布局,我们可以在api中看到如下图: 我们可以看到很多,比如Accordion、Border、Column、Fit、Form等。下面我们来看一下具体的用法。 下面是将要用到的html代码: 简单创建Container...

  • Ext.Net 1.x_Ext.Net.CompositeField 综合布局

    <ext:FormPanel runat="server" Height="400" Title="Form Panel" Padding="5" MonitorResize="true"> <ext:CompositeField runat="server" FieldLabel="Text fields" AnchorHorizontal="100%"> <ext:...

  • Ext 布局(layout)

    1、card 1 var navigate = function (panel, direction) { 2 var layout = panel.getLayout(); 3 layout[direction](); 4 Ext.getCmp('mov

  • Ext.NET-布局

    前一篇介绍了Ext.NET基础知识,并对Ext.NET布局进行了简要的说明,本文中我们用一个完整的示例代码来看看Ext.NET的布局。 示例代码下载地址>>>>> 本文目的 本文使用Tree、Grid应该是我们最为常用的控件,实现...

  • Ext.js高级组件

    表格面板类Ext.grid.Panel xtype(别名):gridpanel、grid title标题、renderTo渲染至、width宽、height高 frame : Boolean 是否填充渲染gridpanel forceFit : true 列是否自动填充 store : store 数据....

  • ext经典布局,图片

     1、card  1 var navigate = function (panel, direction) { 2 var layout = panel.getLayout(); 3 layout[direction](); 4 Ext.getCmp('move-pre...

  • Ext4.1.1使用rowexpander

    这个RowExpander到底在什么地方,找了半天,在extjs-4.1.1\examples\ux下,然后拷出来到程序目录下,在主页面中引入。 然后在主grid页面引用Ext.require([ 'Ext.grid.*', // not needed with ext-all, -debug '...

  • Ext JS表单Ext.form.FormPanel

    FormPanel继承自Panel,在Panel的基础上提供与表单相关的各种特性,比如可以指定表单提交的url、指定表单提交方式、是否是二进制提交等;另外FormPanel固定使用form布局,前面关于布局一节中...

  • EXT 篇,ext简单布局,ext form提交

    1.ext form 提交: Ext.onReady(function() ... Ext.create('Ext.form.Panel', { title : 'Simple Form', id:'formPanel_1', bodyPadding : 5, width : 350, // The form will submit an AJAX reque

  • Ext.js4.2.1 Ext.container.Container

    一:简介 任何包含其它组件的组件的基类,容器最基本的操作包括对其内部组件进行添加,插入和删除。 最常用的容器类包含Ext.panel.Panel,Ext.window.Window,和Ext.tab.Panel. ...

  • node-v5.2.0-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

  • node-v4.4.0-linux-armv6l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics