1

在我的应用程序开发中,我们安装了 ZFDebug。它在工具栏中显示基准测试结果,例如加载时间和内存使用情况,我觉得这非常有用。

我的应用程序平均使用大约 19000k 内存。

该应用程序使用 Doctrine 2 和 DQL 创建配置文件和主页提要结果。填充结果后,内存使用量可能高达 22000k 内存。

该应用程序还具有加载资源的复杂模块化结构,例如 javascript 库和其他使用插件的外部库。

就目前而言,我们还没有实现 Zend_Cache 进行优化。

我对如何使用这些基准测试结果进行应用程序优化有点困惑。我应该如何判断内存使用是否可以接受?例如,典型的 zend 框架应用程序内存使用情况是什么?

4

1 回答 1

1

哦,美好的旧时光。那也是我的问题。

我从 2007 年开始使用 ZF。内存使用一直是 ZF 的问题。对于 ZF 中的简单 MVC,16-17M 是“正常的”。如果你添加 Doctrine,它会上升到 20M - 就像你说的那样。

首先,在您的服务器上安装 APC。这是最重要的事情,因为即使在默认设置下它也能加速一切。测量页面加载时间。在 APC 之后,您将至少获得 30% 的性能。

之后使用 Zend_Cache 和 APC 后端。Doctrine 允许缓存查询、结果和水合。也可以将它们与 APC 一起使用。

我看到你正在使用 ZFDebug。分析 Doctrine 查询并对其进行优化。在适当的地方添加索引。

我总是站在“可管理性优于性能”的一边。是的,采埃孚很慢。是的,Doctrine 让它变慢了。但是我的项目的规模需要使用框架和 ORM 以及依赖注入容器 ETC。所有这些都使我能够快速开发项目。

我是Gazi 大学网页的开发者。自去年以来,我尝试将静态网页转换为我们所有学术和行政单位的 CMS。例如iibf.gazi.edu.trbidb.gazi.edu.tr使用相同的模板、相同的 CMS 和相同的数据库,但所有站点都有自己的子域。

哦,男孩,网站“上线”的那一天,我快死了。页面加载时间为 15 秒。15 秒。谷歌网站管理员工具说我比整个互联网慢。每个人都有超时。VM 的所有内核都以 100% 的速度工作。我什至无法通过 SSH 连接到机器!

页面上的每一部分都可以通过 CMS 管理界面进行控制(如果您可以登录到管理区域:D)。顶部的蓝色菜单?来自 CMS。消息?来自 CMS。公告?来自 CMS。快速链接区?来自 CMS。带有图标的快速链接?来自 CMS。甚至 twitter/facebook/youtube 链接都来自 DB,因为每个部门的链接都不同。

真正奇怪的部分是什么?我正在使用缓存!我正在缓存我在上一段中计算的每个部分。

现在?谷歌分析网站速度图在 1.5 秒内持平。谷歌网站管理员工具说我比互联网上 91% 的网站都快。该网站每天有 6 万访问者。

这是您可以做的一些事情的列表。但不要一次做所有事情。做一件事。测量新指标并迭代:

  1. 配置您的页面。查看哪些代码会减慢页面速度。使用 Xdebug 和 CacheGrind。例如,如果您正在使用 Zend View 部分......只是不要使用它。使用 $this->render()。但是在你测量它之前,你无法知道是什么让你放慢了速度。做剖析!

  2. 使用操作码缓存。正如我所说,APC 对于操作码缓存很酷。优化它。例如,禁用 apc.stat 设置,它会加快速度。(stat 检查文件是否在第一次缓存后发生更改,但它需要磁盘搜索并减慢速度。如果禁用此设置,速度会加快。但您必须在更改 PHP 文件后重新启动 PHP)

  3. 数据库是另一个缓慢的东西。缓存结果集。没有人关心新闻条目在插入数据库后是否会延迟 1 分钟。相信我,即使是 1 分钟的缓存也会有所作为。

  4. 使用 CDN 或至少配置您的 Web 服务器以设置静态内容的过期时间 +1 年。并从静态内容中删除会话 ID。静态内容需要 +1 年。去做吧。例如,我们有一个 620x327 jpg 横幅,它是我们总页面重量的 %20。

  5. 了解您的网络堆栈的设置。配置 MySQL、Apache、PHP、PHP-FPM、Apache、Nginx 或任何你使用的东西。但是一次更改一个设置并测试至少 100 次。某些设置在第一次刷新时不会产生问题。

  6. 跟踪您的指标。使用 strace、top、iostat、vmstat、htop 等。如果 mysql 总是使用 CPU 周期,则意味着您没有缓存查询结果。

  7. 删除未使用的模块:删除 !#@$ LDAP 模块!你没有使用它。如果有一天你需要使用它,它一个“apt-get”,“yun install”就可以了。

  8. 您的主页是最重要的。真实故事:我们的主页每月获得 200 万次浏览。下一个访问量最大的页面只有 420k。为您的主页使用“整页缓存”。但是不要忘记您不能使整页缓存无效,因为它是基于 URL 的,甚至不会触及您的 MVC 堆栈。正如我之前所说,将其缓存 1 分钟。即使是 1 分钟,对于高流量的网站也会产生巨大的影响。

  9. 将尽可能多的工作推送到客户的计算机上。Google 不关心我们医学院实验室的 620x327 px jpg。甚至我们的访客也不在乎。在使用 AJAX 加载页面后加载它们。

这就是我能从我的经历中记住的一切。

于 2012-06-09T22:17:32.560 回答