台灣最大程式設計社群網站
線上人數
697
 
會員總數:244893
討論主題:188887
歡迎您免費加入會員
討論區列表 >> PHP >> PHP是不是不適合大量的計算
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
PHP是不是不適合大量的計算
價值 : 120 QP  點閱數:990 回應數:7

樓主

淺水員
中級專家
2537 4
1657 294
發送站內信

最近發現PHP的計算速度跟javascript相比相差很遠
我在自己的電腦中運行WAMP
想把傳入的檔案,每4個byte為一筆資料儲存到數值陣列
發現20秒大概只能處理1.6MB左右的內容

往上爬文發現PHP計算速度的確不是很好
array也跟一般的陣列不大一樣
pass by reference似乎也不是真的用傳址的方式

後來我是用exec去呼叫C寫的小程式才解決效率的問題
所以想問問大家,運算的部分由其他語言來處理是否為常態呢?
另外如果不是自己的機器,而是像是網頁代管的廠商。
有沒有可能允許租用者使用自製執行檔或是自製php插件呢?
(付費的話?)

搜尋相關Tags的文章: [ PHP速度 ] ,
本篇文章發表於2016-10-18 16:52
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

迷路
捐贈 VP 給 迷路 檢舉此回應
如果是要經常執行這麼龐大的運算量
是否要考慮換用.NET

以我個人來說,網頁執行超過3~5秒就會考慮以分割處理的方式來加速網頁開啟的速度
但是整體的運算量和花費時間並沒有因此減少,實際上還稍微多了一點

如果是某個動作需要進行資料量龐大的搜尋,可以參考我的方法
但如果樓主的情況是很多動作都需要龐大的資料運算,那換個語言也是可以考慮的方向
本篇文章回覆於2016-10-19 09:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
最有價值解答

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
其實無論如何。機器碼語言永遠都比組譯式語言還要快,且效能好
本機運行都比遠端運行還要快。
這是不變的道理。
這並不是php計算不好還是怎麼樣。

運算部份是否用其它語言為常態。這得看你所謂的「運算」是什麼了。

大多數而言,沒必要的情況下。並不會這樣做。
只有少數的情況才會這樣處理。

有些情況會利用javascript來處理。因為javascript可以算是本端運行的東西了
只要資料安全性允許的情況下。
這也是你覺得javascript會比php快的原因了。

一般來說,vps及獨立主機。都可以自由的安裝插件跟放你的運行檔。
簡單來說,只要你的主機有root權限的。這些東西放上去都不是問題

但如果像是空間主機的話,這得要看了。一般來說。exe檔是不太可能給你運行了。
因為大多數是linux系統。是不可能運行exe的。
插件的話。由於空間是共用的設定。而且如像你說的這插件是屬於大資料運算的插件。
那更不可能可以給你裝上去。(會消耗機器的資源)
本篇文章回覆於2016-10-19 09:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

淺水員
檢舉此回應
這是我今天做的測試,PHP也是在自己的電腦跑的(用WAMP)。
結果如下:(同樣都在自己的電腦上跑,PHP跟javascript速度大概差100倍)


測試的程式碼

index.html

<iframe name="php_result"></iframe>
</body>
</html>
</pre>

main.js


effecient.php

本篇文章回覆於2016-10-19 16:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

淺水員
檢舉此回應
沒想到 pre 標籤會導致引用排版錯亂。
怕占版面,我放在google空間了:javascript與PHP速度測試

順便說明一下,這個測試主要是讀取檔案後,將檔案的二進位資料儲存到整數陣列(unsigned int 32bit)。
(之後可以再對這個陣列做一些運算,這邊先撇開用途,單純研究速度)

目前看起來是PHP在執行此類運算時應該由其他語言處理比較好。
利用exec、system或做成插件等方式。(to 浩瀚星空,我是指exec這個函數啦!自製的C程式也可以在Linux機器上編譯後使用)

至於.NET不知道跑出來的速度如何?
目前我比較不考慮的原因是他被綁在MS的平台。
昨天我還在想用Raspberry Pi弄個家用的區網伺服器
(大概可以弄個FTP跟印表機分享吧?還在想像中。)
本篇文章回覆於2016-10-19 17:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
其實你這樣的測試也是沒有意義的。

