我正在评估HipHop-PHP在我们的代码库上的兼容性和性能,但是在启用内置Web服务器的情况下运行时,我的性能非常差.
我有以下样本测试程序来计算Fibonacci序列.
ex3.php:
function fib($n)
{
if ($n <= 2)
return 1;
else
return fib($n-1) + fib($n-2);
}
$n = 36;
printf("fib(%d) = %d\n", $n, fib($n, 2));
Run Code Online (Sandbox Code Playgroud)
当我使用命令行通过HHVM运行时,我得到了令人印象深刻的结果:
time hhvm -v"Eval.Jit=true" -f ./ex3.php
fib(36) = 14930352
real 0m0.267s
user 0m0.248s
sys 0m0.020s
Run Code Online (Sandbox Code Playgroud)
将其与标准PHP进行比较:
root@hiphop:/www# time php -f ./ex3.php
fib(36) = 14930352
real 0m5.606s
user 0m5.600s
sys 0m0.000s
Run Code Online (Sandbox Code Playgroud)
但是,当我想在HHVM中启用内置Web服务器时,所有性能提升都会丢失:
hhvm -v"Eval.Jit=true" -m server -p 8000 &
time wget -qSO - http://localhost:8000/ex3.php
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
X-Powered-By: HPHP
Date: Sat, …
Run Code Online (Sandbox Code Playgroud) 我们可以期望通过从HHVM上的PHP过渡到Hack来获得速度提升吗?
我正在考虑强类型参数/返回类型,特别是标量,它允许HHVM在将代码编译为本机代码方面做得更好,或者与使用经典PHP及其混合类型相比,速度增益无关紧要?
我需要在HHVM运行时和传统的PHP运行时上运行给定的包.我的问题:有没有办法以编程方式检查当前环境是否为HHVM?像这样的东西:
<?php
if(running_on_hhvm()) {
// do hhvm compatible routine
}
else {
// do normal routine
}
Run Code Online (Sandbox Code Playgroud) Facebook推出了一种新的编程语言,它看起来就像是PHP的扩展.他们称之为Hack,它在他们的HHVM引擎上运行.
在看到他们的网站并阅读了一下之后,我想知道从PHP到Hack的迁移有多么流畅.
让我们围绕已经部署到LEMP或LAMP堆栈的Web应用程序进行讨论.
我的一些初步想法和行动清单包括:
那么,你会怎么做呢?
我一直在玩HHVM配置文件,我还没有能够向浏览器输出任何致命错误.它显示E_NOTICE和E_WARNING,但是当发生任何E_ERROR时,它会使页面留空,并且错误仅出现在HHVM日志文件中.
有没有办法让它在浏览器中显示?
我的HHVM配置文件如下:
PidFile = /var/run/hhvm/pid
Log {
Level = Warning
AlwaysLogUnhandledExceptions = true
RuntimeErrorReportingLevel = 8191
UseLogFile = true
UseSyslog = false
File = /var/log/hhvm/error.log
InjectedStackTrace = false
NativeStackTrace = false
Access {
* {
File = /var/log/hhvm/access.log
Format = %h %l %u % t \"%r\" %>s %b
}
}
}
ErrorHandling {
CallUserHandlerOnFatals = true
NoInfiniteLoopDetection = false
NoInfiniteRecursionDetection = false
ThrowBadTypeExceptions = false
ThrowNotices = false
NoticeFrequency = 1 # 1 out of these many notices to …
Run Code Online (Sandbox Code Playgroud) 在HHVM中运行我的PHP脚本时,我看到我可以传递调试主机和调试端口参数,但我似乎无法确切地知道它的作用以及如何使用它.
这些参数是用于调试HHVM本身(或者可能是编译的PHP本身)还是用于调试PHP脚本?也就是说,它是用于调试HHVM的工作方式,还是用于调试,就像我通常使用XDebug一样,比如说?
起初我尝试将它连接到我为XDebug设置的IDE,但这似乎没有做任何事情,所以没有进行疯狂的追逐,我想我会问这里.
什么是HHVM的调试参数,确切地说,我如何使用它们来调试HHVM中的PHP脚本呢?
我是一个强类型语言支持者,但我正在开发一个大型的PHP项目.
我一直在使用PhpStorm,我喜欢你能提供的额外类型提示,并提供以下评论:
/** @var \Payments $payment */
/** @property \Payments $payment */
Run Code Online (Sandbox Code Playgroud)
PhpStorm很棒,因为它在类型不匹配时会给你一些警告.
我想知道是否有可能在PhpStorm之外静态进行这种检查. 有些种类的命令行预编译器将通过代码,也检查这些额外的提示,如果检测到不匹配,显示一些错误.
这是可以用phpcs完成的吗?
我的最终目标是拥有一个自动工具,提醒我类型不匹配.
我甚至考虑转换到HHVM以获得更好的类型提示.但我不相信HHVM尚未投入生产.
理想情况下,在HHVM上开发额外的类型提示会很棒,但是代码不能在我想继续生产的Zend PHP引擎上运行.
任何的想法?
谢谢.
我需要苗条的PHP与漂亮的网址使用.htaccess
,没有问题.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
Run Code Online (Sandbox Code Playgroud)
现在我使用hhvm,fastcgi使用这个虚拟主机配置运行它.
<VirtualHost *:80>
ServerName project.dev
ServerALias www.project.dev
DocumentRoot /var/www/project
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/project/$1
<Directory "/var/www/project">
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
当然,它不会读取.htaccess文件,我想.htaccess
在虚拟主机配置中添加配置,但不,它不会工作.
像这样:
<VirtualHost *:80>
ServerName project.dev
ServerALias www.project.dev
DocumentRoot /var/www/project
ProxyPassMatch ^/(.*\.php(/.*)?)$ fcgi://127.0.0.1:9000/var/www/project/$1
<Directory "/var/www/project">
AllowOverride All
Order allow,deny
Allow from all
</Directory>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L]
</VirtualHost>
Run Code Online (Sandbox Code Playgroud) 我有一个非常奇怪的问题,上传超过6GB的大文件.我的过程是这样的:
我的PHP(HHVM)和NGINX配置都将其配置设置为允许最多16GB的文件,我的测试文件只有8GB.
这是奇怪的部分,ajax 总是会超时.但是文件被成功上传,它被复制到tmp位置,存储在db,s3中的位置等等.但是即使所有执行完成(需要10-15分钟),AJAX也会运行一个小时超时时结束.
什么可能导致服务器不仅仅发送大文件的响应?
服务器端的错误日志也是空的.
我正在尝试从PHP 5.4(使用FPM作为FastCGI和apc)在nginx上迁移到HHVM - FastCGI(也是nginx).
我的应用程序是一个以Slim为框架的广告服务器.广告服务器连接到redis,memcached(用于套接字和http),MySQL,MongoDB(这些端点在HHVM版本中禁用),使用SOAP和beanstalkd连接到Java后端.
该应用程序有一个测试端点,计算一个Fibonacci系列,在请求11之后速度非常棒!
但是......其他终端的基准在hhvm中更糟糕(当然,在请求11之后).
我认为这总是hhvm模式解释器.
一些想法?
谢谢!
环境:
8个处理器和8GB RAM.
$ uname -a
Linux 3.13.0-30-generic #55-Ubuntu SMP Fri Jul 4 21:40:53 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04 LTS
Release: 14.04
Codename: trusty
Run Code Online (Sandbox Code Playgroud)
我编译了hhvm,因为我修改了phpredis:
$ hhvm --version
HipHop VM 3.2.0-dev (rel)
Compiler: heads/master-0-gb7802e739a1f16808dd06c57754c1dc77ed80054
Repo schema: acdee0ea91d0b5967c60a0a42f5dbf81433a7821
Run Code Online (Sandbox Code Playgroud)
测试:
斐波纳契测验
PHP
1.1112360954285
Run Code Online (Sandbox Code Playgroud)
HHVM
1.7104048728943
1.7193510532379
1.7104179859161
1.713366985321
1.7120008468628
1.7102618217468
1.7118058204651
1.7113170623779
1.7101211547852
1.7117080688477
1.7127840518951
0.10136723518372
Run Code Online (Sandbox Code Playgroud)
地理定位测试(SOAP) …