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 引起大幅性能下降的更多相关文章

  1. jvm的代码缓存耗尽导致性能下降

    在没遇到这个问题之前,我对JVM的解释模式与编译模式的代码性能相差有多大,是没有感觉的,只是觉得编译模式会比解释模式性能好那么一点点吧. 但是经历过这次以后,让我对JVM的即时编译产生了兴趣.先来看看 ...

  2. Redis大幅性能提升之Batch批量读写

    Redis大幅性能提升之Batch批量读写 提示:本文针对的是StackExchange.Redis 一.问题呈现 前段时间在开发的时候,遇到了redis批量读的问题,由于在StackExchange ...

  3. Oracle迁移到MySQL性能下降的注意点(转)

    背景:最近有较多的客户系统由原来由Oracle改造到MySQL后出现了性能问题CPU 100%,或是后台的CRM系统复杂SQL在业务高峰的时候出现堆积导致业务故障.在我的记忆里面淘宝最初从Oracle ...

  4. MySQL 5.7 分区表性能下降的案例分析

    转载自:https://mp.weixin.qq.com/s/K3RpSBAIWFwGCIWyfF0QPA 前言:希望通过本文,使MySQL5.7.18的使用者知晓分区表使用中存在的陷阱,避免在该版本 ...

  5. 一个MySQL 5.7 分区表性能下降的案例分析

    告知MySQL5.7.18的使用者分区表使用中存在的陷阱,避免在该版本上继续踩坑.同时通过对源码的讲解,升级MySQL5.7.18时分区表性能下降的根本原因,向MySQL源码爱好者展示分区表实现中锁的 ...

  6. (转)一个MySQL 5.7 分区表性能下降的案例分析

    一个MySQL 5.7 分区表性能下降的案例分析 原文:http://www.talkwithtrend.com/Article/216803 前言 希望通过本文,使MySQL5.7.18的使用者知晓 ...

  7. SQL Server ->> 性能调优案例之 -- 包含递归查询的视图导致整个查询语句性能下降

    有个语句最近性能下降很厉害,原本1秒就可以查询完毕的事情现在居然需要3-4分钟. 首先我的做法是先快速找出导致整个语句下降的元凶.在这个例子里面查询语句有3个JOIN字句,我通过删除某一个JOIN节点 ...

  8. 4.性能下降原因和常见的Join查询

    性能下降 SQL慢,执行时间长,等待时间长 1.查询语句写的烂 2.索引失效 单值索引失效 和 复合索引失效 3.关联查询太多join(设计缺陷或不得已的需求) 4.服务器调优及各个参数设置(缓冲.线 ...

  9. MySQL字符集不一致导致性能下降25%,你敢信?

    故事是这样的: 我在对MySQL进行性能测试时,发现CPU使用率接近100%,其中80%us, 16%sys,3%wa,iostat发现磁盘iops2000以下,avgqu-sz不超过3,%util最 ...

随机推荐

  1. PLSQL转义字符

    http://blog.csdn.net/cunxiyuan108/article/details/5800800

  2. 配置ActiveX控件在网页中下载安装

    先检查客户端浏览器是否安装了ActiveX控件,如果没有安装ActiveX,就需要先给浏览器提示下载并允许安装.否则就直接使用该ActiveX控件.我们可以使用CodeBase来满足我们的要求:下面是 ...

  3. No.2__C#

    几经波折——多事之秋的第二周 这周的事情还有点多, 应该已经是上周了确切的说.总的来说,上周的数据结构的学习进行的很顺利.最让自己惊喜的是,居然很快就派上了用场,这也坚定了我学习的信念,极大地鼓舞了我 ...

  4. Django model中常见Field types , Field options

    AutoField :自增,数据库 BooleanField:布尔型 CharField:字符型 DateField:日期,datetime.date类的实例.有两个常用的option,auto_no ...

  5. 潜入ICU的四逆汤

    制附子50克(先煎2小时).干姜15克.炙甘草10克.桂枝10克.上好肉桂10克(后下).煎取药液300毫升,分三次鼻饲.这是昨天我给A先生病危的父亲开的处方:四逆汤加肉桂.桂枝. 昨天上午的门诊到2 ...

  6. 2016-06-06:X264码率控制

    H.264与x264 H264是一个视频压缩编码标准.https://zh.wikipedia.org/wiki/H.264/MPEG-4_AVC X264实现H264视频压缩标准的开源项目.http ...

  7. phpexcel导入excel表格

    html代码 <form action="{:U('Mall/updExcel')}" method="POST" enctype="multi ...

  8. Egret中的对象池ObjectPool

    为了可以让对象复用,防止大量重复创建对象,导致资源浪费,使用对象池来管理. 对象池具体含义作用,自行百度. 一 对象池A 二 对象池B 三 字符串key和对象key的效率 一 对象池A /** * 对 ...

  9. [翻译]Shape comparison language[转]

        link: http://www.cnblogs.com/yhlx125/p/3635623.html   Shape comparison language 首先说说我遇到的一个问题: IR ...

  10. Modbus协议

    总体上来说,发送命令格式如下:模块号(1字节)功能码 起始地址(2字节)   数据(X字节) CRC(2位) 模块号(1字节)功能码(要读取的寄存器,读 01,设置05,Coil Status/Inp ...