我們正在準備建立一個具有高規模潛力的網站。如果規模到來,我們希望爲它做好準備!我們決定使用PHP,Apache和MySQL。我們是否應該使用某種PHP框架(PHPulse,CodeIgniter,CakePHP,Zend,...),或者從零開始構建所有東西? 網站的性質與Facebook相似,但主要是文本數據(不是很多圖片,視頻)。網站將託管在雲上。我們是否應該將PHP框架用於高擴展性網站?
你會推薦什麼?
Regards ...
我們正在準備建立一個具有高規模潛力的網站。如果規模到來,我們希望爲它做好準備!我們決定使用PHP,Apache和MySQL。我們是否應該使用某種PHP框架(PHPulse,CodeIgniter,CakePHP,Zend,...),或者從零開始構建所有東西? 網站的性質與Facebook相似,但主要是文本數據(不是很多圖片,視頻)。網站將託管在雲上。我們是否應該將PHP框架用於高擴展性網站?
你會推薦什麼?
Regards ...
此問題已被多次詢問。普遍的共識總是做你能做的事情。不要擔心從一開始就使其過於可擴展,只需稍微放在心上。試圖從一開始就構建可擴展性令人筋疲力盡,你很可能會放棄。
如果你開始因爲大量的知名度而出現問題,那真是太棒了!然後,你足夠受歡迎,並希望獲得足夠的開始不必擔心支付更昂貴的主機和更高端的編程/數據庫框架和引擎。
到目前爲止,我還沒有使用任何框架(手工製作所有東西)。但這個網站真的必須是完美的(至少我想接近那:))。這是一個大項目,團隊很小,時間有限,所以我認爲這次實施一個框架是個好主意。它帶來了一些基於良好實踐的概念,所以我不必處理它們。後來,當頁面增長時,如果需要,我可以用更合適的替換這些概念。 – Cartoonle 2011-05-13 09:53:27
By Frameworks我指的是PHP,並將它交給了預編譯的DLL,比如eBay,以及引擎我正在使用MYSQL。混合型網站通常不使用MYSQL,而是使用基於高端性能的數據庫引擎。 – 2011-05-13 10:27:23
如果您知道您將需要儘快調整它,那麼使用現有的已驗證框架是一個不錯的主意,而不是從頭開始構建自己的框架。與可擴展性不太相關,但更多的是爲了稍後簡化您的工作,並且更有信心,樣板代碼的功能足夠好。另一方面,如果您從未使用任何上述框架,您可能會考慮權衡您需要超越最初學習曲線的時間。
如果你從零開始構建每一件事,那麼肯定需要時間,但只有你會知道代碼的內部邏輯。相比之下,如果你使用框架,你會得到快速的發展,但在這種情況下,你正在使你的網站上的任何一個打開的代碼意味着更多的機會被黑客攻擊。每種方法都有自己的專業和玉米。無論如何,你可以看看php Top 10 frame works of PHP的最佳框架。我會推薦Code Igniter
從頭開始構建它。控制每一位有助於優化。 Facebook的甚至控制其PHP編譯:http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html
使用一些緩存庫一樣的memcached:http://developers.facebook.com/blog/post/358/
,因爲PHP已經是一個框架和模板引擎不要使用框架。我不確定您是否可以在雲上使用它,或者雲可能會提供自己的緩存系統。
是的,我已閱讀highscalability.com上的這些「巨大網站架構」,但我認爲在這個階段不可能以這種方式開始。在這個階段,我們可能應該建立一個更簡單的建築,但是要敞開大門。所以我們可以一步一步地優化它。 – Cartoonle 2011-05-13 10:30:29
你做到了,你擁有它。你期望寫自己的圖書館,記錄他們*和*維護他們。一個框架可以讓你專注於業務邏輯,忘記其他廢話。當然,有一些糟糕的框架和模板語言。但有時候你會用框架獲得更好的工具。良好的文檔,內置緩存和表單庫的集成單元測試以及可以幫助您的社區,因爲您的代碼將會有所標準化。這只是浪費時間編寫自己的框架。我確信Facebook沒有過早優化。 – Keyo 2011-05-16 08:13:28
我會說不,因爲今天有更好的語言。 Python,Ruby和C#擁有比php更好的命名空間和開發工具。
然而,你真正的問題不會是語言。這將是數據庫層,因爲這將更加集中。您可以使用memcached來減少數據庫的負載。如果使用ORM檢查它是否具有運行直接查詢和運行批量插入或使用連接而不是延遲加載查詢來獲取相關對象的所有功能。
您還應該使用隊列來加快頁面加載速度。如果您的操作速度較慢,可以在頁面請求之外完成,然後將它們推入隊列並稍後處理,可能在不同的服務器上。電子郵件和圖像大小調整就是一個很好的例子。
如果你想要一個真正可擴展的Web應用程序,你將不得不走出Apache,MySQL的泡沫,並開始使用Nginx和非關係數據庫等工具。
現在,最好做什麼,在它存在之前不要太擔心這個問題。只要確保你選擇的框架是鬆散耦合的,這樣你就可以做一些事情,比如切換數據庫層。避免像鼠疫這樣的代碼錯誤,它根本不是模塊化的,沒有ORM和一個非常差的表單庫。我會推薦Django(python),有很多公司爲它做雲託管。我已經看到了從PHP到Python的商店切換,他們最終喜歡它。不要以爲你必須被鎖定到PHP,特別是當你選擇託管。
編輯,回覆Cartoonle Django。但是,如果你真的想要PHP,也許Symfony,但它被稱爲緩慢。 Kohana就像CI一樣,但更多的社區驅動和麪向對象,所以一些主要的代碼錯誤早已在kohana中解決了。我也聽說過關於Cake的好東西,但從來沒有嘗過它。至於codeigniter,是的很多人喜歡它,它很簡單,但缺乏很多優秀的軟件模式,以支持醜陋的快捷鍵。我和它一起工作了一年,過了一段時間,團隊中的每個人都認爲我們正在重新發明輪子並需要別的東西。當你使用它一段時間後,問題開始冒出來。我們辯論了一段時間,最終結果與Django實際上。這是一個艱難的決定,但卻獲得了更高的生產力。加上谷歌使用它,我認爲這很多。
認真python是comp sci 101課程和專業中唯一使用的語言之一。 python的目標之一是讓教學比較簡單。這不是那麼可怕,打開一個終端,輸入python
,並有一個遊戲。有很多很好的工具,像pip,它就像PHP梨,但也可以與git,gzip,hg以及除了精彩的python軟件包倉庫以外的其他一些格式一起使用。還有一大堆的軟件包,我真的沒有看到與PHP幾乎一樣多的軟件包。 http://djangopackages.com/
至少給它一個機會,做了約2個小時的教程。它帶有一個內置的Web服務器,因此除了python本身之外,沒有其他設置。
我不確定這是什麼意思。這個問題更像是如果框架在可伸縮性方面可能代表一個問題。 (不是如果它會幫助)。是否有專門用於可伸縮性的框架? – Cartoonle 2011-05-13 09:38:33
不是我所知道的。沒有主要的框架幫助例如分佈式代碼或性能查詢(如果你定義了你的意圖而不是讓我們猜測)也會有所幫助。另請參閱以前的拉里法裏討論http://stackoverflow.com/questions/132056/what-is-the-best-php-mvc-framework-for-scalability – mario 2011-05-13 09:40:16
爲什麼甚至打擾PHP。它正在出路。其他語言如Python,Ruby,C#都有更好的開發網站的工具。 – Keyo 2011-05-14 06:03:45