Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用这个系统会更好吗';s函数而不是使用该语言?_Php_Linux_Performance_Operating System - Fatal编程技术网

Php 使用这个系统会更好吗';s函数而不是使用该语言?

Php 使用这个系统会更好吗';s函数而不是使用该语言?,php,linux,performance,operating-system,Php,Linux,Performance,Operating System,在很多情况下,我质疑PHP的一些函数的性能,以及是否应该使用看似缓慢的工具构建一个复杂的类来处理特定的事情 例如,使用sed和awk处理的复杂正则表达式的性能似乎是指数级的,而不是让PHP的正则表达式和似乎过多的函数解析并及时完成它。如果我要同时执行很多网络任务,比如MX查找/挖掘/检索,我宁愿通过system()传递它,让操作系统自己处理。PHP中的函数太多,效率低下,导致页面速度变慢,或者操作系统更容易处理 你的意见是什么 你认为我应该在操作系统自己的/自定义函数中完成这项艰巨的工作吗?系统

在很多情况下,我质疑PHP的一些函数的性能,以及是否应该使用看似缓慢的工具构建一个复杂的类来处理特定的事情

例如,使用
sed
awk
处理的复杂正则表达式的性能似乎是指数级的,而不是让PHP的正则表达式和似乎过多的函数解析并及时完成它。如果我要同时执行很多网络任务,比如MX查找/挖掘/检索,我宁愿通过
system()
传递它,让操作系统自己处理。PHP中的函数太多,效率低下,导致页面速度变慢,或者操作系统更容易处理

你的意见是什么


你认为我应该在操作系统自己的/自定义函数中完成这项艰巨的工作吗?

系统调用通常比使用PHP内置的解决方案更快(尽管这并不总是正确的,因为PHP函数本身是用C构建和编译的。许多PHP核心函数和扩展都非常快)

除了速度,第二个因素是内存限制。外部调用的进程不会蚕食PHP的每脚本限制,例如,在处理大型文件时,这一限制非常重要

此外,有些函数在PHP中根本不可用。例如,无法完全在PHP中模仿ImageMagick的功能集。GD库没有达到ImageMagick所能提供的水平

最大的缺点是,通过使用系统命令,可以有效地消除可移植性,而这正是PHP之美的一部分。将应用程序移动到不同的服务器会成为一个巨大的负担,因为外部命令的功能集需要相同——即使在不同的Linux发行版中也不总是如此,更不用说跨越操作系统边界进入基于Windows或Unix的Mac OS了。在这方面,我自己也遇到过与wget和ImageMagick有关的问题,我相信还有更多的问题

如果您正在开发一个完全控制服务器环境(以及决定在未来五年内购买何种服务器)的定制应用程序,那么这可能不是问题。不过,如果您构建的软件需要可移植,那么它将是一个


我个人倾向于删除一个特性(需要外部依赖),而不是失去可移植性,但是,我非常热衷于构建可移植应用程序。这真的取决于你的注意力。

我认为这实际上会更慢,因为每次你调用这样一个函数,操作系统都会启动一个新的进程,这是很耗时的。

我想说,如果您的程序打算使用其他外部程序(如sed/awk)在shell上执行,这是很好的,因为shell脚本也会过度使用外部程序,而在shell上运行的php脚本就像shell脚本一样,只是使用另一种语言。
但是,如果是web应用程序,最好在php中执行—大多数共享托管环境都不允许您从php脚本执行外部程序。

即使系统进程更快,占用的内存更少(这里必须进行大量测试),也要记住:

我会谨慎使用
system()
调用,并且只有在您控制脚本将在其上运行的硬件时才使用它。使用这些调用可能会导致需要安装更多的软件/软件包,并且可能无法(以相同的方式)在所有操作系统上运行,因此,如果您无法控制服务器,我将坚持使用PHP函数。

(我的经验是,“系统调用”通常指调用内核操作,而不是调用其他程序-“通过system()传递它)让操作系统来处理它”——你似乎也这么认为——但你提到的所有程序都不是操作系统服务——它们只是其他程序)

PHP本质上是一种脚本语言——传统上,它只是在其他程序之间移动数据的粘合剂,但需要考虑以下几点:

1) 性能-分叉一个新的进程可能在计算上很昂贵

2) 安全性-让您的Web服务器无限制地访问系统上的所有程序(甚至受权限限制)可能非常危险

3) 请记住(2)大多数配置都会阻止或限制您的操作

4) 对于大规模开发来说,这是相当危险的——让程序员用他们选择的任何语言编写代码,然后在上面略过PHP意味着您最终将得到一个用许多不同语言编写的应用程序

5) 您可以非常轻松地编写自己的本机代码PHP扩展

如果我要做很多网络任务,比如MX查找/挖掘/检索


虽然我相信使用awk/sed将大型数据集进行混搭可能比原生PHP代码更快/更有效,但我发现使用不同的客户端进行DNS查找会更快,这有点令人惊讶。您是如何衡量这一点的?

关于ImageMagick主题:查看PHP Imagick扩展开发人员的博客,了解一些很酷的示例: