PHP這樣優化有可能嗎?
PHP理論上在部署上線的時候把所有用到的自定義函數都編寫到擴展里原則上就可以達到C++/JAVA那樣的速度了?
寫一個這樣的工具?!(就可以實現開發效率和運行速度的問題了呢?!)
沒可能......... 除非你不是簡單的做做"翻譯", 還要在翻譯的過程中做很多"翻譯優化"....否則, 你可以想像下C代碼O0和O2編譯後的區別.... 你直接翻譯就是O0....可能還不如PHP寫的呢, 因為起碼PHP自己還會做編譯優化....
Zephir Performance vs PHP
https://github.com/phalcon/zephir/issues/694
這裡就提到一個問題,某些場景,用Zephir寫的最終編譯成機器碼的程序(使用了-O3優化),甚至還沒有PHP 5.6原生腳本實現的代碼快.所以說,還得看情況,比如那些典型的計算密集型的操作,比如內存上的二分查找,肯定是本地代碼有優勢.
binary_search.c
#include &
int binary_search(int arr[], int left, int right, int key) {
if(left &> right) {
return -1;
}
int mid = (left + right) / 2;
if(arr[mid] == key) {
return mid;
}
if(arr[mid] &> key) {
return binary_search(arr, left, mid - 1, key);
}
return binary_search(arr, mid + 1, right, key);
}
int main() {
int arr[10] = {0, 2, 3, 6, 9, 10, 15, 16, 17, 22};
int len = sizeof(arr) / sizeof(int);
int key = 10;
int ret, i;
// gcc -O0 binary_search.c -o binary_search time ./binary_search
// 不開優化,1億次二分查找,Ubuntu(i5-3230M)上耗時0m1.959s
for(i = 0; i &< 100000000; i++) {
ret = binary_search(arr, 0, len - 1, key);
}
if(ret == -1) { printf("Key not found "); }
else { printf("Key found at position %d", ret); }
return 0;
}
binary_search.php
& $right) {
return -1;
}
$mid = floor(($left + $right) / 2);
if($arr[$mid] == $key) {
return $mid;
}
if($arr[$mid] &> $key) {
return binary_search($arr, $left, $mid - 1, $key);
}
return binary_search($arr, $mid + 1, $right, $key);
}
$arr = array(0, 2, 3, 6, 9, 10, 15, 16, 17, 22);
$key = 10;
$len = count($arr);
// 1000萬次二分查找,Ubuntu(i5-3230M)上PHP 7.0.0耗時0m6.081s
for($i = 0; $i &< 10000000; $i++) {
$ret = binary_search($arr, 0, $len - 1, $key);
}
echo ($ret == -1) ? "Key not found" : "Key found at position $ret";
echo "
";
可見這時PHP(1千萬次要6秒)性能跟C(1億次只要2秒)是數量級的差距,所以B+樹索引二分查找的資料庫引擎(如PHP常用的SQLite和MySQL InnoDB),當然還是用C/C++實現有優勢.
可以嘗試 Zephir Programming Language phalcon 開發組提供的工具。不過很可惜,在 Zephir 代碼裡面只能使用 php 原生函數和類,無法使用第三方 PHP 代碼。而 Zephir 一直沒有 Trait 支持(Add support for traits. · Issue #504 · phalcon/zephir · GitHub),所以,除非是自己完全造輪子,Zephir 沒有什麼好的用處。
opcache就是做位元組緩存的。翻譯的過程有很多因素,與其把翻譯之後的代碼部署,不如將翻譯的過程交給伺服器,代碼的可移植性和部署難度都會有大的改善。
可以了解下 Phalcon 這個框架
推薦閱讀:
※一個只會 HTML 和 CSS,沒有學過任何其他語言的人,只用了15天就學會了 PHP,並獨立製作了一個複雜度和知乎相似的 B2C 網站,這個人是天才嗎?還是說 PHP 很簡單?
※用 PHP 可以開發出豆瓣、知乎嗎?
※php為什麼弄點號連接字元串?
※我現在JS還算熟練,在糾結繼續研究前端還是學習個伺服器端語言?
※yield 是什麼?