3

在我的工作场所,我们正在计划对我们的核心产品进行重大重构,这是一个具有多个“模块”的 Web 应用程序。我引用了这一点,因为这是我们的主要关注点之一:模块并不是真正的模块,整个事情都是单片的。该应用程序是用 PHP 编写的,带有 smarty 模板,并使用 Pear 来访问 MySQL 数据库。我们并不真正关心数据库的独立性,尽管如果这不需要几个月的时间来实现就好了。

我们主要担心的是开发时间/成本呈指数级增长,因为在不相关的地方会出现错误,并且没有可靠的通用架构来依赖以获得最常见的功能(每个模块基本上都是从前一个模块复制/粘贴,然后适应)。

我对 web MVC 原理有一些经验,主要是在 ASP.NET MVC 方面。我喜欢它提供的清晰分离和可测试性。然而,当在本地机器上尝试这个时,应用程序比它应该的要慢很多。

好的,足够的介绍,关于问题: - 我应该依赖缓存模块吗?这是否消除了使用良好架构提供的大部分开销?APC之类的东西。

  • 该应用程序主要是阅读。写入主要是单个值(更改记录上的单个字段)。任何擅长于此的 PHP 的 OR/M 吗?
  • 也在寻找一个灵活的 MVC 框架。我知道 Zend、CakePHP,也许还有 Symfony?

棘手的部分是我们没有能力进行完全重写。我们将不得不逐步改进当前非常混乱的代码库。这必须在编写新代码或修复错误时完成。我真的非常喜欢能够做的一件事是在修复它之前为一个新错误编写一个回归测试,以防止它以后再次弹出(这种情况偶尔会发生)。

我目前正在考虑的堆栈包含:

  • 选择的 MVC 框架
  • 日志记录(log4php?)
  • 选择的 OR/M(不必是动态的,代码生成也可以)
  • 选择的 IoC 容器
  • Smarty 模板,也许是抽象的,所以我们可以在需要时将其切换出来。
  • 选择的操作码缓存(我们现在正在使用一个,忘记了哪个,必须询问系统管理员)

让我担心的主要一点是在 PHP 中创建干净的代码对性能的影响。看到它是一种与 .NET/Java Web 堆栈相反的解析语言,为其他内联代码创建抽象(在不同文件中强制分离)可能会在另一个层面上产生新问题。


注意:如果您想出更合适的标签,请重新标记,我不确定当前的标签。

4

5 回答 5

3

通常,干净的设置不是性能问题。大多数性能都用于数据库或您正在与之交谈的其他外部系统。

除了这些之外,通常还有一两个热点可能值得优化,但为此您应该从干净的设计开始,然后使用分析器(如 XDebug 或 ZendDebugger)来识别瓶颈。

干净的软件设计比“优化”设计带来的 0.01% 性能提升更重要。通常,购买和运行更多硬件比担心无法维护的“优化”代码库更便宜。

于 2009-11-27T14:59:50.553 回答
2

我会强调预算时间来构建测试,并向管理层提出以下论点:

  1. 当开发人员修复错误时,允许他们为错误编写测试。错误再次出现的频率比它们应该的要高得多,这是一种完全阻止这种情况的廉价而有效的方法。
  2. 当开发人员构建新功能时,允许他们在其下编写测试。由于他们当时完全熟悉该功能,因此这是构建自动化测试“安全网” 的最便宜的时间。

不要胡说八道,测试需要多长时间;无论是 1% 还是 50% 的时间,直接告诉经理,但强调构建自动化测试作为安全网将阻止用户遇到尽可能多的错误,并将节省开发人员用于新开发而不是修复错误的时间。

于 2009-11-27T15:43:53.163 回答
2

至于使用意大利面条代码组件管理 MVC 组件,我们在大型项目中遇到了类似的问题。行之有效的只是获取一个目录并将其创建为 MVC 应用程序(在我们的例子中是 Zend 框架)的新 docroot,这样:

旧部分: http:
//site.com/data.php
http://site.com/other.php

新部分: http ://site.com/app/controller/action/ ...

重新认证,你有几个选择。最合乎逻辑的可能是将您的 login.php 脚本重定向到 MVC 登录,然后将其传递回您想要使用作为 GET 参数传递的必要信息的原始页面。这将允许旧系统和新系统同时且透明地存在。

再慢一点,在我退出 XDebug 之前,我会尝试隔离有问题的部分并只输出它所花费的时间。更快的恕我直言。

于 2009-11-28T16:48:24.803 回答
1

在数据库驱动的 Web 应用程序中,结构良好的面向对象代码的性能应该比 sapghetti php 代码差得多,这没有任何充分的理由。您需要进行一些分析以找到瓶颈所在并相应地进行优化。

于 2009-11-27T15:00:21.223 回答
0

你确实有一个艰难的(但并不罕见)的情况。

至于组织代码以最大程度地减少错误,我所能提供的只是 DRY 的一小部分。

对于性能问题,这些很容易找到,因为它们的速度非常慢,通过这种技术向您展示了它们。

于 2009-11-27T15:35:51.577 回答