[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最 ...
随机推荐
- Nuget 管理entity framework
安装,带版本号 PM> Install-Package EntityFramework -Version 5.0.0 更新数据库 PM> Enable-Migrations -Contex ...
- 一些实用的linux命令
一直在用linux,可linux下的命令还是用得不是很熟悉,记录一下比较有用命令: ``和$()是一样的,都是用指令的执行结果来替换. linux下 echo hello world => ...
- windows下python3.4安装scikit-learn
python3.4.0_64位下安装numpy-1.11.1 安装步骤: 1.在终端CMD中输入: python -m pip install -U pip 2.找到 下载的 numpy-1.1 ...
- 使用属性动画简单实现view飞入效果
比较简单的效果,可以用来菜单飞入之类,作为记录吧, package com.test.animation; import android.app.Activity; import android.os ...
- Windows下配置nginx根目录的问题
location / { root E:/xampp/htdocs/html5/php/yii2-rest-master/rest/web; index index.html index.htm; } ...
- java变量命名规则
1. 变量必须以字母,下划线”_”或”$”符号开 2. 变量可以包括数字,但不能以数字开 3. 除了下划线”_”和”$”符号以外,变量名不能包含任何特殊字符 4. ...
- 慕课网-安卓工程师初养成-6-3 如何使用 Java 中的数组
来源:http://www.imooc.com/code/1525 Java 中操作数组只需要四个步骤: 1. 声明数组 语法: 或者 其中,数组名可以是任意合法的变量名,如: 2. 分配空间 简 ...
- window.parent
今天出现了一个严重的bug,页面在载入时居然导致了页面崩溃,找了近5个小时的代码,才找到了原因(擦,我只能说我水平有限,浪费了太长时间了~). 源代码: var curr = window; whil ...
- git branch 管理常用命令
查看本地分支 git branch * dev master *代表当前位于dev分支 查看远程分支 git branch --remote origin/dev origin/master 查看远程 ...
- MyEclipse+Tomcat 启动时出现A configuration error occured during startup错误的解决方法
MyEclipse+Tomcat 启动时出现A configuration error occured during startup错误的解决方法 分类: javaweb2013-06-03 14:4 ...