Phalcon之 提高性能:下一步该做什么?(Increasing Performance: What’s next?)

要开发出高性能的应用程序需要考虑多方面的因素: 服务器, 客户端, 网络, 数据库, web服务器,静态资源等。 本章中我集中分析如何提升系统的性能及如何检测应用的瓶颈。

关于服务端(Profile on the Server)?

每种应用都有不同, 持久的性能分析对找出系统瓶颈是非常必要的。 性能分析可以让我们更直观的看出何处为性能瓶颈,何处不是。 性能分析在一个请求中和另一请求中可能表现不一,所以要做出足够的分析及权衡方可给出结论。

关于 XDebug(Profiling with XDebug)?

Xdebug 提供了简易的性能分析的方法, 安装后可在php.ini中 进行如下配置:

xdebug.profiler_enable = On

使用 Webgrid_ 可以分析出哪些函数或方法比其它的要慢:

关于 Xhprof(Profiling with Xhprof)?

Xhprof 也是一个非常有意思的扩展。 开发者可以添加如下的代码到启动文件中:

<?php

xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);

然后在启动文件的结尾保存性能分析数据:

<?php

$xhprof_data = xhprof_disable(‘/tmp‘);

$XHPROF_ROOT = "/var/www/xhprof/";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";

$xhprof_runs = new XHProfRuns_Default();
$run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_testing");

echo "http://localhost/xhprof/xhprof_html/index.php?run={$run_id}&source=xhprof_testing\n";

Xhprof 提供了一个内置的html视图用来对性能分析的数据进行展示:

关于 SQL 语句(Profiling SQL Statements)?

几乎所有的数据库系统都提供了相关的工具以找出哪些执行缓慢的sql语句。 检测及修复那些执行缓慢的查询对提高服务器端系统的性能来说是非常重要的。 在Mysql数据库中, 开发者可以启用慢查询日志来记录执行缓慢的查询:

log-slow-queries = /var/log/slow-queries.log
long_query_time = 1.5

关于客户端(Profile on the Client)?

有时开发者需要提升静态资源加载的速度, 比如图片, javascript, css等。 下面的工具可以让开发者从客户端检测静态资源加载的瓶颈:

(使用Chrome/Firefox进行性能分析)Profile with Chrome/Firefox?

几乎所有的现代浏览器都有相应的工具来检测页面加载时间。 Chrome中开发者可使用web探察器来获取一个页面的所有资源加载所需的时间:

Firebug 提供了类似的功能:

Yahoo! YSlow?

开发者可以使用 YSlow 对网页进行分析, YSlow会给出基于 rules
for high performance web pages
 (高性能网页规则)的建议:

使用Speed Trace进行性能分析(Profile with Speed Tracer)?

Speed Tracer 这个工具可以帮助开发者找出web应用性能方面的问题。 这个工个从浏览器的底层分析出web应用的性能。
Speed Tracer 这个插件可以安装在Windows或Linux版本的Chrome上。

这是一个非常有用的工具,它可以为我们显示出html页面渲染的时间, Javascript及css执行(渲染)的时间等。

使用最新的 PHP 版本(Use a recent PHP version)?

PHP本身的执行速度已经越来越快了, 使用最新版本的php及phalcon可以更高的提升web应用的执行速度。

使用 PHP 字节码缓存(Use a PHP Bytecode Cache)?

APC 像其它的字节码缓存工具一样可以帮助web应用程序减少读取及解析php文件解析所花的时间。 安装完apc之后在php.ini中添加如何配置:

apc.enabled = On

PHP5.5中包含了一个内置的字节码缓存器,即 ZendOptimizer+, 这个扩展在5.3及5.4版本的php中也存在,只不过不是内置的而是用扩展的形式存在的。

将可能发生阻塞的操作放到后台运行(Do blocking work in the background)?

处理视频, 发送e-mail, 压缩文件和图片等是非常耗时的, 这些最好放在后台执行。 开发者可以使用队列及消息系统来处理这些操作以提高web应用的性能,可使用如下组件:

Google Page Speed?

mod_pagespeed 可以加速网站的运行速度及减少网站的加载时间。 这个开源的apache web服务器模块(nginx下为ngx_pagespeed)会自动对网页,静态资源(CSS,
JavaScript, images)等进行性能相关的优化,而无需开发者修改已存在的代码,内容,及工作流等。

注: 更多的性能相关的配置或建议可以查看具体的web服务器, 如apache中提供了mod_cache, mod_disk_cache等.

时间: 2024-10-28 00:42:05

Phalcon之 提高性能:下一步该做什么?(Increasing Performance: What’s next?)的相关文章

EF提高性能

