灰太狼
- 灰太狼 2019-09-10 已签到连续签到2天,获得了10个金钱
- 灰太狼 2019-09-09 已签到连续签到1天,获得了5个金钱
- 灰太狼 2019-09-04 已签到连续签到1天,获得了5个金钱
- 灰太狼 2019-08-19 已签到连续签到1天,获得了5个金钱
- 灰太狼 2019-08-13 已签到连续签到1天,获得了5个金钱
- 灰太狼 赞了教程计算一个数组中所有元素的和
上面大神都说的很好,再教你一招,不写代码。
mysql 时间字段用 timestamp 类型,设置为 ON UPDATE
(自动更新时间)$this->view是当前模版,
AvatarAsset::register($this->view) 是将 资源文件 AvatarAsset 注入到模版中。
(就是引入css和javascript)你可以理解成action的代码复用。
对控制器的操作封装。
例如:错误处理action,这个action在所有controller里都可能用到,或在别的模块里也用。那就单独出来一个action类,然后在控制器里需要使用的时候就在actions里配置一下,这个控制器就有了这个action功能。
其实yii对这个ErrorAction已经做了封装。
public function actions() { return [ 'error' => [ 'class' => 'yii\web\ErrorAction', ],//返回错误 'captcha' => [ 'class' => 'yii\captcha\CaptchaAction', 'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null, ],//返回验证 ];
这样就相当于在controller里写了下面两个控制器
public function actionError() { //其实这个是单独封装的action,在需要的时候通过配置附加进来 //****如果你理解行为,你也可以理解这个。 } public function actionCaptcha() { //其实这个是单独封装的action,在需要的时候通过配置附加进来 //****如果你理解行为,你也可以理解这个。 }
单独封装的action 必须要实现run方法.因为yii在执行action的时候会执行这句:
是重写actions() $result = call_user_func_array([$this, 'run'], $args);
执行行为的时候其实是执行这句:
是重写behaviors()
return call_user_func_array([$object, $name], $params);]
底层封装处理逻辑,将具体操作向外抛出,如果需要实现这个功能,只需要上层重写这个未实现的方法,将它实现,底层就会去处理你实现的这个方法。
例如 你实现了actions(),behaviors(),xxx,那么yii就会处理里面的操作,
把actions()里面的定义都当作这个controller的action,
把behaviors()里定义的类里的函数都当作这个controller的函数,数据库1000条数据,300请求 200并发
使用mysql排序(3次测试) Requests per second: 2106.74 [#/sec] (mean) Time per request: 94.933 [ms] (mean) Time per request: 0.475 [ms] (mean, across all concurrent requests) Transfer rate: 500.95 [Kbytes/sec] received Requests per second: 2149.77 [#/sec] (mean) Time per request: 93.033 [ms] (mean) Time per request: 0.465 [ms] (mean, across all concurrent requests) Transfer rate: 510.92 [Kbytes/sec] received Requests per second: 1953.02 [#/sec] (mean) Time per request: 102.405 [ms] (mean) Time per request: 0.512 [ms] (mean, across all concurrent requests) Transfer rate: 456.57 [Kbytes/sec] received
使用rsort()排序(3次测试) Requests per second: 1885.29 [#/sec] (mean) Time per request: 106.085 [ms] (mean) Time per request: 0.530 [ms] (mean, across all concurrent requests) Transfer rate: 442.67 [Kbytes/sec] received Requests per second: 1885.29 [#/sec] (mean) Time per request: 106.085 [ms] (mean) Time per request: 0.530 [ms] (mean, across all concurrent requests) Transfer rate: 442.67 [Kbytes/sec] received Requests per second: 1940.47 [#/sec] (mean) Time per request: 103.068 [ms] (mean) Time per request: 0.515 [ms] (mean, across all concurrent requests) Transfer rate: 463.27 [Kbytes/sec] received
从结果看,mysql order by 排序比PHP处理排序快,这里使用的是php内置函数rsort()都比mysql的排序慢了,如果自己封装一个排序操作函数,速度会更慢。
所以结论: mysql order by 排序 > php内置排序函数 > 自定义排序函数