百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

php性能优化(php性能优化面试题)

wxin55 2024-10-28 20:27 45 浏览 1 评论

规范说明

性能是网站运行是否良好的关键因素, 网站的性能与效率影响着公司的运营成本及长远发展,编写出高质高效的代码是我们每个开发人员必备的素质,也是我们良好的职业素养。

影响性能的因素

  • 商业需求需求合理性需求与系统的整合需求所带来的商业利益是否与需求开发的成本成正比需求所带来的风险
  • Web 服务器并发处理能力高负载的能力负载均衡的能力动态内容与静态内容的处理能力Web 服务器部署
  • DataBase 服务器并发访问数据库服务器的部署数据库的 shema 架构与的表设计是否合理数据检索
  • 操作系统
  • 客户端请求
  • 程序/语言

分析性能的指标

  • 程序的运行时间
  • 程序的运行所消耗的内存
  • 单位时间内的并行处理
  • 磁盘 IO 的处理

优化性能的目标

快速、并发、资源消耗低(内存、磁盘 IO、CPU 负载)

优化性能的原则

  • 服务器配配置最优化
  • 服务器部署合理化
  • 商业需求合理并与产出的商业价值成正比
  • 架构可用、可维护、可扩展
  • 程序的正确性、简单性、逻辑的合理性。
  • 不断的分析性能的的瓶颈
  • 不断的重构已有的代码
  • 优化的优先级:program->database->web sersver->os->client

优化

程序优化

  • 变量变量大小,注意变量大小是节约内存的最有效手段,对于来自用户表单、数据库和文件缓存的数据都需要控制变量的大小。 因为cpu要处理的数据是来源于内存变量有效期,使用unset()函数注销不需要的变量是一种良好的习惯,将一些不需要的变量立即注销可提高内存的使用率。复制变量,尽量不要复制变量,否则就会带来1倍的内存消耗,即使复制变量也应该要立即注销原有变量。变量类型,初始化变量请注意其变量类型,一个变量在执行过程中最好只有一种类型状态。对于数组变量,请初始化声明,如下: $a = array();临时变量,是处理业务逻辑的临时存储,这些都是需要消耗内存的。如果临时变量使用结束请立即注销,特别是在一些过程式代码的执行流程中,对于一些函数,如果业务非常复杂,同样需要立即注销临时变量静态变量,对于一些需要由复杂业务产生的变量,如果在程序的执行过程中多次产生并使用,可考虑使用静态变量,减少程序的cpu执行次数变量的性能:局部变量>全局变量>类属性>未定义的变量。
  • 循环尽量减少循环的次数。尽量减少循环的潜逃的层次,不要超过三层。避免在循环内有过多的业务逻辑。不要循环包含文件不要循环执行数据库操作。优先使用foreach,它比for/while效率高,如果循环内要调用函数,用array_walk最好,它的效率要比for 高出1倍,要比foreach高出43%的效率不要把 count/strlen/sizeof 放到 for 循环的条件语句中 For($i=0,$count=count($array);$i<$count;$i++){} 不要使用for($i=0;$i<count($array);$i++){};for($i=$total;$i>0;$i–){}性能好于for($i=0;$i<$total;$–){}保持循环体内的业务逻辑清晰
  • 函数函数职责清晰,一个函数只干一件事,不要杂揉过多的业务逻辑函数代码体不要超过20行,反之,考虑拆分。优先使用php内置函数常量与函数同时能干一件事,优先使用常量。 phpversion() < PHP_VERSION get_class() < CLASS is_null() < NULL ===echo 的性能好于print,输入多个变量的时候用echo $str,$str1,不用.连接符$_SERVER[REQUEST_TIME]替换time();字符串替换strtr()->str_replace()->preg_replace()->epreg();发挥trim最大功效,替换substr。$filepath=trim($filename,’/’).’/’;Isset/empty 虽然两个函数功能有所差异,但在同样的情况下推荐使用 empty()isfile/file_exist 两个函数的功能有所不同,file_exist既可判断文件是否存在,也可以判断目录是否存在,在同样的情况下推荐使用is_file
  • 文件减少文件包含数,减少磁盘 IO使用完整路径,或者容易转换的相对路径。避免在 include_path 查找文件的代码行数不要超过 2000 行Require_once/include_once 效率低于 require/include, 需要额外的去查看系统是否已经调用过这个文件. 因为它们在一个 opcode 缓存下的调用非常慢程序执行文件用 requie/require_once,缓存文件用include/include_once。Include 效率好于 require优化 spl 中的文件自动加载机制,可参靠 yii类库文件加载,是否考虑类是否已经实例化,可考虑采用设计模式之单例模式文件读写的并发性
  • 面向对象控制实例的创建的数量优先使用常量、类常量优先例用静态变量,静态属性类的结构合理面象接口编程封装变化点依赖于抽象,不依赖于细节优先使用静态成员类的接口清晰稳定,类的职责单一,类与类的通信合理使用常量的好处 编译时解析,没有额外开销 杂凑表更小,所以内部查找更快 类常量仅存在于特定「命名空间」,所以杂凑名更短 代码更干净,使除错更方便
  • 字符串 用单引号替代双引号引用字符串;避免检索字符串中的变量
  • 运算用 i+=1 代替i=i+1。符合c/c++的习惯,效率还高++$i 的效率高于++$i,–$i 同理
  • 数组多维数组尽量不要循环嵌套赋值;使用$array[‘name’]方式访问数组,禁止$array[name]/$array[“name”]
  • 判断逻辑判断请优先使用switch 的方式,对于业务逻辑相对较多的情况请选择if/else,提高代码的可读性尽量控制if/else判断的个数,如果太多请考虑功能优化或代码优化尽量使用恒等用于比较判断,恒等的效率高于等于,而且还能避免一些类型强制转换的错误if/else与_&&,单条语句判断请选择&&的形式, &&的效率高于if/else,如下 : if ($a == 1) { $b = 2; } 可选择为($a == 1) && $b = 2;

