这些生成时间是否可以接受php-mysql?我在哪里可以改进?我应该在哪里改进?

时间:2009-07-01 16:24:27

标签: php mysql performance

我正在开发我的第一个重大项目。这是一个轻量级的内容管理系统。

我已经开发了我自己的项目框架。我相信这会吸引很多火焰,还有一些“啧啧”,但到目前为止它似乎做得很好。

我看到页面生成时间在5到15毫秒之间。 (例如,万一我的号码错了,是0.00997686386108秒)。

我想确保应用程序尽可能高效。虽然它在我的测试环境中看起来不错,但我想确保它在现实世界中表现得尽可能好。

我是否应该关注这些数字 - 因此,请花时间微调MySQL以及我与它的互动?

修改此外,是否有一些人们可以推荐用于使系统饱和并报告结果的工具或方法?

其他信息:我的'测试'系统是我在BlueHost上的备用网络托管帐户。因此,我认为我所看到的任何表现(正面或负面)都将大致表明我将在“现实世界”中看到的内容。

5 个答案:

答案 0 :(得分:3)

在您的测试环境中表现良好是一个良好的开端,但您还需要考虑其他问题(如果您还没有)。这是我能想到的一对夫妇:

  1. 随着数据量的增加,您的应用如何运作?通常,测试环境的数据非常少。对于大量数据,诸如优化不佳的查询,缺少索引等等开始引起他们以前没有的问题。如果设计不当,性能可能会开始以指数方式降低数据大小。

  2. 您的应用如何在负载下执行?有时,一个或两个用户的应用程序性能很好,但是当很多用户参与时,资源争用或并发问题就会开始出现。

答案 1 :(得分:2)

你在5-15毫秒时表现很好。但是,除了throwing load at it之外,您不会知道它在负载下的执行情况。

答案 2 :(得分:1)

正如另一个问题所提到的:我经常想念的是,大多数网站都可以通过优化他们的前端而不是他们的后端来极大地提高他们的速度。看看这个superb list about speeding up your frontend @ yahoo.com:

  • 最小化HTTP请求
  • 使用内容分发网络
  • 添加过期或缓存控制标头
  • Gzip Components
  • 将样式表放在顶部
  • 将脚本放在底部
  • 避免使用CSS表达式
  • 使JavaScript和CSS外部
  • 减少DNS查找
  • 缩小JavaScript和CSS
  • 避免重定向
  • 删除重复的脚本
  • 配置ETags
  • 使Ajax可以缓存
  • 提前冲洗缓冲区
  • 使用GET进行AJAX请求
  • 后加载组件
  • 预装组件
  • 减少DOM元素的数量
  • 跨域拆分组件
  • 最小化iframe数量
  • 没有404s
  • 减少Cookie大小
  • 使用Cookie的免费域名
  • 最小化DOM访问
  • 开发智能事件处理程序
  • 选择<链路>在@import
  • 避免过滤器
  • 优化图片
  • 优化CSS Sprites
  • 不要在HTML中缩放图像
  • 制作favicon.ico小巧且可缓存
  • 将组件保持在25K以下
  • 将组件打包为多部分文档

答案 3 :(得分:0)

作为页面生成时间,完全可以接受5-15毫秒。但最重要的是,您的系统与许多人同时访问您的内容的效果如何。因此,您需要在高负载下测试系统,并了解它的扩展程度。

关于调优,设置聪明的缓存策略通常比调优MySQL更有效,尤其是当您的数据库和http服务器位于不同的计算机上时。如果您需要有关该主题的建议(I like that one, maybe because I wrote it:)

,那么StackOverflow上有很好的Q和关于缓存的问题

答案 4 :(得分:0)

这取决于几个因素。最重要的是您期望网站获得多少流量。

如果您的网站流量相当低(每天可能有1,000,000次网页浏览量 - 平均每秒11次),那应该没问题。您需要对此进行测试 - 使用HTTP基准测试工具并行运行大量请求,并查看您获得的结果类型。

请记住,您处理的并行请求越多,每个请求所需的时间就越长。重要的数字是在平均时间变得不可接受之前可以处理多少并行请求,以及处理请求的速率。

每天以1,000,000个观看为例 - 您希望每秒能够处理超过11个请求。可能至少有20个,至少10个并行请求。

您还希望使用代表性数据集对此进行测试。如果您期望拥有100页,那么将CMS与一个页面进行基准测试是没有意义的。做出最佳估计,加倍,并使用至少那么大的数据集进行测试。

只要你没有在你的代码中做一些愚蠢的事情,你可以做的最大改进就是缓存。如果确保设置了适当的缓存标头,则可以在Web服务器前放置一个反向代理(例如Squid)。 Squid将直接提供其缓存中的任何内容,使您的PHP应用程序只处理唯一或更新的页面请求。