优化lumen加载速度

通过xdebug+QCachegrind分析lumen一个项目里的某一接口

分析每一个时间较长或者调用次数较多的函数
先看了下route这块用到的是nikic/fast-route 其中按照官方文档介绍,动态路由比静态路由慢,所以项目路由设计时我们添加的都是静态路由,而项目自带一个欢迎页面的动态路由。

优化方案,干掉动态路由,静态路由函数优化:找到
vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php
的addStaticRoute方法
其中为了验证添加的路由是否有效,每一条记录都做了循环校验,这里其实可以在开发环境中启用,线上干掉来提速。
注释代码
/*
if (isset($this->methodToRegexToRoutesMap[$httpMethod])) {

foreach ($this->methodToRegexToRoutesMap[$httpMethod] as $route) {
if ($route->matches($routeStr)) {
throw new BadRouteException(sprintf(
‘Static route “%s” is shadowed by previously defined variable route “%s” for method “%s”‘,
$routeStr, $route->regex, $httpMethod
));
}
}
}

*/

整个请求最重的就是mysql数据库操作了,其中prepare是pdo中做安全验证的必要组件,参考php手册

http://www.php.net/manual/de/pdo.prepare.php

http://stackoverflow.com/questions/1176352/pdo-prepared-inserts-multiple-rows-in-single-query
有说php5.6中array_push 比array_merge快很多

精简mac ox

忽然发现mbp的250GB硬盘只剩下20GB左右了,遂准备清理下硬盘,打开finder看一下几个常用目录右键查看简介,哪个目录的占用空间最大,先把应用程序里暗黑三给删掉了,mac下还是纯粹做开发机用的了,玩放到台机上去玩,应用程序里按文件大小排序,发现Xcode居然是个巨无霸,其他应用普遍在300MB以下,它却占了8GB,右键显示内容,进去后Contents/Developer/Platforms删掉watch、ios虚拟机的目录,反正就算开发我也会在真机上做的,删除,倾倒废纸篓,xcode尺寸直接少了5GB。应用程序最终占用了10~20GB,毕竟常用的软件还是不少。

虚拟机是我的必备装备,把多余的linux和windows虚拟机删掉,80GB 腾出来了….

homebrew缓存路径

由于在终端下载速度太慢,遂考虑先通过地址下载文件后手动放到 缓存目录
$wget https://homebrew.bintray.com/bottles/mysql-5.6.26.yosemite.bottle.tar.gz
$cd /Library/Caches/Homebrew/
$mv ~/mysql-5.6.26.yosemite.bottle.tar.gz ./
$brew install mysql

done!

==> Downloading https://homebrew.bintray.com/bottles/mysql-5.6.26.yosemite.bottle.tar.gz
Already downloaded: /Library/Caches/Homebrew/mysql-5.6.26.yosemite.bottle.tar.gz
==> Pouring mysql-5.6.26.yosemite.bottle.tar.gz
==> /usr/local/Cellar/mysql/5.6.26/bin/mysql_install_db –verbose –user=zouyi –basedir=/usr/local/Cellar/mysql/5.6.26 –
==> Caveats
A “/etc/my.cnf” from another install may interfere with a Homebrew-built
server starting up correctly.

To connect:
mysql -uroot

To have launchd start mysql at login:
ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
Then to load mysql now:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
Or, if you don’t want/need launchctl, you can just run:
mysql.server start
==> Summary
🍺 /usr/local/Cellar/mysql/5.6.26: 9854 files, 339M

Mac下MySql卸载方法

Mac下MySql卸载方法

mac下mysql的DMG格式安装内有安装文件,却没有卸载文件……很郁闷的事。
网上搜了一下,发现给的方法原来得手动去删。
很多文章记述要删的文件不完整,后来在stackoverflow这里发现了一个遗漏的地方,所以将完整版记述在这里,以供查阅。
先停止所有mysql有关进程。

最后这条很多文章都丢了,切记切记。

 

sudo rm /usr/local/mysql sudo rm -rf /usr/local/mysql*sudo rm -rf /Library/StartupItems/MySQLCOM sudo rm -rf /Library/PreferencePanes/My*vim /etc/hostconfig and removed the line MYSQLCOM=-YES-rm -rf ~/Library/PreferencePanes/My*sudo rm -rf /Library/Receipts/mysql*sudo rm -rf /Library/Receipts/MySQL*sudo rm -rf /var/db/receipts/com.mysql.*

Incompatible implementation of send() in Client / ClientInterface (phpunit)?

Incompatible implementation of send() in Client / ClientInterface (phpunit)?
开发环境 lumen
在phpunit执行测试时报错

PHP Fatal error: Declaration of GuzzleHttp\Client::send() must be compatible with GuzzleHttp\ClientInterface::send(GuzzleHttp\Message\RequestInterface $request) in /Users/michael/Code/contrib/guzzle/src/Client.php on line 26

https://github.com/guzzle/guzzle/issues/1214

找到报错的解决帖

发现自己的项目版本挺新的

于是在autoload加上加载文件的文件名输出

发现加载了global 文件
框架安装的时候是全局安装的
composer update却只更新了本项目
找到global的composer。json文件,把phpunit之外的项目都删掉,global update 解决问题

Console Wars – PHP CLI Libraries 命令行战争 - PHP的终端类库

http://www.sitepoint.com/console-wars-php-cli-libraries/

三大PHP终端类库

每个都zhendui不同用户类型用户喜好提供了不同的方法

  • Symfony console 测试稳定、鲁棒性好、文档丰富、能解决大部分问题 
  • Hoa console 更专业,适合做控制窗口、鼠标、指针等
  • Webmozart console 是最新的库,马上要出稳定版本了,适合那些很快变大的新项目