laravel facaed 对于性能的影响的研究
一直以为laravel的性能是很大的问题,自己也去看了部分的源代码吧。这是说下facaed对于性能的影响的。
facaed是设计模式的一种,为子系统中的一组接口提供一个一致的界面,定义了一个高层接口,这个接口使用的子系统更加容易使用。这是《设计模式》这本书说的。
laravel对于facaed的设计是这样的,定义一个映射字典(app.php的alias数组),子类去继承一个固定的父类,返回的是真正发挥作用的类名,然后去实例化这个类,使用__callstatic模式方法去静态调用该类方法。
demo:
<?php
//定义映射字典
$alias = ['A' => 'B'];
//facade类
class facade
{
//静态调用函数不存在时使用该类
//此处应该是子类使用该函数
public static function __callStatic($method, $param)
{
return self::handle()->$method();
}
//该函数得到真正的类
public function handle()
{
$class = static::getClass();
return new $class;
}
}
class B extends facade
{
//该函数获得类
public static function getClass()
{
return 'C';
}
}
class C
{
//真正的函数
public function action()
{
return __CLASS__ . __FUNCTION__;
}
}
//autoload函数
function autoload($class)
{
global $alias;
if (in_array($class, array_keys($alias))) {
class_alias($alias[$class], $class);
}
}
spl_autoload_register('autoload');
echo A::action();
感觉上是很耗费性能的,但是实际的laravel的facaed的router类的测试中没有发现太多的性能损失。ab图就不帖了。
难道是我ab的打开的方式不对吗?