首页 / 知识
关于php:在php5中使用内联字符串与串联的速度差异?
2023-04-12 08:45:00

Speed difference in using inline strings vs concatenation in php5?(假设php5)考虑
1和2之间有很大的区别吗? 如果不是,那介于1/2和3之间呢? 至少从2012年1月起,性能差异就没有关系了,并且可能更早:
PHP的早期版本可能有所不同-我个人更喜欢单引号而不是双引号,所以这是一个方便的区别。文章的结论很好地说明了这一点:
(尽管文章引用了这个短语,但最初的讽刺可能是错误地归因于温斯顿·丘吉尔(Winston Churchill),这是约瑟夫·戈培尔(Joseph Goebbels)的宣传部将丘吉尔描绘成骗子的发明:
这大致可以解释为:"我不相信我没有伪造自己的统计数据。") 好吧,就像所有"现实生活中可能更快"的问题一样,您无法击败现实生活中的考验。
进行几次运行以分页显示所有内容,然后... 0.0035568 0.0035388 0.0025394 因此,正如预期的那样,插值实际上是相同的(噪声级别差异,可能是由于插值引擎需要处理的额外字符)。直接串联的速度约为速度的66%,这并不是很大的冲击。插值分析器将查找,无所事事,然后以简单的内部字符串concat完成。即使concat非常昂贵,在完成所有工作以解析出变量并修剪/复制原始字符串之后,插值器仍将必须这样做。 Somnath更新: 我将Method4()添加到上述实时逻辑中。
当您只声明一个字符串而又不需要解析该字符串时,为什么还要混淆PHP调试器来解析。我希望你明白我的意思。 实时基准测试: http://phpbench.com/ 将变量用单引号和双引号连接时,实际上存在细微的差别。 @Adam的测试使用
请注意,以下速度更快:
这是由于以下事实:对双引号的"字符串"进行了评估,其中单引号的"字符串"按原样被使用... 不要太着迷于尝试优化PHP中的字符串操作。如果您的数据库查询写得不好或者您没有使用任何类型的缓存方案,那么串联与插值之间就没有意义了(在现实世界中的表现)。以这样的方式编写字符串操作,以便以后调试代码变得容易,而性能差异可以忽略不计。 @uberfuzzy假设这只是有关语言细节的问题,我想这很好。我只是想增加一种对话,即与真实的性能接收器(例如不良的数据库查询)相比,在现实应用程序中比较单引号,双引号和heredoc之间的性能毫无意义。 执行时间的任何差异都可以忽略不计。 请参见
不要在这种微优化上浪费时间。使用探查器在现实情况下测量应用程序的性能,然后优化实际需要的位置。与在整个代码中应用微优化相比,优化单个草率的数据库查询可能会带来更大的性能改进。 连接变量之间的区别...以及您对结果进行的操作...以及如果您正在执行的操作是将其转储到输出,则输出缓冲是否存在。 另外,服务器的内存状况如何?通常,较高级别平台上的内存管理要比较低平台上的内存管理差。
正在用户代码平台级别管理内存...
正在php系统代码平台级别管理内存... 因此,这些与CPU相关的基准测试无法说明全部情况。 在尝试同时运行同一模拟1000次的服务器上运行1000次基准测试与运行1000次基准测试...根据应用程序的范围,您可能会获得截然不同的结果。 我似乎还记得论坛软件的开发人员Vanilla用单引号替换了他代码中的所有双引号,并注意到性能有合理的提高。 不过,我目前似乎无法找到该讨论的链接。 双引号可能会慢很多。我从几个地方读到,这样做更好
比
尽管我会说第二个代码为您提供了更具可读性的代码。 如果要在双引号字符串语法中使用变量,则只需添加其他内容即可:
比...快
而这两个都比
应该注意的是,当使用Adam Wright的示例的修改版本并带有3个变量时,结果将相反,并且前两个函数实际上始终一致地更快。这是CLI上的PHP 7.1:
我也尝试过用" 3"代替整数3,但是得到的结果却是相同的。 $ bas = 3:
随着$ bas ='3':
应该注意的是,这些结果变化很大(我得到的变化约为300%),但平均值似乎相对稳定,几乎(10个案例中的9个)始终显示出对于前两种方法的执行速度更快,其中方法2始终为比方法1快一点 结论:1个单一操作(插值或串联)的正确性对组合操作并不总是正确的。 几乎没有任何区别!查看时间:http://micro-optimization.com/single-vs-double-quotes |
最新内容
相关内容
python如何检测字符串是不是全为字
python如何检测字符串是不是全为字母?,检测,培训,字符串,字母,方法,字符,示例,语法,以上,更多,python中可以使用isalpha()方法检测字符串是不Python文件如何转换为字符串
Python文件如何转换为字符串,数据,主体,名字,培训,文件,字符串,末尾,方法,对象,语句,python文件如何转换为字符串的方法:一、最方便的方法是一python中字符串怎么转换成int
python中字符串怎么转换成int,情况,培训,字符串,浮点,错误,类型,不是,臣妾,字面,函数,将字符串转换成,整型,从字面理解很容易让人误会。比如,要python怎样计算输入的字符串的长度
python怎样计算输入的字符串的长度,培训,字符串,长度,字典,函数,列表,空格,语法,字符,实例,python中的字符串。可以使用len()函数来计算长度,python如何截断字符串
python如何截断字符串,培训,位置,字符,字符串,索引,倒数,依此类推,方括号,后面,表示,字符串本质上就是由多个字符组成的,Python允许通过索引来python字符串怎么替换
python字符串怎么替换,培训,字符串,参数,函数,方法,使用方法,语法,实例,以上,以下,python中的字符串替换,主要是使用replace()函数。replace()python是否支持字符串
python是否支持字符串,培训,数据,字符串,字符,引号,中文,内容,也就是,源程序,比如说,python要求,字符串必须使用引号括起来,可以使用单引号或者python字符串如何定义
python字符串如何定义,培训,数据,字符串,字符,引号,中文,内容,定义,源程序,比如说,简单地理解,字符串就是“一串字符”,也就是用引号内的任何数python字符串代表什么
python字符串代表什么,培训,数字,字符串,字符,代表,斜线,引号,中文,中间,后面,python的字符串就是表示一串字符,字符可以是中文,英文或者数字,或python字符串切片的方法是什么
python字符串切片的方法是什么,培训,字符串,索引,切片,开头,方括号,时候,方法,冒号,首尾,获取Python字符串中的某字符可以使用索引:lang=pythopython怎么查找字符串中是否包含某
python怎么查找字符串中是否包含某个字符串,培训,检测,位置,字符串,范围内,模块,索引,范围,以上,结束,python判断一个字符串是否包含另一个字python怎么样将字符串转换字符
python怎么样将字符串转换字符,培训,字符串,字符,元素,索引,以上,更多,内容,列表,python中一个字符串也可以看成是一个列表,字符串中的每个元