如何让我的脚本更快。一部分单独需要3秒

时间:2013-02-09 12:06:19

标签: php lighttpd

检查完我的代码后,我发现为什么需要7秒才能加载希望是痛苦的。

$target_path = "uploads/";
exec("./speechdetect.sh uploads/voice.3gp > speech.results");
$myFile = "uploads/voice.3gp";
unlink($myFile);
$myFile = "voice.flac";
unlink($myFile);
$target_path = $target_path . basename( $_FILES['uploadedfile']['name']); 

我的脚本进行录音,然后通过speechdetect.sh将其发送到谷歌。然后用google搜索的文本说出发言然后我的程序匹配它并相应地执行命令,如无线电开启。

如何让这个更快更好或更高效我真的想要一个快速的页面加载时间我也使用lighttpd。

P.S没有这部分代码,我的页面加载时间为352毫秒。

shell代码也是

#!/bin/bash
sudo rm voice.flac 
# FLAC encoded example
ffmpeg -i $1 voice.flac
curl \
  --data-binary @voice.flac \
  --header 'Content-type: audio/x-flac; rate=8000' \
  'https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&pfilter=0&lang=en-GB&maxresults=1'

3 个答案:

答案 0 :(得分:2)

我猜这是“speechdetect.sh”脚本需要花费很多时间。因此,如果可能,您应该尝试优化shell脚本。它无论如何都会很慢,因为你必须远程连接谷歌,上传数据,谷歌需要一些时间来处理数据,然后需要一些时间将它发回给你。

因素包括:带宽,延迟,谷歌在处理数据方面的表现。

你能做的最好的事情就是让等待更多。在iframe中执行脚本,或者如果可能的话通过AJAX加载它并显示某种加载指示符,以便用户知道正在发生的事情。

编辑:

好吧,也许ffmpeg应该受到责备,因为ffmpeg可能非常慢 - 它在启动时会加载很多代码。

尝试此操作来对您的脚本进行基准测试:

衡量脚本实际消耗的时间。

从shell开始,如下所示:

time ./speechdetect.sh uploads/voice.3gp > speech.results

这应该输出如下内容:

real    0m1.005s
user    0m0.000s
sys     0m0.008s

实部是实际执行时间(本例中为1.005秒)。有关详细信息,请查看man page

在您的php脚本中制作一个简单的基准

$target_path = "uploads/";

$time_start = microtime(true);
exec("./speechdetect.sh uploads/voice.3gp > speech.results");
$time_end = microtime(true);

$time = $time_end - $time_start;
echo "Time elapsed: " . $time . " seconds";
// ....

获取有关上传到Google或ffmpeg是否消耗时间的详细信息:

修改shell脚本(添加时间):

#!/bin/bash
sudo rm voice.flac 
# FLAC encoded example
time ffmpeg -i $1 voice.flac
time curl \
  --data-binary @voice.flac \
  --header 'Content-type: audio/x-flac; rate=8000' \
  'https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&pfilter=0&lang=en-GB&maxresults=1'

运行它:./speechdetect.sh uploads/voice.3gp(不重定向输出)

第一次显示的基准是ffmpeg,而第二次是来自curl的调用

答案 1 :(得分:1)

最好的办法是找一些在本地进行语音检测的工具。您可能无法加快与Google的连接速度或更改Google引擎的工作速度。

答案 2 :(得分:0)

这取决于文件的大小以及上传连接的速度。 它可能不会更快。