【问题标题】:PHP - Does 1 vs true, 0 vs false or verbosity of variable names affect performance?PHP - 1 vs true,0 vs false或变量名的冗长是否会影响性能?
【发布时间】:2013-07-24 14:02:20
【问题描述】:

我目前正在开发一个字段级 ACL 功能,该功能将被大量使用。

每个数据字段在被渲染之前都要经过这个函数。

因此,性能是此功能的关键问题

  • 我使用 1 vs true 还是 0 vs false 是否重要?

    (我知道这些不是 100% 等效的,我只是想知道性能影响)

  • 我是否可以通过更改变量名称的详细程度来获得任何性能?

  • ?:; 而不是 if else 这样的简写有什么影响吗?

    if($x){ $x; } else { $y; }  VS  $x?$x:$y;
    

通常我会尽量保持代码的可读性,但这是一种异常情况。

我想从这个函数中榨取每一毫秒的性能。

此外,我们将不胜感激任何指向比较类似 PHP 函数性能的页面的链接。

【问题讨论】:

  • 如果您真的想挤出最后一点性能:writing a php extension in C isn't that hard 并且可能会带来巨大的性能优势。
  • 我很好奇这个问题的背景是什么……这比实际问题更有趣,因为我认为 99.9% 的情况无关紧要。
  • 一些背景知识:过去两年我一直在开发一个 24/7 自动生成代码的框架。它将约定优于配置的概念提升到了另一个层次。基本上我的应用程序现在可以学习了。它为管理和前端 Web MVC 以及通过 REST 接口的跨平台手机和平板电脑应用程序生成代码。核心系统功能是 100% 访问控制,管理员可以在页面、行、列和字段级别设置访问权限。这适用于用户和用户组。所有对数据的访问都必须在返回之前通过核心 acl 函数。

标签: php performance verbosity


【解决方案1】:

我怀疑 1 vs true 和 0 vs false 有任何明显的性能影响,但如果你想确定你应该创建一个基准。

变量名称长度不应该有任何区别。编译器在解析脚本时将它们全部转换为内部指针。

简写符号也不应该有太大区别,编译器应该为两者生成相似的代码。

您的担忧似乎都是基于代码被逐行解释的假设。 PHP 是编译的,而不是解释的。

【讨论】:

  • 没有加速器(尤其是在性能关键的情况下,不使用加速器会非常愚蠢)脚本的运行时间 = 解析时间 + 执行时间。长变量和一般代码冗长会影响解析时间,但不会影响执行时间。
  • @fvu 但是解析是脚本执行开始时的一次性动作。如果性能是一个问题,那可能是在大循环中运行的代码中。与循环的执行时间相比,初始解析时间可以忽略不计。
  • 应该首先说我已经从该功能中获得了惊人的速度和性能。这实际上比其他任何事情都更令人好奇。由于 true 和 false 是 4 个字符串,而 1 和 0 是 1 个字符的 bool 值,我认为它可能对 ram 的分配方式有一些小的影响。鉴于该功能正在执行几次 1000 次。当我有更多时间并发布结果时,将在周末运行几个基准测试。
  • true 不是字符串,"true" 是。程序解析后,truefalse在内部分别表示为1和0。
【解决方案2】:

这些事项都不会影响性能。

您在寻找提高性能的方法非常错误。

【讨论】:

  • 谢谢,实际上我的表现已经非常出色了。我只是在这一功能上力求 100% 完美。在其他任何地方都找不到正在讨论的主题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
  • 1970-01-01
  • 2017-07-09
  • 2011-08-11
  • 1970-01-01
相关资源
最近更新 更多