php框架编写和应用实验总结,各开源框架使用与设计总结(三)

六、各项实践,性能评测

下面进入性能评测,评测我们相对就比较快速一些。直接用ab命令,来测试上面的所提及的一些改进。

以下评测,所有测试页面,均为:http://hjvote.app.ucai.cn/index.php 命令行为:

ab -c 20 -n 1000 http://hjvote.app.ucai.cn/index.php

6.1 、冷启动

1、冷启动,比如我新启动的php-fpm,关掉opcache,关掉xhprof

Concurrency Level: 20

Time taken for tests: 4.981 seconds

Complete requests: 1000

Failed requests: 0

Write errors: 0

Total transferred: 478000 bytes

HTML transferred: 109000 bytes

Requests per second: 200.78 [#/sec] (mean)

Time per request: 99.612 [ms] (mean)

Time per request: 4.981 [ms] (mean, across all concurrent requests)

Transfer rate: 93.72 [Kbytes/sec] received

6.2、第二次

2、第二次,条件同上。

Concurrency Level: 20

Time taken for tests: 4.537 seconds

Complete requests: 1000

Failed requests: 0

Write errors: 0

Total transferred: 478000 bytes

HTML transferred: 109000 bytes

Requests per second: 220.42 [#/sec] (mean)

Time per request: 90.736 [ms] (mean)

Time per request: 4.537 [ms] (mean, across all concurrent requests)

Transfer rate: 102.89 [Kbytes/sec] received

**6.3、打开opcache第一次**

Concurrency Level: 20

Time taken for tests: 1.591 seconds

Complete requests: 1000

Failed requests: 0

Write errors: 0

Total transferred: 478000 bytes

HTML transferred: 109000 bytes

Requests per second: 628.67 [#/sec] (mean)

Time per request: 31.813 [ms] (mean)

Time per request: 1.591 [ms] (mean, across all concurrent requests)

Transfer rate: 293.46 [Kbytes/sec] received

6.4、第二次,条件同上

Concurrency Level: 20

Time taken for tests: 1.254 seconds

Complete requests: 1000

Failed requests: 0

Write errors: 0

Total transferred: 478000 bytes

HTML transferred: 109000 bytes

Requests per second: 797.70 [#/sec] (mean)

Time per request: 25.072 [ms] (mean)

Time per request: 1.254 [ms] (mean, across all concurrent requests)

Transfer rate: 372.36 [Kbytes/sec] received

6.5、对比再打开xhprof

Concurrency Level: 20

Time taken for tests: 1.254 seconds

Complete requests: 1000

Failed requests: 0

Write errors: 0

Total transferred: 478000 bytes

HTML transferred: 109000 bytes

Requests per second: 797.44 [#/sec] (mean)

Time per request: 25.080 [ms] (mean)

Time per request: 1.254 [ms] (mean, across all concurrent requests)

Transfer rate: 372.24 [Kbytes/sec] received

6.6、打开XHprof,关掉Opcache

对于这个简单的页面,没有明显恶化,我们去掉Opcache,打开xhprof

Concurrency Level: 20

Time taken for tests: 12.103 seconds

Complete requests: 1000

Failed requests: 0

Write errors: 0

Total transferred: 595000 bytes

HTML transferred: 226000 bytes

Requests per second: 82.62 [#/sec] (mean)

Time per request: 242.065 [ms] (mean)

Time per request: 12.103 [ms] (mean, across all concurrent requests)

Transfer rate: 48.01 [Kbytes/sec] received

6.7、第二次、条件同上

Concurrency Level: 20

Time taken for tests: 9.298 seconds

Complete requests: 1000

Failed requests: 0

Write errors: 0

Total transferred: 595000 bytes

HTML transferred: 226000 bytes

Requests per second: 107.55 [#/sec] (mean)

Time per request: 185.952 [ms] (mean)

Time per request: 9.298 [ms] (mean, across all concurrent requests)

Transfer rate: 62.50 [Kbytes/sec] received

在没有opcache的情况下,XHProf的加入,导致用户急剧变慢。

6.8、关掉xhprof HHVM第一次

Concurrency Level: 20

Time taken for tests: 1.142 seconds

Complete requests: 1000

Failed requests: 0

Write errors: 0

Total transferred: 521000 bytes

HTML transferred: 109000 bytes

Requests per second: 875.84 [#/sec] (mean)

Time per request: 22.835 [ms] (mean)

Time per request: 1.142 [ms] (mean, across all concurrent requests)

Transfer rate: 445.62 [Kbytes/sec] received

6.9、 第二次,条件同上

Concurrency Level: 20

Time taken for tests: 0.852 seconds

Complete requests: 1000

Failed requests: 0

Write errors: 0

Total transferred: 521000 bytes

HTML transferred: 109000 bytes

Requests per second: 1173.42 [#/sec] (mean)

Time per request: 17.044 [ms] (mean)

Time per request: 0.852 [ms] (mean, across all concurrent requests)

Transfer rate: 597.03 [Kbytes/sec] received

什么感觉?这种数字的差距是不是可以用震撼来形容?通过评测对比,我们对于opcache、hhvm和一般php-fpm性能心里也就有数了。同时也发现,在页面上开启XHProf,会导致网页性能急剧下降,所以不要在生产环境对多人开启XHProf。或者会带来非常不好的用户体验。

七、自有框架的设计

好的,看完了性能评测,我们来过了一下如果设计一个自有的框架需要哪些元素,或者说需要哪些内容。

1、首先对目录结构进行一个划分,确定目录层次结构

–app 命令行应用

–data 存放数据上传

–lib 库函数

–template 模板

–conf 各种配置

–doc 文档,SQL

–log 日志

–test 测试代码

–ctemplate 编译后的模板

–htdocs Web主目录

大家能看到,htdocs 同其他目录,比如 doc、app目录为什么要并列?这是安全性的考虑,想一想,否则的话,你的表定义被人下走了。你的后台程序,可能会被用户执行。

2、其次来看一下类的层次结构。

下图是应用程序各个类的分层。

bVcptW

最基层的应用程序类,其实就是一个骨架。包括了getParam(取得参数,无论命令行,还是Web访问,都需要有参数分析)。checkParam(参数检测)、checkAuth(权限检测,比如是否是需要登录的一个页面)、outputPage等这些方法,全是空方话,但是由一个run方法串起来。如下:

public function run()

{

$this->getPara();

$this->checkPara();

$this->checkAuth();

$this->main();

$this->outputPage();

$this->exitApp();

}

应用程序基类DCore_BaseApp.php的子类又分为三个,一个负责命令行程序的处理DCore_ConsoleApp.php,另外一个负责像移动应用、开放平台Api之类的数据处理DCore_ApiApp.php ,而第三个,则是DCore_WebApp.php, 我们所在浏览器上所访问的应用,由这个应用程序类派生出来页面类。而DCore_AdminApp.php,是管理后台应用程序类的基类。因为后端一般有不一样的权限认证机制。这样也是为了把前后台的应用程序类区分得更加清楚。

这样可以看到,整体结构非常清晰。

好,那最后我们再来看一下,需要编写哪些类库。

在我们的框架中,编写了这些。

•1、常用工具函数库

实现字符串的常用操作封装,比如中文取字串,繁简转换、编码转换

•2、模板引擎

可以简化为包含PHP,在我们自己开发的这个框架中,支持了模板编译,其实模板编译很简单,就是将一些特定的语法,换成PHP代码,然后还是包含PHP

•3、路由控制,静态化

用户可以将路径改成搜索引擎更友好的路径,程序也能解析正确。

•4、后端数据请求控制

用于对后端一些公用操作的封装,比如数据库,比如Memcached,这样的封装带来的好处是,如果一旦发生升级或者替换的时候,修改的代码相对最少。比如你不用到处去改mysql_query,只需要修改当前这个库文件即可以了。

八、总结

好的,今天的课程就到这里。总结一下,我们讲了如下几点:

1、5月课程尤其是5月份框架课程的总结。总结了框架与架构的区别。

2、站在PHP框架之外,看框架,看框架的共同特征与功用。

3、以PHP框架为例,讲框架所不能解决或者带来的问题。

4、由于框架所带来的问题,以性能、可扩展问题,相对严重,所以分析PHP性能 的改造方向,总结了六大点。

5、分别演示了这六大点的改进实践。包括Yaf、Phalcon框架介绍,zephir的使用,以及HHVM。

6、汇总六大点的改进,并做了相关的性能评测。能看到,使用不同的技术差别巨大,所以我们要在稳定可靠的情况下,尽可能采用最好的技术。

7、最后讲解了开发一个自有框架,一般都是一个什么样的思路。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值