看了webman框架性能介绍,有点垂涎,于是着手体验一下,但有些地方与自己的架构思维不太符合,还发现了一些性能问题,在此分享如何修改和优化。
直接去修改源文件的代码这种方式不可取,因为官方升级后不好同步,也不好对比文件修改了什么地方,所以最好的方式是利用composer加载方式,重新创建一个目录,把源码文件复制到新建目录里进行修改,最后利用自己创建的autoload加载文件,具体流程如下:
在项目根目录创建override/webman目录,把要修改的文件复制到该目录下,例如修改vendor/workerman/webman-framework/src/App.php,复制后的文件路径是override/webman/App.php,然后进行修改。
在override目录创建autoload.php,用于覆盖文件的加载,autoload.php内容如下:
spl_autoload_register(function($class) {
$map = [
'Webman' => __DIR__ . '/webman',
'support' => __DIR__ . '/webman/support',
'Alipay\EasySDK' => __DIR__ . '/alipay'
];
$classFile = '';
foreach ($map as $namespace => $dir) {
if (0 === strpos($class, $namespace)) {
$ns = substr($class, strlen($namespace) + 1);
$ns = str_replace('\\', DIRECTORY_SEPARATOR, $ns);
$file = "{$dir}/{$ns}.php";
if (is_file($file)) {
$classFile = $file;
break;
}
}
}
if ($classFile) {
include $classFile;
}
}, true, true);
"autoload": {
"psr-4": {
"": "./",
"app\\": "./app",
"App\\": "./app",
"app\\View\\Components\\": "./app/view/components"
},
"files": [
"./support/helpers.php",
"./override/autoload.php"
]
},
$ composer dump-autoload
通过以上步骤,就可以丝滑地载入要覆盖的文件了。
参考
https://www.workerman.net/a/1518
https://www.workerman.net/a/1519