在很多情况下,我用一些函数质疑PHP的性能,以及是否应该使用看似缓慢的工具构建一个复杂的类来处理特定的事情。
例如,具有sed
和awk
处理的复杂正则表达式似乎在性能上呈指数级,而不是使PHP的正则表达式和看似过多的函数解析并及时设法完成它。如果我要同时执行许多网络任务,例如MX查找/ DIGging /检索,我宁愿通过system()
传递它,让操作系统自己处理它。 PHP中的功能太多,效率低,导致页面速度慢或操作系统可以更轻松地处理。
你有什么看法?
您认为我应该在自己的/自定义功能中使用操作系统吗?
答案 0 :(得分:3)
系统调用通常比使用PHP内置的解决方案更快(尽管并不总是如此,因为PHP的函数本身是用C构建和编译的。许多PHP核心函数和扩展都非常快)。
除速度外,第二个因素是内存限制。外部调用的进程不会消耗PHP的每个脚本限制,例如,在处理大型文件时这可能很好。
此外,PHP本身并不提供某些功能。例如,完全无法在PHP中模仿ImageMagick的功能集。 GD库并不接近ImageMagick所提供的功能。
通过使用系统命令,您可以有效地消除可移植性,这是PHP的优点之一。将应用程序移动到另一台服务器会成为一个巨大的负担,因为外部命令的功能集需要相同 - 即使在不同的Linux发行版中也不总是如此,更不用说将OS边界跨越到Windows或Unix基于Mac OS。在这方面,我自己遇到过wget
和ImageMagick的问题,我相信还有更多。
如果您正在开发一个完全控制服务器环境的自定义应用程序(以及决定在未来五年内将购买哪种服务器),那可能不是问题。但是,如果您构建需要可移植的软件,那将是一个。
我个人倾向于削减一个功能(需要外部依赖)而不是丢失可移植性,但是,我正在进行非常多的便携式应用程序的构建。这真的取决于你的重点。
答案 1 :(得分:1)
即使系统进程速度更快,占用的内存也更少(这里必须进行广泛的测试),还有一点需要注意:
我对使用system()
调用时要谨慎,只有在控制脚本运行的硬件时才使用它。使用这些调用可能导致需要安装更多的软件/软件包,并且可能无法在所有操作系统上工作(相同的方式),因此如果您无法控制服务器,我会坚持使用PHP函数。
答案 2 :(得分:0)
我认为实际上会慢一点,因为每次调用这样的函数时,操作系统都会启动一个新进程,这很费时间。
答案 3 :(得分:0)
我想说如果你的程序打算在shell上执行使用其他外部程序,比如sed / awk就好了,因为shellcript也会过度使用外部程序,在shell上运行的php脚本就像一个shell脚本,只是用另一种语言。 但是,如果它是一个Web应用程序,最好在php中执行 - 大多数共享托管环境都不允许您从php脚本执行外部程序。
答案 4 :(得分:0)
(我的经验是“系统调用”通常是指调用内核操作 - 不调用其他程序 - “通过system()传递它并让操作系统处理它” - 你似乎认为相同 - 但没有一个你提到的程序是OS服务 - 它们只是其他程序。)
PHP本质上是一种脚本语言 - 它通常只是在其他程序之间移动数据的粘合剂,但需要考虑一些事项:
1)性能 - 分支新流程的计算成本可能很高
2)安全性 - 让您的网络服务器无限制地访问系统上的所有程序(甚至受权限约束)可能非常危险
3)请记住(2)大多数配置会阻止或限制你可以做的事情
4)对于大规模开发而言,这是相当危险的 - 让程序员用他们选择的任何语言编写代码,然后将PHP浏览到顶部意味着你最终会得到一个用许多不同语言编写的应用程序5)您可以非常轻松地编写自己的本机代码PHP扩展
如果我要做很多网络任务,例如MX查找/ DIGging /检索
虽然我可以相信使用awk / sed混搭大型数据集可能比本机PHP代码更快/更高效,但我发现使用不同的客户端更快地进行DNS查找有点令人惊讶。你是如何衡量这一点的?