缓存

  • 使用php加速器,缓冲opcode
  • 例用memcache/nosql
  • 使用内存数据库、
  • 使用文件缓存
  • 缓冲功能

其它

  • 少用@符号,严重影响性能
  • 适时关闭远程资源连接如数据库,ftp、socket等,适时的清理这些资源
  • 合理的商业需情
  • 数据库 schema 架构优化
  • 垂直与水平分库分表
  • 索引优化,查询优化
  • 第三方开源检索工具(sphinx)
  • 主从数据库服务器的使用。
  • Web 服器优化(暂未整理,有相应的 Web 服务器优化手册)
  • 操作系统优化(暂未整理,有相应的 OS 优化手册)
  • 前端优化合理的 html 结构合理 html 与css 的同时,考虑 Css 设计合理,减少 http 请求合理 html 与java script 的同时,考虑拆分是否合理,减少 http 请求优化 java script 代码,让用户有良好的体验根据 http 协议,优化高并发请求

性能检测工具

  • Web Server
  • ab
  • http_load
  • xhprof
  • OneAPM
  • apd
  • xdebug
  • Mysql
  • explain
  • profiler

相关推荐

Shiro学习系列教程三:集成web(web集成环境)

相关推荐:《Shiro学习系列教程一:Shiro之helloworld》《Shiro学习系列教程三:集成web》《Shiro学习系列教程四:集成web(二)》《Shiro学习系列教程五:自定义Real...

写了这么多年代码,这样的登录方式还是头一回见

SpringSecurity系列还没搞完,最近还在研究。有的时候我不禁想,如果从SpringSecurity诞生的第一天开始,我们就一直在追踪它,那么今天再去看它的源码一定很简单,因为我们了...

Shiro框架:认证和授权原理(shiro框架授权的四种方式)

优质文章,及时送达前言Shiro作为解决权限问题的常用框架,常用于解决认证、授权、加密、会话管理等场景。本文将对Shiro的认证和授权原理进行介绍:Shiro可以做什么?、Shiro是由什么组成的?举...