实体框架 5 性能注意事项 作者:David Obando.Eric Dettinger 等 发布时间:2012 年 4 月 1.简介 对象关系映射框架是一种在面向对象的应用程序中提供数据访问抽象的便捷方式.对于 .NET 应用程序,Microsoft 推荐的 O/RM 是实体框架.但任何抽象都要考虑性能. 本白皮书旨在介绍在使用实体框架开发应用程序时的性能注意事项,使开发人员了解能够影响性能的实体框架内部算法,以及提供有关进行调查及在使用实体框架的应用程序中提高性能的提示.网络上有大量很好的有

SQL中使用WITH AS提高性能,使用公用表表达式(CTE)简化嵌套SQL

一.WITH AS的含义     WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候,是为了让SQL语句的可读性更高些,也有可能是在UNION ALL的不同部分,作为提供数据的部分. 特别对于UNION ALL比较有用.因为UNION ALL的每个部分可能相同,但是如果每个部分都去执行一遍的话,则成本太高,所以可以使用WITH AS短语,则只要执行一遍即可.如果WITH AS短语所定

Java编程提高性能时需注意的地方

最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源和总结一些在java编程中尽可能做到的一些地方 1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面 第一,控制资源的使用,通过线程同步来控制资源的并发访问 第二,控制实例的产生,以达到节约资源的目的 第三,控制

使用C# yield关键字来提高性能和可读性

对于”yield”这个关键字我已经见过N次了,直到最近我才知道这个关键字所蕴含的力量.我将在下面展示出一些使用”yield”让你的代码有更高可读性和更好性能的例子. 为了让你对yield有一些快速概览,我首先要展示一个没有使用这个关键字的例子,下面的代码很简单,但在我最近的项目中却很常见 IList<string> FindBobs(IEnumerable<string> names) { var bobs = new List<string>(); foreach(v

缓存jQuery对象来提高性能

jQuery使元素的选择变得异常简单,这也是它快速流行起来的一大原因,如果你看刚刚开始使用jQuery朋友写的代码时,会发现很多数人写的代码都在滥用jQuery选择器.   如果你发现同一元素被查找多次时,你就应该将该jQuery对象缓存起来,不然每次查找都要遍历整个文档.这个话题可能显得有点老生常谈,因为这几天写的东西都和调试jQuery代码有关系,所以将这个问题再次说明一下.关于在控制台中打印程序执行时间大家可以参考下使用 console.time() 计算jQuery代码执行时间,我们使用

使用多结果集读取数据减少服务器往返,提高性能

先来谈一下什么是多结果集?以及为什么需要它? 假设我们的一个窗体上有多个控件,需要绑定多个数据源.那么传统情况下,我们可以用不同的命令去读取不同的数据,然后分别绑定.这样做本来无可厚非,但如果从性能上考虑的话,就有改进的必要了. 因为每个单独的命令执行都是需要发生一次服务器的往返的,所以如果能够把数据一次性读取到,统一发给用户程序,再在客户端做单独的绑定,这样的设计可以减少服务器往返次数,提高性能. 以下是一些代码和比较 使用DataReader执行单结果集查询:每次返回一个结果集.(这是传统的

CSS性能分析,如何优化CSS提高性能

css匹配原理 在优化css之前我们需要了解下css是怎么进行工作的,我们都知道css是由选择器,属性和属性值构成的. 我们可能会这样写上一行代码 //css .con .loulan1 p span{ display: block; } //html<div class="con">     <div class="loulan">         <p><span>文字</span></p>

Java 编程:如何提高性能?(简单总结篇)

开发者在编程中除了要有编程规范,还要注意性能,在 Java 编程中有什么提高性能的好办法呢? 本文转自国内 ITOM 行业领军企业 OneAPM Cloud Insight(一款能够优雅监控多种操作系统.数据库.中间件.云主机的解决方案)美女工程师陈永梅简书. 开发者在编程中除了要有编程规范,还要注意性能哦,今天就工作中遇到的一些问题进行了一个简单总结,希望攻城狮来批评指正. 作为一个QA,从质量管理方面得到的认识: 一行代码能解决的问题 尽量不要使用多行,代码行数越多 维护成本越高,出现缺陷的

初用C/C++扩展Python,提高性能

前段时间写了两篇文章介绍如何提高Python的运行效率,一篇是从python语言本身的角度去介绍的,另一篇是从解释器角度(利用PyPy),有兴趣的可以找着看看.从另外一个角度来介绍如何提高python运行效率,那就是利用c/c++来扩展python提高性能.我们知道python官方网站上下载的python解释器源码是用c语言编写的,所以,也可以利用c/c++来扩展它,以获得较优的执行性能.Python提供了API接口,是我们很方便的能进行扩展,所有这些API都包含在Python.h的头文件里,在