PHP 性能优化须知
25

file

应用程序的性能不仅仅是一个技术问题。性能表现能使企业成功或倒闭。所以,如果你认为几毫秒没什么大不了的,请再想一想。

为什么性能至关重要呢?

性能至关重要的原因有三个。首先是用户体验;如果您的应用程序需要很长时间才能加载,那么您可能会冒着用户切换到竞争对手的风险或者留下不良评论,这将严重影响业务发展。第二个原因是“转换”,转化次数是指实际购买产品或下载电子书的用户数量,或者通常是为您的服务提供资金的用户。

更快的网站意味着更多的转化和更多的利润。 第三个原因是“可扩展性”。 您的应用程序每秒处理的请求越多,您可以处理的流量就越多。 例如,如果您的应用程序可以在100毫秒内处理单个进程,则意味着您的应用程序每秒可以处理10个请求,因此如果您将应用程序处理时间减少到一半,您的应用程序容量将翻倍。

性能案例研究:

Firefox:当他们使下载页面的速度提高2.2秒时,他们的下载量就会增加1000万次。

Shopzilla: 当他们的网站变得比之前快5秒, 转化率提高了7--12%。

Bing: 当微软的搜索引擎慢1秒,他们会损失大概2.8%的收入。

Yahoo!: 和Bing一样,当它变慢0.4秒,他们将损失5--9%的流量。

所以,无论你的应用程序的业务用途是什么,更快的应用应用程序意味着更高的收入。

PHP 性能 优化:

  • 选择正确的版本

这一点在PHP7及以后的版本表现尤为突出,相比较与老的PHP版本,它具有最佳的性能表现。此处我不会在PHP各个版本之间进行比较,因为很多文章都讨论过了,但是你依然可以看一下下边的不同CMS在PHP各版本之间性能表现的图表。

file

  • PHP 微优化

微优化指的是在你的代码中进行微小的改变来改善你的应用性能。例如,在你使用 for 循环时,提前计算好长度总是更好的。以下图片展示了循环 1000 次的结果。你可以看到执行时间的改善。

file

尽管微优化能带来一点性能改善,但这仍然是不够的。
你可以从 phpbench.com 网站了解到更多的微优化。

  • XHProf: PHP 代码性能分析

当我们到达了 PHP 微优化的极限后,我们是时候需要开始准确判断哪一部分的代码运行缓慢,我们可以使用 XHProf 性能分析工具而不是靠猜测。在服务器上面安装和配置好 XHProf 后,「你可以在youtube上面找到一个使用例子。」 XHProf 会添加到你的全部 PHP 脚本的头部和尾部,然后生成一份报告,该报告包含了所有执行的函数、执行的时间、以及每个函数的调用次数。
下图是一个使用 laravel 框架开发的产品页面的性能分析结果。它显示整个执行时间为5秒,以及 getProductData() 函数被调用了40次。

file

你可能会遇到“N+1”问题,如果解决了它,你的产品页面将快5秒。

“N+1”问题主要发生于从关系数据库的两张表中查询数据。例如,查询所有产品的名字和id,然后查询另一个表获得每一个产品的颜色或库存可用性等详细细节。通常可以通过重写查询语句来修复,可以通过最多一个或两个数据库请求检索到所有数据。我们将在稍后的数据库请求优化文章里讨论这个问题。

  • 缓存

实现缓存层会减轻数据库的负载压力,减少频繁检索所需数据的时间。 Memcache 和 Redis 都广泛用于缓存;但 Redis 更具优势,例如将数据同步到磁盘,重启服务器数据不会丢失,它具有内置的主/从复制功能,随着应用程序的增长您可以轻松扩展 redis 集群。


Practice makes perfect.

原文地址:https://codeburst.io/php-performance-opt...

译文地址:https://laravel-china.org/topics/19399

本帖已被设为精华帖!
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 4

就讲了个大概,没有干货的么😂点进 http://phpbench.com/ 里面有一点:使用 if...elseif...else... 性能优于 switch...case...,即:有 if 一定要有 else,使用 === 代替 == 进行严格比较。

file

1周前

@truesnow 这大概就是所谓的水文吧

1周前

这大概就是所谓的水文吧

1周前

无干货

6天前

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!