iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php性能优化实例分析
  • 440
分享到

php性能优化实例分析

2023-07-02 08:07:06 440人浏览 安东尼
摘要

这篇文章主要介绍了PHP性能优化实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php性能优化实例分析文章都会有所收获,下面我们一起来看看吧。前言如何提高程序运行速度,减轻服务器压力是服务端开发必须面对的

这篇文章主要介绍了PHP性能优化实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php性能优化实例分析文章都会有所收获,下面我们一起来看看吧。

前言

如何提高程序运行速度,减轻服务器压力是服务端开发必须面对的一个问题。

简单且朴素的原则:不要在for循环中操作DB,包括关系型数据库NoSql

我们应该根据自己的业务场景,在for循环之前批量拿到数据,用尽量少的sql查询批量查到结果。 在for循环中进行数据的匹配组装。

场景说明

  • 我们允许用户选择职业,系统预制了一批职业标签;又开放了自定义职业标签的功能,不限制自定义标签的次数。允许用户编辑资料时选择2个职业标签。

  • 发现用户自定义的职业真的五花八门,随着业务增长,数量级越来越大;比如目前职业标签是2千个,以后可能有2万个,甚至20万个。

  • 这种情况下,我们上一篇提到的在for循环之前批量查询全量数据,在for循环中用自定义函数匹配,避免在for循环中操作DB的方式命中率太低了,造成了极大的浪费。

  • 比如:每个列表返回30个用户信息,每个用户选择了2个职业标签,最大标签数量是60;而我全量查到的职业标签数量是2千,命中率只有3%;如果职业标签达到2万个,命中率就只有0.3%了。

解题思路

首先,在for循环中不操作DB,这个大原则不变

上述问题的核心是命中率太低,就是全量查了很多用不到的数据

解决思路就是只批量查询命中的标签数据:

  • 取到30个用户在user表中保存的职业id

  • 30个用户的id去重后重组

  • 在职业表通过whereIn查询匹配的职业标签

  • 其他逻辑不变,替换的只是数据源:之前的数据源是全量数据,优化后的数据源是精准命中的数据。

思路清晰之后,开始coding

代码示例:

为了行文紧凑,代码段中省略了和文章无关的代码,用竖着的三个.省略。

核心代码:抽取 renderUserInfo ,统一输出用户信息,这个函数在for循环中调用,获得数据源在for循环之前。

