掃二維碼與項(xiàng)目經(jīng)理溝通
我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
Ruby on Rails開發(fā)使得程序員的工作變得如此簡單,以至于很容易讓人誤以為它能解決一切麻煩,從而沒有給予其后臺(tái)情景足夠的注意。程序員要從一開始就把重點(diǎn)放在擴(kuò)展性上,而不是完全依賴于Rails。

公司主營業(yè)務(wù):成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出淇縣免費(fèi)做網(wǎng)站回饋大家。
推薦專題:Ruby on Rails開發(fā)教程
事實(shí)是,Rails(Java 與Ruby on Rails對接)只能解決80%的擴(kuò)展工作。而要完成余下20%的Ruby應(yīng)用程序開發(fā)則需要考慮下面的五個(gè)注意事項(xiàng):
1.留意你的數(shù)據(jù)庫
數(shù)據(jù)庫查詢,尤其是大量的查詢會(huì)造成性能瓶頸。例如,在博客上發(fā)表評論,如果你不小心的話,ActiveRecord可能會(huì)將每個(gè)評論都發(fā)出一次查詢。點(diǎn)擊率很高的博客可能會(huì)有數(shù)以百計(jì)的評論,這意味著每個(gè)頁面會(huì)要執(zhí)行上百次SQL查詢,顯然這會(huì)降低工作效率。
這類問題被稱為“n+1查詢問題”,是我們要避免的。請務(wù)必使用合適的“#include”陳述以便獲取查詢中的相關(guān)對象。此外,要立刻招引上千個(gè)對象。這樣可以實(shí)現(xiàn)平衡。
Rails消除了數(shù)據(jù)庫中繁重的工作但卻不是完全消除。Ruby on Rails開發(fā)將程序員與SQL隔離開,但是隨著網(wǎng)站的發(fā)展以及應(yīng)用程序要擴(kuò)大的需求,你肯定希望能夠手動(dòng)優(yōu)化數(shù)據(jù)庫。要做到這一點(diǎn),需要明白在里面到底發(fā)生了什么。記住在開發(fā)模式中記錄登錄情況,確保SQL查詢記錄在了登錄情況中。這樣,當(dāng)數(shù)據(jù)庫運(yùn)行過多查詢或者要介入以提高效率的時(shí)候,你就會(huì)及時(shí)獲知。(Ruby能否成為第二個(gè)Java?)
2.解除長期執(zhí)行的查詢
毫無疑問,我們都希望自己開發(fā)出的程序能快速運(yùn)行。也就是說,使用這些程序的人不會(huì)關(guān)心程序的背景。如果用戶發(fā)出調(diào)整個(gè)人資料的圖片,視頻編碼等請求,他們不需要在網(wǎng)絡(luò)請求發(fā)出后等待很久。相反,這些做完以后,發(fā)出一個(gè)請求,要在后臺(tái)等待很久才能返回狀態(tài)更新以及獲得頁面的更新。
Rails每次都會(huì)發(fā)出一個(gè)請求,如果長時(shí)間運(yùn)行查詢則會(huì)阻止其他請求的執(zhí)行。盡可能減少網(wǎng)絡(luò)請求的工作,并設(shè)置一個(gè)排隊(duì)機(jī)制,這樣數(shù)據(jù)庫就不會(huì)超載。這樣可以讓應(yīng)用程序運(yùn)行得更快且保持前端網(wǎng)絡(luò)服務(wù)器的開放狀態(tài)。
類似的觀點(diǎn):許多Ruby on Rails開發(fā)的程序都可以處理文件加載和用戶生成的有價(jià)值數(shù)據(jù)。許多這類應(yīng)用程序都將這類數(shù)據(jù)保存在Amazon S3上。在嘗試將視頻上傳到應(yīng)用程序上的同時(shí)處理圖像或上傳視頻到Amazon S3可以完全占用前端服務(wù)器。這意味著用戶的使用速度會(huì)減慢。而是個(gè)網(wǎng)絡(luò)服務(wù)器可以處理許多流量,但是二十個(gè)用戶同時(shí)上傳多個(gè)請求意味著其他人的請求會(huì)超時(shí)或被拒絕。
底線:為提高效率起見,千萬不要在處理請求的時(shí)候進(jìn)行圖像處理或?qū)⑽募蟼鞯搅硪粋€(gè)服務(wù)器上的操作。相反,應(yīng)該接受上傳,將上傳成功的信息返回給客戶端,然后為其他服務(wù)器處理好后臺(tái)繁重的工作。
3.使用緩沖技巧來保存應(yīng)用服務(wù)器和數(shù)據(jù)庫的加載數(shù)據(jù)
任何時(shí)候你都可以緩沖對于計(jì)算或數(shù)據(jù)庫的查詢,即便是只有很短的時(shí)間,你也可以擴(kuò)展整個(gè)系統(tǒng)的規(guī)模。你可以通過數(shù)據(jù)庫緩沖服務(wù)器控制數(shù)據(jù)庫服務(wù)器的加載數(shù)據(jù)。數(shù)據(jù)庫緩沖服務(wù)器可以讓你將查詢或計(jì)算的對象保存在應(yīng)用服務(wù)器中分布的內(nèi)存中。
總的格局是當(dāng)你獲取或計(jì)算對象的時(shí)候,可以將其保存數(shù)據(jù)庫緩沖服務(wù)器中。那么下次你需要對象的時(shí)候,可以首先檢查數(shù)據(jù)庫緩沖服務(wù)器,只有當(dāng)它不存在的時(shí)候,你才會(huì)退回到數(shù)據(jù)庫或重新計(jì)算對象,然后將其保存在緩存中。
一個(gè)好的程序員要了解各種HTTP協(xié)議的各種緩沖功能。使用這些緩沖功能,就可以削減整個(gè)堆棧的負(fù)荷。
4.監(jiān)視與測量
監(jiān)視和測量:服務(wù)器,資源使用,應(yīng)用的性能,頁面響應(yīng)時(shí)長。監(jiān)測的時(shí)候,盡可能地收集信息。如果出現(xiàn)問題,你還擁有信息,性能趨勢和文本。監(jiān)視工具旨在查出性能上的問題。
如果沒有監(jiān)測和記錄,你就不能查看系統(tǒng)。如果問題出現(xiàn)的時(shí)候,你沒有足夠的數(shù)據(jù)可以依靠,效率就會(huì)減慢。
5.讓方案的執(zhí)行環(huán)境成為產(chǎn)品環(huán)境的復(fù)制品
許多程序員都在本地開發(fā)并測試了應(yīng)用程序,因而過早部署了產(chǎn)品。隨后他們便會(huì)遇到問題,因?yàn)檎鎸?shí)的產(chǎn)品環(huán)境與電腦上的不一樣。
執(zhí)行和質(zhì)量保障環(huán)境越接近部署環(huán)境越好。執(zhí)行環(huán)境不需要很大,但是至少要運(yùn)行相同規(guī)模的軟件。理想情況下,測試應(yīng)該與產(chǎn)品數(shù)據(jù)的副本一起運(yùn)行,這些數(shù)據(jù)副本要與部署條件類似。這樣做最大的好處是應(yīng)用程序推送到產(chǎn)品前可以捕捉到錯(cuò)誤,從而節(jié)約我們的時(shí)間和精力。
Ruby on Rails開發(fā)可以讓我們更快到達(dá)端點(diǎn),讓我們有時(shí)間來思考如何擴(kuò)大應(yīng)用程序的規(guī)模。學(xué)習(xí)了以上五點(diǎn)以后,很多擴(kuò)展問題都可以迎刃而解了。

我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流