[PHP]Yaf + composer 引起大幅性能下降
composer.json 文件可以用命令 composer init 创建,命令是交互式的。
也可以直接编辑一个 json 文件,如下:
repositories 中 url 使用中国全量镜像地址.
要引入依赖包,可以直接加进去,也可以用命令行,composer require "predis/predis:v1.1.1"
加入 require-dev 就加上 --dev 选项.
{
"name": "farwish/yafapp",
"type": "app",
"description": "application",
"license": "MIT",
"authors": [
{
"name": "farwish",
"email": "farwish(a)foxmail.com"
}
],
"require": {
"php": ">=5.4.0",
"predis/predis": "v1.1.1"
},
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
}
}
composer -v 查看所有选项和命令
使用自动加载,只需在框架启动文件中加入 require "vendor/autoload.php"; 在 Yaf 中可以这样做:
class Bootstrap extends Yaf_Bootstrap_Abstract{
/**
* 注册composer
*/
public function _initAutoload()
{
require __DIR__ . "/../vendor/autoload.php";
}
...
}
然后就可以直接使用类库了,非常方便。
// 使用Predis库
$client = new Predis\Client();
$client->set('foo', 'bar');
echo $client->get('foo');
不过使用 composer 自动加载和大类库会产生比较大的性能消耗;下面只使用内置api进行操作。
// 使用扩展内置类
$client = new Redis();
$client->set('foo', 'bar');
echo $client->get('foo');
用ab进行简单压测:ab -c 100 -n 1000 http://localhost/yafapp/index.php/index/index
使用 redis 扩展内置api,qps 稳定 >1200.
使用 composer 自动加载依赖类库,qps 会降至 800.
使用 Predis 类库操作 redis,qps 则只有 250~300.
composer 自动加载优化,可以把需要自动加载的类库放在 vender/composer/autoload_classmap.php 中,
laravel 的 php artisan optimize 也相当于下面这条命令,映射文件以 "命名空间"=>"绝对地址" 的大数组返回,
从测试结果来看,这个提升比例在个位数。
$ composer dump-autoload --optimize
<?php // autoload_classmap.php @generated by Composer $vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir); return array(
'Predis\\Autoloader' => $vendorDir . '/predis/predis/src/Autoloader.php',
'Predis\\Client' => $vendorDir . '/predis/predis/src/Client.php',
...
);
下面的命令用来清除自动加载类库的键值映射。
$ composer dump-autoload
<?php // autoload_classmap.php @generated by Composer $vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir); return array(
);
结论:composer 带来了项目管理容易度,但性能不乐观,适用功能型系统,可以有大量类库使用;
如果开发当今互联网应用,可以说直接废。
Link: http://www.cnblogs.com/farwish/p/5628192.html
[PHP]Yaf + composer 引起大幅性能下降的更多相关文章
- jvm的代码缓存耗尽导致性能下降
在没遇到这个问题之前,我对JVM的解释模式与编译模式的代码性能相差有多大,是没有感觉的,只是觉得编译模式会比解释模式性能好那么一点点吧. 但是经历过这次以后,让我对JVM的即时编译产生了兴趣.先来看看 ...
- Redis大幅性能提升之Batch批量读写
Redis大幅性能提升之Batch批量读写 提示:本文针对的是StackExchange.Redis 一.问题呈现 前段时间在开发的时候,遇到了redis批量读的问题,由于在StackExchange ...
- Oracle迁移到MySQL性能下降的注意点(转)
背景:最近有较多的客户系统由原来由Oracle改造到MySQL后出现了性能问题CPU 100%,或是后台的CRM系统复杂SQL在业务高峰的时候出现堆积导致业务故障.在我的记忆里面淘宝最初从Oracle ...
- MySQL 5.7 分区表性能下降的案例分析
转载自:https://mp.weixin.qq.com/s/K3RpSBAIWFwGCIWyfF0QPA 前言:希望通过本文,使MySQL5.7.18的使用者知晓分区表使用中存在的陷阱,避免在该版本 ...
- 一个MySQL 5.7 分区表性能下降的案例分析
告知MySQL5.7.18的使用者分区表使用中存在的陷阱,避免在该版本上继续踩坑.同时通过对源码的讲解,升级MySQL5.7.18时分区表性能下降的根本原因,向MySQL源码爱好者展示分区表实现中锁的 ...
- (转)一个MySQL 5.7 分区表性能下降的案例分析
一个MySQL 5.7 分区表性能下降的案例分析 原文:http://www.talkwithtrend.com/Article/216803 前言 希望通过本文,使MySQL5.7.18的使用者知晓 ...
- SQL Server ->> 性能调优案例之 -- 包含递归查询的视图导致整个查询语句性能下降
有个语句最近性能下降很厉害,原本1秒就可以查询完毕的事情现在居然需要3-4分钟. 首先我的做法是先快速找出导致整个语句下降的元凶.在这个例子里面查询语句有3个JOIN字句,我通过删除某一个JOIN节点 ...
- 4.性能下降原因和常见的Join查询
性能下降 SQL慢,执行时间长,等待时间长 1.查询语句写的烂 2.索引失效 单值索引失效 和 复合索引失效 3.关联查询太多join(设计缺陷或不得已的需求) 4.服务器调优及各个参数设置(缓冲.线 ...
- MySQL字符集不一致导致性能下降25%,你敢信?
故事是这样的: 我在对MySQL进行性能测试时,发现CPU使用率接近100%,其中80%us, 16%sys,3%wa,iostat发现磁盘iops2000以下,avgqu-sz不超过3,%util最 ...
随机推荐
- RMAN_学习笔记5_RMAN Catalog Script恢复目录脚本
2014-12-24 Created By BaoXinjian
- load、init和initialize的区别
在NSObject.h中找到三个方法 + (void)load; + (void)initialize; - (instancetype)init 1. 可知三个方法类型,两个类方法,一个对象方法 2 ...
- ruby中proc和lambda的return区别
学习ruby有一段时间了,但是我看了好几遍proc和lambda的return区别的区别讲解,始终没明白到底什么区别,今天上午又看,终于感觉是茅塞顿开有点领悟了 一下内容部分来自<<rub ...
- mvc view-controller mvc annotation-driven
1.mvc view-controller 使页面直接通过某个连接跳转,不进过mvc handler 需要加一个配置 <mvc : view-controller path="/suc ...
- 甲状腺癌怎样早发现 可B超检查
2013-12-13 14:40:00.0 本文来源:人民网 点击参与跟帖 原标题:健康之道:甲状腺癌怎样早发现 摘要:甲状腺癌怎样早发现呢?隐早期以甲状腺结节的方式存在,且以匿方式生长,可能在人们偶 ...
- ubuntu下基于sqlite3后台的php环境的搭建
最近准备把公司的服务器换成linux 数据库sqlite3 搭建过程记录如下: 1 sqlite3安装.. apt-get install sqlite 2.PHP服务器搭建. apt-get ins ...
- javascript解析引擎(每天有学习一点篇)
======================================================= 有一段时间,经常耳闻web前端的福音,对高性能的V8议论纷纷. 其实对js解析引擎没有深 ...
- Linux:ssh连接服务器很慢
ssh连接服务器,如果很慢,可以进行如下处理: vi /etc/ssh/sshd_config#UseDNS yes改成:UseDNS no/etc/init.d/sshd restart ----- ...
- js 小工具-- 原生 js 去除空格
// 原生js 去除字符串空格 <script type="text/javascript"> String.prototype.trim = function (){ ...
- Apache(ApacheHaus)安装配置教程
1,Apache下载 选择一个版本,点击Download 点击File For Microsoft Windows 由于Apache HTTP Server官方不提供二进制(可执行)的发行版,所以我们 ...