11月26日发布
下载地址:https://www.php.net/downloads
环境:本地 win10系统
性能测试:随机生成数组冒泡排序,10000条,结果2秒左右与php7.4相差无几。
开启jit 过程
根目录下创建php.ini文件
将php.ini-development 文件内容复制到里面
找到 [opcache] 下设置(填写你自己的ext\php_opcache.dll位置)
opcache.enable=1
zend_extension="C:\phpstudy_pro\Extensions\php\php8\ext\php_opcache.dll"
opcache.jit=1255
opcache.jit_buffer_size=100M
重启服务器打印:phpinfo() jit是on就是开启成功了
再次测试 0.6秒 左右,性能确实提高不少。
同样算法下
用golang同样的算法:用切片类型是 0.133秒, 数组类型0.097秒
用java同样算法:0.130左右
附上代码
php:
function microtime_float()
{
list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);
}
$time_start = microtime_float();
$n = 1e4;
$arr = [];
for($i=0;$i<$n;$i++) {
$arr[] = rand(1,1e4);
}
foreach ($arr as $k=>$v) {
for($i=$k+1;$i<$n;$i++) {
if($arr[$k] < $arr[$i]) {
$vvv = $arr[$k];
$arr[$k] = $arr[$i];
$arr[$i] = $vvv;
}
}
}
$time_end = microtime_float();
$time = $time_end - $time_start;
echo $time;
golang:
t1 := time.Now()
len := 10000
//切片
var arr = make([]int, len)
//数组
//var arr [10000]int
rand.Seed(time.Now().UnixNano())
for i := 0;i<len;i++ {
arr[i] = rand.Intn(1e6)
}
for val := range arr {
for j := val+1;j<len;j++ {
if arr[val] < arr[j] {
arr[val],arr[j] = arr[j],arr[val]
}
}
}
t2 := time.Since(t1)
fmt.Println(t2)
java:
@ResponseBody
@RequestMapping("/sort")
public long sort() {
long t1 = System.currentTimeMillis();
int n = 10000;
int[] arr = new int[n];
Random r = new Random();
for (int i = 0; i < n; i++) {
int ran1 = r.nextInt(100000);
arr[i] = ran1;
//System.out.println(ran1);
}
for(int i = 0;i< n;i++) {
for(int j=i+1;j<n;j++) {
if(arr[i]<arr[j]) {
int vvv = arr[i];
arr[i] = arr[j];
arr[j] = vvv;
}
}
}
//System.out.println(System.currentTimeMillis()-t1);
return System.currentTimeMillis()-t1;
}