在我的工作场所,我们正在计划对我们的核心产品进行重大改造,这是一个带有多个“模块”的Web应用程序。我引用了这一点,因为这是我们主要关注的问题之一:模块不是真正的模块,整个事情是单片的。该应用程序使用PHP编写,具有智能模板并使用Pear访问MySQL数据库。我们并不真正关心数据库的独立性,尽管如果不花费数月的时间来实现它会很好。
我们主要担心的是开发时间/成本呈指数级增长,因为错误在不相关的地方突然出现,并且没有合理的通用架构来依赖于获得最常见的功能(每个模块基本上都是复制/粘贴的。一,然后适应)。
我对web MVC原则有一些经验,主要是在ASP.NET MVC中。我喜欢它提供的清洁分离和可测试性。但是,在本地计算机上尝试此操作时,应用程序的速度应该比它应该慢得多。
好的,足够的介绍,关于问题: - 我应该依赖缓存模块吗?这是否使用良好的架构提供了大部分开销?像APC这样的东西。
棘手的部分是我们没有能够完全重写的奢侈。我们必须逐步改进目前非常混乱的代码库。这必须在编写新代码或修复错误时完成。我真正想要做的一件事就是在修复之前为新bug写一个回归测试,以防止它在以后再次出现(偶尔会发生这种情况)。
我正在考虑的堆栈包含:
让我担心的主要问题是在PHP中创建干净代码的性能影响。看到它是一种与.NET / Java Web堆栈相对的解析语言,为其他内联代码创建抽象(在不同文件中强制分离)可能会在另一个层面上产生新问题。
注意:如果您想出更合适的标签,请重新标记,我不确定当前标签。
答案 0 :(得分:3)
通常,设置干净并不是性能问题。大多数性能都花费在您正在与之交谈的数据库或其他外部系统上。
除了这些通常有一两个热点可能值得优化,但为此你应该从干净的设计开始,然后使用分析器(如XDebug或ZendDebugger)来识别瓶颈。
通过“优化”设计,干净的软件设计比0.01%的性能提升更为重要。通常,购买和运行更多硬件的成本甚至比担心无法维护的“优化”代码库更便宜。
答案 1 :(得分:2)
我强调预算编制时间,并给管理层提供以下论据:
不要糖衣大衣测试会花多长时间;无论是1%的时间还是50%,都要直接告诉经理,但强调建立自动化测试作为安全网会阻止用户遇到很多错误,并且会为开发人员节省开发时间而不是错误修正。 / p>
答案 2 :(得分:2)
就使用意大利面条代码组件管理MVC组件而言,我们遇到了与大型项目类似的问题。什么运作良好只是采取一个目录,并使其成为MVC应用程序的新docroot(在我们的案例中为Zend Framework),以便:
旧部分:
http://site.com/data.php
http://site.com/other.php
新部分: http://site.com/app/controller/action/ ...
重新验证,您有几个选择。最合乎逻辑的是将login.php脚本重定向到MVC登录,然后将其传递回原始页面,并将其作为GET参数传递给必要的信息。这将允许旧系统和新系统同时且透明地存在。
再慢,在我拿出XDebug之前,我会尝试隔离一个有问题的部分,只需输出所需的时间。恕我直言。
答案 3 :(得分:1)
在数据库驱动的Web应用程序中,结构良好的面向对象代码的性能要比sapghetti php代码差得多。您需要进行一些分析以找出瓶颈所在并进行相应优化。
答案 4 :(得分:0)
你确实有一个艰难的(但并非罕见的)情况。
至于组织代码以尽量减少错误,我所能给出的只是DRY上限的一小部分。
对于性能问题,这些很容易找到,因为它们非常缓慢地向您显示by this technique。