我正在使用php / mysql编写的网站上工作。当我第一次写这篇文章的时候,它是用html等嵌入了大量php的意大利面 - 非常难以维护。
我用OOPS重写了一个很好的模块化结构,现在它更容易维护和扩展。但是在使用webwait和siege测试网站性能时,较新的,结构更好的版本似乎比意大利面条代码版本运行和加载速度慢。
装载时间差异接近1秒 - 2.39秒vs 3.81秒
除了PHP代码之外没有其他任何改变 - 不是js,而不是css
那么这里有什么问题?我应该恢复旧代码吗?这是否发生在其他人身上?
编辑:
我想知道的是别人如何处理这个问题。
答案 0 :(得分:14)
“我应该恢复旧代码吗?”
如果我说恢复,你会说“看,我知道OO是一个被炸的单位,没有人可以制作一个有效的OO应用程序。”那是错误的。
如果我说不回复,你会说,“但它的速度慢得令人无法接受。”
那么,还剩下什么?
您必须将其写为更好。直走。重写你的OO,以便它真正起作用。 OO不是“魔术” - 它不保证任何东西。有糟糕的面向对象程序和良好的面向对象程序。在你的情况下,你显然还有改进的余地。
因此,请获取一些性能分析工具,找出时间已经过去的地方。
另外,不要“优化” - 重写。
你可能会花费大量时间进行某种搜索,这种情况非常好。消除搜索。使用更好的容器和集合(哈希映射,集合等)
答案 1 :(得分:6)
配置代码。我不知道如何在PHP中做到这一点,但这是解决正在发生的事情的唯一合理方法。
有时使代码更优雅会对性能产生不利影响,但通常不会达到这种程度。你需要找出时间在哪里,并解决这个问题。
答案 2 :(得分:1)
There's a difference of nearly 1 second in loading time - 2.39s vs 3.81s
这是3.81-2.39 = 1.42s的差异,超过了较小值的50%,因此我认为这不是一个小数字。您是否多次运行测试以使初始编译/解释成本正确摊销?您是否考虑过尝试引入计时器以查看比以前有更多时间的计时器?这些将是我的建议,因为你似乎已经引入了很多抽象,现在看到了它的价格。
答案 3 :(得分:1)
尝试设置Xdebug并查看它可以告诉您的内容。其他人提到你应该用分析器检查出来。我同意,Xdebug可以为您提供一个以及其他一些有用的功能。您选择的IDE甚至可以与Xdebug集成。
答案 4 :(得分:1)
我可以考虑几点要考虑:
最重要的是,通常显然适用(你可以优化算法,启用缓存或预编译等等 - 但是虽然这些可能有很大帮助,但它们并不特定于OOP)
答案 5 :(得分:0)
要考虑的一件事是:您使用的是APC还是其他一些PHP操作码缓存解决方案?如果没有,每次加载页面时都会从头开始重新解释所有代码。这肯定会影响性能。
答案 6 :(得分:0)
OOP意味着很多函数调用,而动态语言中的函数调用很慢。 因此,将旧代码“翻译”为OOP版本会降低其速度。做一个完整的重写。