Cet article présente principalement l'optimisation des performances du projet Laravel-permission, qui a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer
<.>J'ai récemment étudié et analysé les performances des projets créés sur SWIS. Étonnamment, l’une des méthodes les plus gourmandes en performances est due à l’excellent package. spatie/laravel-permission
cela fait principalement deux choses : spatie/laravel-permission
$permission = $permissions ->where('id', $id) ->where('guard_name', $guardName) ->first();
$permission = $permissions ->filter(function ($permission) use ($id, $guardName) { return $permission->id === $id && $permission->guard_name === $guardName; }) ->first();
. Bien entendu, certaines pages peuvent devoir vérifier environ 200 autorisations. hasPermissionTo
$users = factory(User::class, 150)->make(); $searchForTheseUsers = $users->shuffle()->take(50); # 方法 1: where foreach($searchForTheseUsers as $user) { $result = $users->where('id', '=', $user->id)->first(); } # 方法 2: 过滤,传递一个模型作为回调 foreach($searchForTheseUsers as $searchUser) { $result = $users->filter(function($user) use ($searchUser) { return $user->id === $searchUser->id; })->first(); } # 方法 3: 过滤,传递属性作为回调 foreach($searchForTheseUsers as $user) { $searchId = $user->id; $result = $users->filter(function($user) use ($searchId) { return $user->id === $searchId; })->first(); }
foreach($searchForTheseUsers as $user) { $result = $users ->where('id', '=', $user->id) ->where('firstname', '=', $user->firstname) ->where('lastname', '=', $user->lastname)->first(); }
方法 #1 | 方法 #2 | 方法 #3 | |
---|---|---|---|
1个属性 | 0.190 | 0.139 (-27%) | 0.072 (-62%) |
2个属性 | 0.499 | 0.372 (-25%) | 0.196 (-61%) |
3个属性 | 0.488 | 0.603 (+25%) | 0.198 (-59%) |
Le filtrage multi-attributs augmente considérablement le coût de calcul.
L'utilisation de
au lieu de peut améliorer les performances de 60 %. Collection::filter()
Collection::where()
Attention : Passer le modèle complet au rappel du filtre est très gourmand en performances, il est préférable de passer des attributs individuels.
Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !
Recommandations associées :
Utilisation de la requête de base de données coroutine de Swoole dans Laravel 5.6Analyse du système d'apparence de façade de LaravelLaravel+Redis implémente simplement un traitement à haute concurrence des files d'attente qui réussit le test de résistanceCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!