<?phpnamespace App\Render;...class CommonRender extends BaseRender{    public static function renderUserinfo($data, $hobbyInfo = [],$professionInfo = [])    {        $hobbyInfo = !empty($hobbyInfo) ? $hobbyInfo : HobbyInfo::getAllInfo();        //特殊处理,因为职业用户可以自定义 数字一直增长 不全量查数据;$professionInfo为空时不是批量查询,只查单条记录        $professionInfo = !empty($professionInfo) ? $professionInfo : (isset($data['profession']) ? ProfessionInfo::getByIds($data['profession']) : []);        if (!is_array($data)) {            return [];        }        $ret = [            .            .            .//优化之前//          'hobby' => !isset($data['hobby']) ? [] : HobbyInfo::getByIds($data['hobby']),//          'profession' => !isset($data['profession']) ? [] : ProfessionInfo::getByIds($data['profession']),//优化之后            'hobby' => !isset($data['hobby']) ? [] : self::_renderHobby($data['hobby'], $hobbyInfo),            'profession' => !isset($data['profession']) ? [] : self::_renderProfession($data['profession'], $professionInfo),            .            .            .        return $ret;    }}

isset() 判断,避免传入的数据不存在,提示数组越界。

protected static function _renderProfession($userProfession, $professionInfo){    $ret = [];    if ($userProfession) {        $userProfessionIds = explode(',', $userProfession);        foreach ($userProfessionIds as $key =&gt; $userProfessionId) {            if (isset($professionInfo[$userProfessionId])) {                $ret[$key] = $professionInfo[$userProfessionId];            }        }    }    return $ret;}

调用 commonRender() 的代码,即展示数据源是怎么来的。

public static function getBatchUserIntro($userid, $userList){    $retData = [];    if (empty($userList)) {        return $retData;    }    .    .    .    $hobbyInfo = HobbyInfo::getAllInfo();    //按需批量查职业,不全量查询职业    $professionIds = array_column($batchUserInfo, 'profession');    $professionIds = implode(',', $professionIds);    $professionIds = array_unique(explode(',', $professionIds));    $professionInfo = ProfessionInfo::batchGetByIds($professionIds);    foreach ($batchUserInfo as $item) {        $retData[$item['userid']] = CommonRender::renderUserinfo($item, $hobbyInfo, $professionInfo, $expectInfo);    }    return $retData;}

封装的工具方法,通过id数组批量获得数据,做了特殊判断,兼容值为空的情况。

public static function batchGetByIds($ids = []){    //兼容职业为空的情况    foreach ($ids as $key =&gt; $id) {        if (empty($id)) {            unset($ids[$key]);        }    }    if (empty($ids)) {        return [];    }    return self::query()-&gt;selectRaw('id,name,pid')        -&gt;whereIn('id', $ids)        -&gt;get()        -&gt;keyBy('id')        -&gt;toArray();}

核心代码就是上述4部分

性能对比

以此举例:每次列表返回30个用户信息,每个用户选择了2个职业标签,最大标签数量是60;

优化之前:全量查到的职业标签数量为2千,命中率只有3%;如果职业标签达到2万个,命中率就只有0.3%了。

优化之后:全量查到的职业标签数量为2千,命中率为100%;如果职业标签达到2万个,命中率仍然为100%。

关于“php性能优化实例分析”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“php性能优化实例分析”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网PHP编程频道。

--结束END--

本文标题: php性能优化实例分析

本文链接: https://www.lsjlt.com/news/340803.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php性能优化实例分析
    这篇文章主要介绍了php性能优化实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇php性能优化实例分析文章都会有所收获,下面我们一起来看看吧。前言如何提高程序运行速度,减轻服务器压力是服务端开发必须面对的...
    99+
    2023-07-02
  • PHP 性能优化:深入案例分析
    php 性能优化通过分析和优化,可以显著提升网站性能。优化措施包括查询优化、数据缓存、i/o 优化。案例研究表明,这些优化措施可减少页面加载时间,提升数据库查询效率,并增强用户体验。通过...
    99+
    2024-05-10
    php 性能优化 redis
  • PostgreSQL性能优化举例分析
    这篇文章主要讲解了“PostgreSQL性能优化举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PostgreSQL性能优化举例分析”吧!背景在空间数...
    99+
    2024-04-02
  • YOLOv5性能优化与部署实例分析
    本篇内容介绍了“YOLOv5性能优化与部署实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!模型压缩为了使YOLOv5车牌识别系统在资源...
    99+
    2023-07-05
  • MySQL性能优化的案例分析
    这篇文章主要介绍MySQL性能优化的案例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言MySQL索引底层数据结构与算法MySQL性能优化原理-前篇实践(1)--MySQL性能...
    99+
    2024-04-02
  • 前端性能优化的示例分析
    这篇文章给大家分享的是有关前端性能优化的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。反复看下以下三个问题。有木有不同的人问过你:什么是前端性能优化?有木有不同的面试官问...
    99+
    2024-04-02
  • PHP 性能优化:性能指标解读与分析
    php 性能优化需要关注关键性能指标(kpi),包括请求/秒 (rps)、响应时间、内存使用率、cpu 利用率和错误率。分析这些 kpi 可识别性能瓶颈。实战案例中,rps 低、响应时间...
    99+
    2024-05-10
    php 性能优化 apache 并发请求
  • Android性能优化之内存优化的示例分析
    这篇文章主要介绍Android性能优化之内存优化的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、Android内存管理机制1.1 Java内存分配模型先上一张JVM将内存划分区域的图程序计数器:存储当前线...
    99+
    2023-06-15
  • Python性能优化分析
    本篇内容介绍了“Python性能优化分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!python为什么性能差:当我们提到一门编程语言的效率...
    99+
    2023-06-17
  • PHP中封装性的性能优化实例
    封装性是面向对象编程的重要原则之一,它可以提高代码的复用性、可维护性和可扩展性。然而,过多的封装可能会带来性能上的损耗。本文将介绍一些PHP中封装性的性能优化实例,并提供具体的代码示例。采用魔术方法动态访问属性和方法。在PHP中,我们可以通...
    99+
    2023-10-21
    性能优化 实例 封装性
  • GaussDB for MySQL性能优化的示例分析
    小编给大家分享一下GaussDB for MySQL性能优化的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!背景我们先来看看MySQL 8.0的事务提交的...
    99+
    2023-06-15
  • 大数据交叉报表性能优化实例分析
    这篇文章主要为大家分析了大数据交叉报表性能优化实例分析的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“大数据交叉报表性能优化实例分析”的知识吧。软硬件环境OS...
    99+
    2023-06-04
  • php之性能优化案例
    php是一个很流行的脚本语言,现在很多公司(新浪、优酷、百度、搜狐、淘宝等等)在使用这种语言进行网站开发。我的这篇文章,我只是希望能够提高你的php脚本性能。请记住你的php脚本性能...
    99+
    2024-04-02
  • PHP 性能分析:识别和优化瓶颈
    识别和优化 php 应用程序中的性能瓶颈:识别瓶颈:使用剖析器、模拟流量和检查日志。优化瓶颈:优化数据库查询、缓存页面和数据、减少 http 请求、启用 gzip 压缩和优化 web 服...
    99+
    2024-05-11
    php 性能分析 css redis
  • MySQL数据库性能优化之SQL优化的示例分析
    这篇文章将为大家详细讲解有关MySQL数据库性能优化之SQL优化的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。  注:这篇文章是以 MySQL 为背景,很多内容...
    99+
    2024-04-02
  • vue长列表性能优化的示例分析
    小编给大家分享一下vue长列表性能优化的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!长列表性能优化我们应该都知道vue...
    99+
    2024-04-02
  • ORACLE数据库性能优化的示例分析
    这篇文章给大家分享的是有关ORACLE数据库性能优化的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。ORACLE数据库的优化方式和MYSQL等很大的区别,今天通过一个OR...
    99+
    2024-04-02
  • MySQL数据库性能优化的示例分析
    小编给大家分享一下MySQL数据库性能优化的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!为什么做优化??因为数据量太多了,项目部署上线再到用户使用,每天...
    99+
    2023-06-22
  • MySQL优化 - 性能分析与查询优化
    MySQL优化 - 性能分析与查询优化    优化应贯穿整个产品开发周期中,比如编写复杂SQL时查看执行计划,安装MySQL服务器时尽量合理配置(见过太多完全使用默认配置安装的情况),根...
    99+
    2024-04-02
  • PHP 函数的性能分析和优化技巧
    使用 php 函数性能分析和优化技巧可显着提高应用程序性能。分析方法包括使用 xdebug 扩展、tideways 工具和进行微基准化测试。优化措施包括消除瓶颈、减少函数调用、使用高效的...
    99+
    2024-04-14
    性能 php composer
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作