4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
你應(yīng)該考慮在構(gòu)建高性能的Web應(yīng)用程序的常見的原則(特別是在后端部分)。
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
以下討論的概念在這里可以適用于任何語言和框架。雖然這篇文章將介紹一些具體的實(shí)例,設(shè)計模式和工具,主要用于PHP生態(tài)系統(tǒng)。
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
how to build a Web架構(gòu)?4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
在我們開始的基本規(guī)則,快速構(gòu)建Web應(yīng)用程序,我想推薦我們建立一個基于SaaS架構(gòu)可靠的云近的博客4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
TL;DR的基本規(guī)則快速構(gòu)建Web應(yīng)用程序:4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
規(guī)則1、避免過早優(yōu)化4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
規(guī)則2、做的工作的低數(shù)額來解決問題4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
規(guī)則3、推遲你不需要馬上做的工作4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
規(guī)則4、當(dāng)你可以使用緩存4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
規(guī)則5、了解和避免N 1查詢問題與關(guān)系型數(shù)據(jù)庫4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
規(guī)則6、準(zhǔn)備你的應(yīng)用程序時可能的橫向擴(kuò)展4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
規(guī)則1:避免過早優(yōu)化4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
其中著名的高德納的名言說:4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
Knuth注意到,很多軟件開發(fā)商普遍浪費(fèi)大量時間思考性能的非關(guān)鍵零件,他們所寫的代碼。為了避免陷入過早優(yōu)化陷阱你應(yīng)該不用擔(dān)心性能寫代碼的第一個版本。4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
然后你可以使用Profiler來檢測你的代碼和看到的瓶頸在哪里。這樣你就可以專注于真正需要你關(guān)注的部分改進(jìn)。
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
Knuth的話并不意味著你不需要在所有關(guān)于優(yōu)化護(hù)理并不是寫爛代碼的借口然后放棄它。
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
它應(yīng)該被視為一種鼓勵學(xué)習(xí)如何“優(yōu)化靈活”,你應(yīng)該讀它的方式。
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
如果你的工作是在PHP的土地有很多工具,你可以很容易地通過測試你的代碼:
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
Xdebug:可能是著名的PHP調(diào)試器和profiler,它必須安裝在一個PHP擴(kuò)展和它在大多數(shù)的IDE容易積。4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
xhprof:一個php函數(shù)層次輪廓。它配備了一個簡單的基于HTML的導(dǎo)航界面,提供了一些很酷的區(qū)分能力比較代碼的不同版本的性能。4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
symfony的輪廓:symfony的分析器的symfony框架好的特點(diǎn)一一。它允許你檢查每個請求的執(zhí)行時間,展示一個很好的時間,讓你輕松了解代碼的哪些部分是耗時的。它是自動啟用的“發(fā)展”模式,不需要任何PHP擴(kuò)展來安裝。4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
秒表的組成部分:這是用在symfony的廓線測量一段PHP代碼的執(zhí)行時間,低水平的圖書館。它可以很容易地集成在任何PHP項(xiàng)目和不需要任何擴(kuò)展。4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
blackfire.io:探查器優(yōu)化PHP提供了一個很好的Web界面,可以直觀了解你的代碼在CPU的大部分時間。4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
天堂Blackfire:一個很有前途的替代,提供了大量的圖形化的工具(時間,調(diào)用圖等)使它很容易找到瓶頸。它的意思是連續(xù)運(yùn)行(在生產(chǎn))。4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
規(guī)則2:只做你需要做的。4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
很多時候你的代碼比它需要做更多的事情。
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
如果你在你的代碼中使用復(fù)雜的庫和框架,這是真實(shí)的。
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
有一些設(shè)計模式和技術(shù),可以幫助你避免這些情況,達(dá)到更好的性能。
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
自動裝填它是一個:PHP的特征允許你需要包含類定義的只有你要使用這個類是當(dāng)文件(實(shí)例化,靜態(tài)方法的調(diào)用,訪問一個常數(shù),等)。這樣,你不應(yīng)該擔(dān)心它的文件包括在您的腳本,但只使用類,你需要。自會為你做的休息。配置自動加載在過去有點(diǎn)復(fù)雜,特別是因?yàn)槊恳粋€圖書館都使用自己的習(xí)俗,但今天感謝psr-0和psr-4的標(biāo)準(zhǔn)和工具,如作曲家是一塊蛋糕,使用自動裝填。4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
依賴注入:這是一個非常常見的設(shè)計模式在java的世界,在過去的幾年中有很多牽引甚至在PHP的世界也感謝symfony框架一樣努力,Zend和Laravel提倡廣泛使用。4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
懶加載:另一個重要的設(shè)計模式用于推遲一個對象初始化直到需要它。它的主要使用對象與數(shù)據(jù)庫連接這樣的重資源或基于文件的數(shù)據(jù)源。4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
規(guī)則3:我明天再做!4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
有多少次你需要發(fā)送一封郵件到用戶在他/她引發(fā)你的Web應(yīng)用程序的特定事件(如密碼更改或訂單完成)?有多少次你需要調(diào)整大小的圖像在用戶上傳的嗎?4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
這是很常見的在發(fā)送成功的消息給用戶做這些“重”的操作。換句話說,我們的用戶希望在他們的瀏覽器盡快看到一些消息,我們需要確保任何額外的任務(wù)(不直接相關(guān),與創(chuàng)建的消息)應(yīng)遞延。
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
做的常見的方式是使用工作隊(duì)列,這意味著你必須存儲需要執(zhí)行的延遲任務(wù)到隊(duì)列的一種數(shù)據(jù)量小(例如數(shù)據(jù)庫、消息代理)和忘記它。4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
你得馬上回來你的主要任務(wù):為用戶產(chǎn)生的輸出!4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
會有一些什么樣的工人到位的目標(biāo)從隊(duì)列中讀取并執(zhí)行定期的推遲的工作(如發(fā)送電子郵件或生成圖像的縮略圖)。
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
一個簡單的排隊(duì)系統(tǒng)可以輕松完成任何數(shù)據(jù)存儲(經(jīng)常使用或MongoDB使用)或消息代理一樣RabbitMQ和ActiveMQ4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
Rule 4: Gotta Cache ’ 他們 所有 的 !4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
目前Web應(yīng)用程序真的是件復(fù)雜的代碼。為了生成每一個要求我們做很多事情的反應(yīng):連接一個或多個數(shù)據(jù)庫,調(diào)用外部API讀取配置文件、計算和匯總數(shù)據(jù),將結(jié)果為解析的格式(XML、JSON等)或使它與模板引擎進(jìn)入一個奇妙的HTML頁面。4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
使用我們可以為每個請求得到這樣幼稚的做法,我們的服務(wù)器將永遠(yuǎn)不會厭倦做重復(fù)性的工作。4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
但有一個聰明的和更好的方式來做重復(fù)工作,避免計算相同的結(jié)果一次又一次。這就是所謂的緩存。
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
緩存被廣泛應(yīng)用于計算機(jī)科學(xué)和你幾乎可以到處找到它。例如,內(nèi)存本身可以被視為一種方式來緩存運(yùn)行的程序的代碼來避免讀取CPU(慢)硬盤疏億萬次。4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
一般有幾種不同的級緩存重點(diǎn)在Web開發(fā)。從字節(jié)碼緩存,應(yīng)用緩存,代理緩存??纯催@篇文章從盧西亞諾了解更多關(guān)于這些緩存類型
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
一旦你得到了緩存的概念,通過它真的很容易。問題出現(xiàn)時,你需要了解是否有改變和緩存版本的數(shù)據(jù)可能不相關(guān)了。在這種情況下,您需要刪除的數(shù)據(jù)緩存來確保它得到正確的情況下它的要求。這個過程被稱為“緩存失效”,通常是開發(fā)商的一點(diǎn),一個非常著名的報價存在的瘋狂:4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
沒有銀彈使緩存失效容易,它真的取決于你的代碼的架構(gòu)和應(yīng)用程序的要求。一般不緩存層你有更好的:總是避免增加復(fù)雜度!4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
規(guī)則5:避免該死的N 1的查詢問題4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
“then 1查詢問題“是一個很常見的反模式中使用尤其是在處理關(guān)系數(shù)據(jù)庫?;旧纤菑臄?shù)據(jù)庫記錄的查詢生成N 1(一讀N IDS和1的每一個記錄)。看看下面這段代碼有一個真實(shí)的案例(嗯…真的)例子:4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
代碼加載一個用戶列表先給定一塊,為每一個用戶,它負(fù)載他的后登錄時間從數(shù)據(jù)庫。這段代碼產(chǎn)生以下N 1查詢:4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
這顯然是低效的,它經(jīng)常與“有很多數(shù)據(jù)庫”的關(guān)系,尤其是當(dāng)你使用某種魔法的ORM,你不知道它是從盒子做(也許你還沒有配置好)。4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
通常你可以通過產(chǎn)生一個查詢?nèi)缦陆鉀Q這個問題:
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
或用語法盡可能加入4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
這個問題只能解決當(dāng)你在你的SQL查詢控制或如果你有一個清楚的了解你所使用的ORM庫(如果你使用一個)。4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
無論如何,記住,你一定不要在N 1查詢的陷阱,尤其是當(dāng)你處理大數(shù)據(jù)集。很多PHP分析器允許你檢查生成的查詢每次請求頁面時,他們可以理解如果你正在做的事情正確避免N 1查詢問題方面非常有用的同伴。
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
規(guī)則6:橫向規(guī)模!4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
“可擴(kuò)展性”是不完全相同的“表演”,但只這兩件事是緊密交織在一起的。4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
給你我個人的定義,“可擴(kuò)展性”是一個系統(tǒng)的適應(yīng)和保持功能沒有明顯的性能問題,當(dāng)用戶數(shù)增長的能力(要求)。
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
這是一個非常復(fù)雜的話題,我不想在這里廣泛進(jìn)入細(xì)節(jié)。但為了表現(xiàn)值得了解和記住一些簡單的事情你可以做,以確保您的應(yīng)用程序可以很容易地擴(kuò)展水平。4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
水平縮放is a particular調(diào)整策略你在其中添加更多的機(jī)器集群在您的應(yīng)用程序部署。這樣的負(fù)荷分在所有的機(jī)器,從而使整個系統(tǒng)能夠保持高性能即使有大量的并發(fā)請求。
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)
考慮到當(dāng)準(zhǔn)備水平縮放兩大問題用戶會話和用戶文件的一致性4Eg北京網(wǎng)站設(shè)計開發(fā),小程序開發(fā),公眾號,微信開發(fā)-云智互聯(lián)