Spring Boot 整合 Shiro-登录认证和权限管理

这篇文章我们来学习如何使用SpringBoot集成ApacheShiro。安全应该是互联网公司的一道生命线,几乎任何的公司都会涉及到这方面的需求。在Java领域一般有SpringS...

Apache Shiro权限管理解析二Apache Shiro核心组件

ApacheShiro核心组件Subject(用户主体)Subject是Shiro中的核心概念之一,表示当前用户(可以是登录的用户或匿名用户)。它是与用户交互的主要接口,提供了对用户身份验证...

详细介绍一下Apache Shiro的实现原理?

ApacheShiro是一个强大、灵活的Java安全框架,设计目标是简化复杂的安全需求,提供灵活的API,使开发者能方便地将安全功能集成到任何应用中。主要作用是用于管理身份验证、授权、会话管理和加...

什么是Apache Shiro?SpringBoot中如何整合Apache Shiro?

ApacheShiro是一个功能强大且易于使用的Java安全框架,主要用于构建安全的企业应用程序,例如在应用中处理身份验证(Authentication)、授权(Authorization)、加密(...

Apache Shiro权限管理解析三Apache Shiro应用

Shiro的优势与适用场景优势简单易用:API设计直观,适合中小型项目快速实现权限管理。灵活性高:支持多种数据源(数据库、LDAP等),并允许开发者自定义Realm。跨平台支持:不仅限于We...

那些通用清除软件不曾注意的秘密(清理不需要的应用)

系统清理就像卫生检查前的大扫除,即使你使出吃奶的劲儿把一切可能的地方都打扫过,还会留下边边角角的遗漏。随着大家电脑安全意识的提高,越来越多的朋友开始关注自己的电脑安全,也知道安装360系列软件来"武装...

JWT在跨域认证中的奇妙应用(jq解决跨域)

JWT在跨域认证中的奇妙应用什么是JWT?让我们先来聊聊JWT(JSONWebToken)。它是一种轻量级的认证机制,就像一张电子车票,能让用户在不同的站点间通行无阻。JWT由三部分组成:头部(H...

开启无痕浏览模式真能保护个人隐私吗?

在访问网站页面时,你是否有过这样的疑虑,自己访问的会不会是山寨网站?用公用电脑上网,个人信息会被别人看到吗?这时,有人会说,使用浏览器的“无痕浏览”模式不就行了,可以在操作中不留下“蛛丝马迹”,但,真...

辅助上网为啥会被抛弃 曲奇(Cookie)虽甜但有毒

近期有个小新闻,大概很多小伙伴都没有注意到,那就是谷歌Chrome浏览器要弃用Cookie了!说到Cookie功能,很多小伙伴大概觉得不怎么熟悉,有可能还不如前一段时间被弃用的Flash“出名”,但它...

cookie、session和token(cookie,session和token的区别)

Cookie的概念最早是在1994年由NetscapeCommunications的程序员LouMontulli发明的,目的是为了解决当时早期互联网的一个关键问题:HTTP无状态协...

小白都能看懂的session与cookie的区别理解

cookie/session都是跟踪识别浏览器用户身份的一个东西。cookie的理解:我们要知道,服务器和客户端之间进行数据传输,需要使用到一个超文本传输协议(http协议),而http协议本身是个...

面试:网易一面:支撑10万QPS的电商购物车系统如何架构设计呢?

1.需求分析:10万QPS的购物车系统需要满足哪些需求?回答:10万QPS的购物车系统需要满足以下核心需求和挑战:核心功能:添加、删除、修改购物车商品实时查看购物车列表支持高并发读写(10万QPS)...

已有1位网友发表了看法:

  • 在线电影网

    在线电影网  评论于 [2024-11-22 14:10:24]  回复

    《风月恶之花》国产剧高清在线免费观看:https://www.jgz518.com/xingkong/32644.html

取消回复欢迎 发表评论: