我不太确定它是否更适合放在这里还是在 ServerFault 上,所以如果需要,请随意移动它。我只是将其发布在这里,因为我认为它与 PHP 程序员高度相关,并且更多的人可能能够帮助我。
我在 Ubuntu 下的 apache 服务器上运行 PHP 应用程序。几天前,我查看了
phpinfo()
,发现我只使用了大多数已安装和启用的扩展中的一小部分。未使用的扩展列表很大(我需要其中一些扩展的可能性很小,但如果需要的话,很容易确定和启用)。因此,除了其他事情之外,还有(对这些事情的作用的解释是近似的。找到精确的描述非常容易):
如您所见,这个列表非常庞大。我使用 Mongo 作为存储,与服务器的所有通信都是通过 ajax (JSON),所以我非常怀疑我现在或不久的将来是否需要 XML/Dba/SOAP/ftp。
因此,在尝试一一禁用它们并检查我的应用程序是否仍然有效之前,我想问:禁用它们有意义吗?我知道从 apache 禁用不需要的模块可以合理提高服务器的生产力,但我还没有发现任何关于 PHP 的此类正常测试/计算。
所以我的问题可以这样更好地表述:是否有人做过一些测试来找出禁用/删除不需要的模块(速度、内存消耗等)我会获得哪些改进。请不要发布诸如“确保它有意义 - 删除它们”或“不要删除 - 你可能会破坏某些东西”之类的内容,甚至引用“过早优化是......”。
不是真的。
禁用模块只会减少每个 Apache+PHP 实例的占用空间。这确实可以给你带来提升,但仅限于高负载/交通繁忙的情况下。只要进程启动/上下文切换不是主要瓶颈,您就可以安全地启用所有模块。
然后又...
一个非常明显的例外是 xdebug。它并不是一个真正的模块,但如果你保留它,每个请求将花费你大约 200-400 毫秒。数字很大,特别是自从谷歌开始奖励速度更快的网站以来。生产环境中必须关闭调试器和配置文件。
禁用未使用的扩展的一个很好的理由是为了安全性和合规性。如果未启用的扩展程序出现漏洞,您不必担心。
想象一个场景,攻击者设法上传恶意文件,但想要利用扩展来获得服务器的管理员或根访问权限。即使他们将该坏文件发送到您的服务器上,带有漏洞的禁用扩展也无法被利用,并且他们对服务器不同部分的访问现在受到限制。
当然。如果您加载不使用的东西,那就是浪费。虽然在很多情况下您可能没有注意到这一点,但一旦您获得一个稍微活跃的网站,您就会注意到这种影响!
但是要注意:如果你要通过删除不必要的东西来进行优化,那么使用像 jQuery 这样的库可能是虚伪的,除非你使用它提供的每一个功能;)这是我不使用 jQuery 而是编写的主要原因之一我自己的“精确”工具可以完全满足我的需求,仅此而已。我的用户已经注意到了差异!不要低估删除多余元素的力量!