【问题标题】:In php, when will a inline <script> be resolved?在 php 中,内联 <script> 什么时候会被解析?
【发布时间】:2016-04-14 07:34:58
【问题描述】:

我尝试调试我的慢速 php 脚本,向多个数据库和多个表提交查询,创建一个结果页面。

在我在开始时这样输入的php脚本中:

echo '<script>console.log("Start ",Date.now());</script>';

取自How can I write to console in PHP?

和php脚本末尾类似。

但由于我需要 30 秒到 1 分钟才能获得结果页面,因此在 firebug 控制台中打印的脚本从开始到结束的时间差不到一秒。

像这样:

开始1460618023753

结束1460618023923

所以我认为我在实际运行这些内联时误解了。

有人可以解释为什么会这样吗?也许建议我原则上如何调试我的 php 代码的慢速部分?

【问题讨论】:

  • 从php只是一个字符串的角度来看,php根本不会执行那个。那就是javascript,它在客户端上执行(如果有的话)。
  • 对于调试性能问题,您可以查看分析器,也许是 xdebug 提供的一个。不过,使用起来并非易事。一个更容易使用的替代方法是 phps tick 功能:php.net/manual/de/function.register-tick-function.php 您可以使用它来输出一个简单的字符串,例如某个日志文件的时间戳。这会产生一个已采取的步骤列表。您应该能够发现代码的哪一部分需要这么长时间。
  • php 先在服务器上编译,直到 html 输出到浏览器才运行 javascript。这就是为什么您的 javascript 之间没有时差的原因。您需要在 php 中获取时间,即。将 Date.now() 更改为 php 的 time() -> echo '&lt;script&gt;console.log("Start ",'.time().');&lt;/script&gt;'; 将在执行 php 时显示。
  • 啊,谢谢 arkascha 和肖恩。现在我明白我得到的时间了。

标签: javascript php performance debugging


【解决方案1】:

要在 php 中测量时间,您需要使用 php 代码。

在开始运行时:

$start = time();

最终使用

$duration = time() - $start;
echo '<script>console.log("Duration ",' . $duration . ');</script>';

你也可以回显开始和结束但你需要使用php时间:

echo '<script>console.log("Start ",' . time() . ');</script>';

echo '<script>console.log("End ",' . time() . ');</script>';

【讨论】:

    猜你喜欢
    • 2020-07-14
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    相关资源
    最近更新 更多