在检查了我的代码后,我发现为什么加载愿望需要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将其发送到谷歌。然后将谷歌翻译的文本发送到speak,然后我的程序匹配它并相应地执行命令,例如打开收音机。
我如何才能让它更快、更好或更高效我真的想要一个快速的页面加载时间我也在使用lighttpd。
p.S如果没有这部分代码,我的页面将在352ms内加载。
外壳代码也是
#!/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'
我想是"speechdetect.sh"脚本花了很多时间。因此,如果可能的话,您应该尝试优化shell脚本。无论如何,它都会很慢,因为你必须远程连接到谷歌,上传数据,谷歌需要一些时间来处理数据,然后需要一些时间才能将其发送回你。
这些因素包括:带宽、延迟、谷歌处理数据的性能。
你能做的最好的事情就是让等待变得更愉快。在iframe中执行脚本,或者在可能的情况下通过AJAX加载脚本,并显示某种加载指示器,以便用户知道发生了什么
编辑:
好吧,也许ffmpeg是罪魁祸首,因为ffmpeg可能非常慢——它在启动时加载了很多代码。
试试这个测试你的脚本:
测量脚本实际消耗的时间
从外壳开始,如下所示:
time ./speechdetect.sh uploads/voice.3gp > speech.results
这应该输出类似于:
real 0m1.005s
user 0m0.000s
sys 0m0.008s
实际部分是实际执行时间(在本例中为1.005秒)。欲了解更多信息,请查看手册页
在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";
// ....
获取更多详细信息,无论上传到谷歌还是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 的调用
最好的办法是找到一些工具在本地进行语音检测。你可能无法加快与谷歌的连接速度,也无法改变谷歌引擎的工作速度。
这取决于文件的大小和上传连接的速度。它可能不会再快了。