song 的所有回复(82)

评论于 1年前,获得 2 个赞

@Littlesqx 代码片段运行在docker容器里面,和项目环境是隔离的

评论于 3年前,获得 2 个赞

曾经用xhprof分析过laravel的执行流程,发现大部分时间都消耗在解析路由上了。laravel的路由功能虽然强大,但是代价是很大程度上拉低了应用的运行效率。

如果是API项目,那是非常不推荐使用Laravel的,最大的问题就是太慢了。Lumen的出现的就是为了解决这个问题,它使用FastRoute作为路由组件,虽然使用起来没有laravel的路由那么方便,但是效率上提高了太多,而且也能满足所有的路由规则配置,你的情况完全可以使用多个平行的group来实现。

评论于 3年前,获得 1 个赞

推荐laracast的视频教程,干货满满,而且还算便宜,简直业界良心

评论于 3年前,获得 1 个赞

@Harry 你的代码有个问题,就是遍历friends的时候会运行多次getFriend方法,就意味着会运行多条select * from users where id=?,也就是1+N条sql语句的问题 ,优化一下你的代码可以减少到两条sql:
模型 User添加friends方法:

public function friends()
    {
        $ids = Friendship_relation::where('uid1', $this->id)
            ->orWhere('uid2', $this->id)
            ->get()->map(function ($user) {
                return $user->uid1 == $this->id ?
                    $user->uid2 :
                    $user->uid1;
            });

        return static::whereIn('id', $ids);
    }

控制器中:

public function friend()
{
    $friends = Auth::user()->friends()->get();

    return view('friend.friend', compact('friends'));
}
评论于 3年前,获得 1 个赞

header设置在response里面才能输出给客户端,试试直接写在中间件里面吧:

class CORS
{
    public function handle($request, Closure $next)
    {
        header('Access-Control-Allow-Origin: *');
        header('Access-Control-Max-Age: 86400');
        header('Access-Control-Allow-Headers: Content-Type, Accept, Authorization, X-Requested-With');
        header('Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE, PATCH');

        return $next($request);
    }
}
评论于 1年前,获得 1 个赞

帮你写了个例子 https://implode.io/S8CmbT, 关键在模型的creating回调中自动生成uuid填充id字段

参考 https://medium.com/@steveazz/setting-up-uu...

评论于 3年前,获得 1 个赞

route:cache命令使用serialize()把路由信息序列化成字符串存入文件,但是serialize()不能处理闭包,所以除非你的路由里面没有使用闭包,否则不能用这个命令

评论于 2年前,获得 1 个赞

@朕略显ぼうっと萌   你需要根据自己的需求开发一个adapter,这个adapter 只要实现League\Flysystem\AdapterInterface就可以了,然后用Storage::extend()注册你的adapter到系统里面就行了

不熟悉的话可以找几个类似的adapter参考一下,Local.php这是laravel本地存储使用的adapter,云存储的adapter可以参考abcsun/qiniu-laravelaobozhang/aliyun-oss-adapter

评论于 3年前,获得 1 个赞

LuaScripts::pop()封装了一系列redis以及数据处理操作

    public static function pop()
    {
        return <<<'LUA'
local job = redis.call('lpop', KEYS[1])
local reserved = false
if(job ~= false) then
    reserved = cjson.decode(job)
    reserved['attempts'] = reserved['attempts'] + 1
    reserved = cjson.encode(reserved)
    redis.call('zadd', KEYS[2], ARGV[1], reserved)
end
return {job, reserved}
LUA;
    }

用lua脚本来执行这些操作可以保证原子性并且提高执行效率 http://redis.io/commands/EVAL#atomicity-of...

评论于 3年前,获得 0 个赞

@阡陌 请问你的laravel版本

ps:我只测试过七牛的oss,阿里云的还没测试过,稍后我补充一下

292 声望
文章
8
粉丝
345
喜欢
657
私信