local_docker
1 | FROM ubuntu:21.04 |
1 | version: '3.5' |
1 | FROM ubuntu:21.04 |
1 | version: '3.5' |
1 | create table `id_maker` |
1 | insert into id_maker values ('default',1); |
1 | begin; |
1 | begin; |
1 | class IdMaker |
1 |
|
开发服务端接口的时候会使用postman进行调试,但是postman毕竟是一个功能比较固定的窗口软件,虽然postman也支持before after的一些操作,但是在参数复杂,或者批量调用的时候会存在操作繁琐,性能不高的情况,所以早先的时候有一些接口的调试我使用laravel-console+GuzzleHttp进行接口调试 ,postman用来辅助编写。 相比于postman这类的窗口软件,用语言直接编写接口调试的功能更加强大,并且在批量调用的时候响应上比postman快很多(postman 如果按照组进行调用,如果量大了会卡住)。后来就我就换成了go+resty。其中得益于换成了go,今天在测试环境寻找合适的测试数据,效率也比较快的完成。
浏览器收藏栏收藏了了许多看过的。一直没清理,导致越来越多,不不方便管理,所以把一些已经看完/或者以后可能会查询但是目前不看的收藏的放在这
目前xhprof有着比较新的更新,pecl显示是原来版本fork后的版本。不过一致到8都提供了支持。所以可以在开发测试环境使用来分析代码的运行状况
如果不能直接下载或许需要 sudo pecl install xhprof ,或者先进行 pecl 的更新
1 | pecl install xhprof |
之后将extension=xhprof.so
加入对应的 php.ini
(注意区分fpm和cli的ini配置是否相同)
接着可以配合已经浅封装的php代码进行分析
https://github.com/phacility/xhprof
其中如果是web项目可以进行双入口控制,在另一个入口中引入原来的入口。这样对原有代码污染。
如新的 index.php
1 | <?php |
安装graphviz 1
2apt update
apt install graphviz
1 | <?php |
1 | $parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7); |
创建一个php7的语法解析器(Parser),在没有传入词法解析器(Lexer)的时候会创建一个默认的词法分析器
同时如果没有指定只使用php7的语法解析器,那么将会同时创建一个php7和一个php5的parser
默认lexer 1
2
3
4public function create(int $kind, Lexer $lexer = null, array $parserOptions = []) : Parser {
if (null === $lexer) {
$lexer = new Lexer\Emulative();
}1
2
3
4case self::PREFER_PHP7:
return new Parser\Multiple([
new Parser\Php7($lexer, $parserOptions), new Parser\Php5($lexer, $parserOptions)
]);
解析时先使用[0]解析器,当解析存在报错时,会调用后续的解析器,直至等到一个完全没有解析错误的结果 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19public function parse(string $code, ErrorHandler $errorHandler = null) {
if (null === $errorHandler) {
$errorHandler = new ErrorHandler\Throwing;
}
list($firstStmts, $firstError) = $this->tryParse($this->parsers[0], $errorHandler, $code);
if ($firstError === null) {
return $firstStmts;
}
for ($i = 1, $c = count($this->parsers); $i < $c; ++$i) {
list($stmts, $error) = $this->tryParse($this->parsers[$i], $errorHandler, $code);
if ($error === null) {
return $stmts;
}
}
throw $firstError;
}
上述都不重要
自己传入异常,当有错的时候抛出这个写法有点意思呀
这个项目用的是get_token_all研究卒