日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

记一次对 Laravel-permission 项目的性能优化

發(fā)布時間:2025/4/5 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 记一次对 Laravel-permission 项目的性能优化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我最近研究分析了在?SWIS上面創(chuàng)建的項目的性能。令人驚訝的是,最耗費性能的方法之一是優(yōu)秀的 ?spatie/laravel-permission?包造成的。

經(jīng)過查閱更多資料和研究,發(fā)現(xiàn)一個可能明顯改善的性能問題?。既然解決方案已明確闡述,就很容易編寫代碼改善,提交請求。

現(xiàn)在這個解決方案已被合并和發(fā)布,下面是這個性能問題的分析和如何在自己的項目避免這類問題。

TL;DR:?跳轉(zhuǎn)到結(jié)論部分.

性能瓶頸

如果我們抽象的看?spatie/laravel-permission?它主要做兩件事:

  • 保持一個屬于某個模型的權(quán)限清單。
  • 檢查某個模型是否具有權(quán)限。
  • 第一點說是性能瓶頸有點牽強。這里的權(quán)限數(shù)據(jù)存放在數(shù)據(jù)庫中,需要的時候?qū)蛔x取出來。這個過程是有點慢但也只是執(zhí)行一次。結(jié)果會被緩存下來,后續(xù)的請求可以直接使用。

    第二點在性能瓶頸的觀點上來看確實是一個瓶頸。 這個瓶頸取決于權(quán)限的性質(zhì)和項目的大小, 因為權(quán)限會被頻繁的檢查。 在這個檢查的過程中任何的遲鈍都會成為整個項目的性能瓶頸。

    過濾集合類

    過濾權(quán)限集合的方法被認為是造成低性能的原因。 它做了如下事情:

    $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();

    這兩個代碼段實現(xiàn)了同一件事情,但第二個更快。

    性能測試

    我正在開發(fā)的應(yīng)用中大約有 150 個不同的權(quán)限。 在一個普通的請求中, 大約有 50 個權(quán)限需要用 ?hasPermissionTo?這個方法去檢查,當然,有些頁面可能需要檢查大約 200 個權(quán)限。

    以下是用來做性能測試的一些設(shè)置。

    $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: 過濾,傳遞一個模型作為回調(diào) foreach($searchForTheseUsers as $searchUser) {$result = $users->filter(function($user) use ($searchUser) {return $user->id === $searchUser->id;})->first(); }# 方法 3: 過濾,傳遞屬性作為回調(diào) foreach($searchForTheseUsers as $user) {$searchId = $user->id;$result = $users->filter(function($user) use ($searchId) {return $user->id === $searchId;})->first(); }

    以上三個方法都會被用來測試過濾 1 個屬性,2 個屬性,3 個屬性,所以,用方法 1 過濾三個屬性就會是這樣:

    foreach($searchForTheseUsers as $user) {$result = $users->where('id', '=', $user->id)->where('firstname', '=', $user->firstname)->where('lastname', '=', $user->lastname)->first(); }

    結(jié)果

    方法 #1方法 #2方法 #3
    1個屬性0.1900.139 (-27%)0.072 (-62%)
    2個屬性0.4990.372 (-25%)0.196 (-61%)
    3個屬性0.4880.603 (+25%)0.198 (-59%)

    結(jié)論

    我們可以得出結(jié)論:對一個項目而言,重復的過濾一個大集合會引發(fā)嚴重性能瓶頸。

    多屬性的過濾明顯增加計算成本。

    使用 Collection::filter() 代替?Collection::where() 可以提高60%的性能。

    警告:傳遞完整的模型給過濾器回調(diào)是很耗費性能的,最好是傳遞單獨的屬性。

    致謝

    感謝 Spatie 和 spatie/laravel-permissions?的貢獻者創(chuàng)建如此優(yōu)秀的包,我非常喜歡使用!感謝 Andru Beldie?指出這些性能問題,我才有機會對其進行調(diào)查和糾正。

    鏈接

    • spatie/laravel-permission package.
    • Issue #550 addressing performance problem.
    • Pull request #710 that fixes problems.

    更多現(xiàn)代化 PHP 知識,請前往 Laravel / PHP 知識社區(qū)

    轉(zhuǎn)載于:https://www.cnblogs.com/summerblue/p/9176947.html

    總結(jié)

    以上是生活随笔為你收集整理的记一次对 Laravel-permission 项目的性能优化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲精品粉嫩小泬 | 欧美日韩三区 | 中国18videosex极品 | 色婷婷久久久 | 美日韩av | 亚洲色偷精品一区二区三区 | 美脚の诱脚舐め脚视频播放 | 国产美女福利 | 精品国产一区二区在线 | 亚洲无毛 | 亚洲精品国产精华液 | 性一交一乱一色一免费无遮挡 | 久久久美女 | 殴美一级视频 | 午夜免费精品 | 一级黄色性片 | 午夜精品久久久久久 | 四虎影院免费视频 | 国产一区二区欧美 | 狠狠干一区| 97视频久久 | 久久这里有精品 | 久久精品aⅴ无码中文字字幕重口 | 超碰av人人 | 丰满人妻妇伦又伦精品国产 | 久久作爱| 欧美久久久久久久久中文字幕 | 999色综合| 天天草天天射 | 日韩精品欧美在线 | 在线只有精品 | 伊人久久大香线蕉 | 中文字幕一区二区三区人妻 | 黄色av资源| 久草精品在线 | 三级网站免费观看 | 少妇床戏av | 蜜桃视频在线观看污 | 成人理论片 | 最近中文字幕免费mv视频7 | 亚洲天堂免费看 | 国产小视频网址 | 国产精品无码av在线有声小说 | 婷婷激情小说网 | 蜜桃av免费看 | www.色妞 | 奇米在线777| 午夜精品久久久 | 少妇高潮惨叫久久久久 | 成人福利视频在线观看 | 中国无码人妻丰满熟妇啪啪软件 | 日韩精选| 国产视频成人 | 国产精品丝袜黑色高跟鞋的设计特点 | 日韩欧美精品一区二区三区 | 国产美女被草 | 一本色综合 | 巨物撞击尤物少妇呻吟 | 欧美黑人又粗又大高潮喷水 | 黄色片子网站 | 欧美精品在线观看一区二区 | 香蕉av一区二区 | 成年免费视频黄网站在线观看 | 欧州一区 | 男人插女人下面视频 | 久久久www成人免费毛片 | 一级成人黄色片 | 国产黄a三级三级看三级 | 高清乱码免费 | 久久国产精品影院 | 91久久视频 | 久久久久噜噜噜亚洲熟女综合 | 特级丰满少妇一级aaa爱毛片 | 午夜免费看视频 | 国产日韩中文 | 免费又黄又爽又色的视频 | 狠狠干av | 天天干天天噜 | 国产又粗又黄又爽又硬的视频 | 在线观看国产一区二区 | 久久网亚洲 | 亚洲欧美福利 | 免费视频网站在线观看入口 | 精品国产无码一区二区三区 | 成人激情视频网站 | 亚洲成人免费在线 | 亚洲第六页 | av体验区 | 国产成人在线观看免费网站 | 国产日韩欧美激情 | 日韩一级中文字幕 | 精品久久香蕉国产线看观看亚洲 | 色视频综合 | 性欧美大战久久久久久久久 | 情侣在线视频 | 老女人一区 | 狠狠爱综合网 | 天天综合天天干 | 日韩欧美v|