2009-02-23 21 views
2

我的大多數應用程序是用PHP編寫的((前端和後端) 有是太慢工作的一部分,我需要重寫它,可能不是PHP 什麼都會給我以下內容:。
1.大多數的速度
2.發展最快
3.易於維護。需要編寫一個算法非常快,我應該這樣做的PHP擴展或其他方式嗎?

我在我的腦海重寫這段代碼在CPP作爲PHP擴展,但可我鎖定在這個解決方案和失誤一些更簡單/更好的解決方案?

該算法是PorterStemmerAlgorithm上的幾個每次運行MB數據。

+0

你能描述一下你的算法和你從中得到什麼樣的表現嗎? – BobbyShaftoe 2009-02-23 04:52:09

+0

Not.Enough.Information.At.All。 – 2009-02-23 05:03:00

+0

同上沒有足夠的信息。我們甚至不知道「它」是什麼。 – cletus 2009-02-23 05:57:43

回答

9

答案真的取決於它是什麼樣的過程。

如果它是一個長時間運行的過程(至少幾秒)那麼也許用C++編寫的外部程序會非常容易。它不會有PHP擴展的複雜性,它的穩定性不會影響PHP/apache。你可以在溝通管道,共享內存,或諸如此類......

如果是短期運行的過程(以毫秒計),那麼你很可能需要寫一個PHP擴展。這將允許它以非常快的速度調用,幾乎不會造成每次通話的開銷。

另一種可能性是自定義服務器,它偵聽Unix域套接字,並在PHP請求信息時快速響應PHP。然後,你的每通話開銷基本上創建一個套接字(不壞)。服務器可以是任何語言(c,C++,python,erlang等),客戶端可以是使用socket _ *()函數的50行PHP類。


在作出此決定之前,需要對許多信息進行評估。除非進入真正緊密的循環或成千上萬的重複函數調用,否則PHP通常不會顯示減速。換句話說,HTTP請求和網絡延遲的開銷通常使PHP延遲微不足道的(除非上述適用)

  • 也許有一個更好的方式把它寫在PHP?
  • 你數據庫綁定?
  • 它是CPU綁定,網絡綁定還是IO綁定?
  • 可以緩存結果嗎?
  • 圖書館是否已經存在,它會做繁重的工作。

通過承諾自定義的PHP擴展,你顯著增加知識,以保持它需要(甚至高於C++)的基礎。但必要時很好的選擇

隨時更新您的問題與更多的細節,我相信堆棧溢出將很樂意提供幫助。

0

我不確定PorterStemmerAlgorithm是什麼。但是,如果您可以使您的進程並行運行並收集信息,則可以查看在JAVA中輕鬆實現的並行運行進程。不知道如何在PHP中調用它,但肯定可以維護。

你可以看看這個框架。看起來簡單的實現

https://computefarm.dev.java.net/

問候, 富蘭克林。

+0

tnx-將調查 – 2009-02-23 07:53:29

3

建議

的PorterStemmerAlgorithm具有http://tartarus.org/~martin/PorterStemmer/c.txt

一個ç實現可它應該是一件容易的事來把這些C程序到您的數據源,並使其成爲一個獨立的可執行文件。然後,您可以簡單地使用其中一個proc函數從PHP調用它,例如proc_open()

除非您需要多次調用此程序,否則這種方法應該節省您構建和集成PHP擴展的工作量,更不用說辛勤工作(c)已經完成了。

0

如果你絕對需要用不同的語言重寫速度的原因,那麼我認爲gahooa的答案很好地覆蓋了選項。然而,在你做之前,你是否確實已經盡你所能提高性能,如果PHP實現?

  1. 在您的情況下緩存輸出可行嗎?你可以逃避算法一次並緩存輸出,而不是每次頁面加載?
  2. 你有沒有嘗試過分析代碼,以確保沒有不必要的工作正在完成(db查詢在內部循環等)。 Xdebug可以在這裏幫助。
  3. 是否還有其他可能在您的數據集上表現更好的干擾算法?
相關問題