因為就算你是在本機運行的情況下。其運行的原理還是不變。
因為php還是屬於後端運行。依然需要經過編輯作業。

這其實也可以利用貨運的原理來跟你說明。

javascript就像是自取件。你是在你第一時間內,用自已的車子來取件。

而php來說,還是要透過交件,建檔,配送。
就算是自已寄給自已,也只是省下配送的時間而已。但還是要貨車出去再回來。
但文件跟建檔的時間還是不變。也是會佔用資源

這其實你測試沒有意義的原因也是在此。因為後端應用不管怎麼樣都不可能快過本機運算。

我再說個例子好了。如果你有建立一個區域網路。
你將檔案直接copy到d:
跟將檔案copy到區網指定的d:

雖然看起來都是在本機的動作。但實際上來說,直接copy還是會比透過區網copy還要快很多。
如果你用的還是那種10m的網卡。這樣的情況會更明顯的。

所以基本上,我並不會否認javascrip會比php快很多。

但你沒注意及實驗一件事。

你是用本機測試。所以可以用javascript。但如果不是本機測試了。javascript是否就可以做到這樣的實驗了呢?
而另外一個考量就是你說的exec。那是代表運行伺服端的命令。但不代表可以運行本機端的命令(安全性原則)
再最後一點就是我上面提到的。非vps跟獨立主機的情況下。你想要用exec的行為,大多數都是禁止的。
所以很多情況,並非是我們不想用本機機器語言。而是不能做到這個行為。如果可以做到,當然也會去做。

另外再告訴你一件事。現在我的開發。是透過php來去觸發java程式。利用java來做內部計算運行。
這些都是一種加速的行為。

那為何一定要用php來做程式開發。因為無論如何,一些控制方面上的行為還是得要用web server的方式來做處理。
而用web server的行為控制,本身的一些限制。這些是有在開發的人員,大家都知道的道理。
本篇文章回覆於2016-10-19 18:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

淺水員
檢舉此回應
我知道:「javascript 在客戶端以瀏覽器運行;php 在伺服器端以PHP軟體運行。」
至於測試,主要是比較運算的效能。
(一般狀況伺服器跟客戶端不會是同一台電腦)

在程式碼中,時間的計算都是從在迴圈開始之前,所以傳輸訊息以及預先的準備時間我是沒算進去的。
而迴圈結束馬上就計算經過的時間,所以也不會算到結果傳輸的時間。

客戶端與伺服器端,處理的工作不同我也明白。
這邊只是假設執行某種相同運算,比較兩者的差別。
(或許把範例改成計算PI到小數點後幾位的運算,就比較不會因為檔案傳輸而搞混了。事實上PHP也是在檔案傳輸完畢才會開始跑script的,應該跟傳輸無關。)
儘管明知道PHP跑不過也想知道大概會差多少。

我用exec執行C程式目的應該跟您使用java很像,只在伺服器端執行,單純只是為了補足PHP運算效能不佳。
不過正如您所說,exec在一般空間主機是禁止的。
不知道java在一般主機空間是能用的嗎?

※剛有測PHP7,速度真的差不多是PHP5.6的2倍!跟網路上的訊息差不多。先前數據是PHP5.6的。
本篇文章回覆於2016-10-19 22:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
不錯的參考

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
你如果想要研究的話。

其實你也可以往weB server下去研究

我目前有台主機裝的是litespeed的web server
那效能上的差異會更快更明顯。
雖然這一套是很貴啦。而且也要搭配多核的cpu主機。

再來~~~java在一般主機來說,也是一樣不能用的。
所以我都是自已租用主機的。

會說使用java的原因。會比起exec還要好的情況是。
你exec只能針對目前運行的主機下命令。

但如用java的方式連結。我就可以將java架在我可以控管的主機上
其它的空間就用連結的方式處理。

當然啦~~~這樣子做效能又一定會有差異的。

本篇文章回覆於2016-10-20 09:34
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.