成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

一個(gè)簡(jiǎn)單 java 項(xiàng)目的優(yōu)化過(guò)程(未完...)

Magicer / 438人閱讀

摘要:第一次寫(xiě)項(xiàng)目,用的,也沒(méi)啥經(jīng)驗(yàn),前期開(kāi)發(fā)比較緊所以以實(shí)現(xiàn)功能為主,下面記錄自己的一些性能優(yōu)化筆記。如果是在不使用數(shù)據(jù)庫(kù)連接池的情況下,必須在使用完數(shù)據(jù)庫(kù)之后關(guān)閉連接。所以使用數(shù)據(jù)庫(kù)連接池勢(shì)在必行,不然就是費(fèi)代碼了。

第一次寫(xiě) java 項(xiàng)目,用的 netty5.0,也沒(méi)啥經(jīng)驗(yàn),前期開(kāi)發(fā)比較緊所以以實(shí)現(xiàn)功能為主,下面記錄自己的一些性能優(yōu)化筆記。
以某接口為例,該接口是 feed 流,里面包含的信息有:

30條 feed 信息
每條 feed 下的最近的5條評(píng)論,和該評(píng)論總數(shù)
每條 feed 屬主的用戶信息
每條 feed 屬主和瀏覽者的好友關(guān)系
每條 feed 屬主和瀏覽者的地理位置距離

先不做壓測(cè)了,直接在 chrome 里打開(kāi)看響應(yīng)耗時(shí),
請(qǐng)求時(shí)間可以忽略不計(jì),等待時(shí)間和文檔下載時(shí)間都太長(zhǎng)了

后端緩存優(yōu)化

將上面所有的信息都在 redis 緩存后的耗時(shí)

服務(wù)器優(yōu)化

后端服務(wù)我直接用 netty 做服務(wù)和 api,沒(méi)有設(shè)置壓縮導(dǎo)致 api 文本很大
調(diào)試一個(gè)類似大小的之前項(xiàng)目的 api 做了壓縮處理的,發(fā)現(xiàn)文檔大小變化很大,如下圖 124k 被壓縮到了9.4k
返回的頭信息

HTTP/1.1 200 OK
Server: nginx
Date: Tue, 25 Aug 2015 04:14:54 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Content-Encoding: gzip
Vary: Accept-Encoding

而我目前卻還沒(méi)做壓縮處理,
直接請(qǐng)求 netty 返回的頭信息

HTTP/1.1 200 OK
content-length: 126792
connection: keep-alive

走前端 nginx 轉(zhuǎn)發(fā)到后端 netty 返回的頭信息

HTTP/1.1 200 OK
Server: nginx
Date: Tue, 25 Aug 2015 04:21:39 GMT
Content-Length: 126792
Connection: keep-alive

添加transfer-encoding頭信息

response.headers().set(TRANSFER_ENCODING,HttpHeaderValues.CHUNKED);

雖然不能縮短請(qǐng)求時(shí)間,但是能在接受到第一個(gè) chunked 包就可以開(kāi)始解析 api 文檔了。理論上可以縮短了客戶端加載的時(shí)間(不對(duì)請(qǐng)拍磚)解釋:http://blog.haohtml.com/archives/4777

我嘗試著在 netty 里添加了壓縮

response.headers().set(CONTENT_ENCODING, HttpHeaderValues.GZIP);

但是不好使,找了半天也沒(méi)找到資料,最后只能把壓縮轉(zhuǎn) nginx 里做的處理。
nginx 里的 gzip 配置如下:

  gzip on;
  gzip_min_length  1k;
  gzip_buffers     4 4k;
  gzip_http_version 1.0;
  gzip_comp_level 2;
  gzip_types       text/plain application/x-javascript text/css application/xml text/javascript;
  gzip_vary on;

在不聲明文檔類型的時(shí)候,通過(guò) nginx 反向代理之后的 http 返回頭信息如下:

HTTP/1.1 200 OK
Server: nginx
Date: Tue, 25 Aug 2015 07:49:39 GMT
Transfer-Encoding: chunked
Connection: keep-alive

在 netty 里添加了文件類型聲明之后

response.headers().set(CONTENT_TYPE,HttpHeaderValues.TEXT_PLAIN);

再看 nginx 返回的信息則有壓縮了

HTTP/1.1 200 OK
Server: nginx
Date: Tue, 25 Aug 2015 07:55:57 GMT
Content-Type: text/plain; charset=utf-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Content-Encoding: gzip


發(fā)現(xiàn)文本有了很大的壓縮,下載時(shí)間大大減少了(在我做筆記的時(shí)候api 的文檔大小因?yàn)閿?shù)據(jù)變化而減少了3k)

數(shù)據(jù)庫(kù)連接的優(yōu)化

今天在來(lái)公司的路上想到,我們大 PHP 在使用數(shù)據(jù)庫(kù)的時(shí)候基本上是使用了就不用關(guān)(在析構(gòu)函數(shù)里釋放數(shù)據(jù)庫(kù)連接),在同一個(gè)請(qǐng)求里面使用的數(shù)據(jù)庫(kù)連接是同一個(gè),在請(qǐng)求完畢的時(shí)候就釋放該數(shù)據(jù)庫(kù)連接。

做了如下測(cè)試,模擬一個(gè) api 需要做30次數(shù)據(jù)庫(kù)查詢

for ($i=1; $i < 30; $i++) { 
    $sql = "select 1 from user limit where id=".$i;
    $res = $db->query($sql);
    echo "查詢了".$i."次
";
}
zhoumengkang$ mysql -uroot -pzmkzmk -e "show global status"|grep "Connections"
Warning: Using a password on the command line interface can be insecure.
Connections    30198
zhoumengkang$ php 2.php
查詢了1次
查詢了2次
查詢了3次
查詢了4次
查詢了5次
查詢了6次
查詢了7次
查詢了8次
查詢了9次
查詢了10次
查詢了11次
查詢了12次
查詢了13次
查詢了14次
查詢了15次
查詢了16次
查詢了17次
查詢了18次
查詢了19次
查詢了20次
查詢了21次
查詢了22次
查詢了23次
查詢了24次
查詢了25次
查詢了26次
查詢了27次
查詢了28次
查詢了29次
查詢了30次
數(shù)據(jù)庫(kù)連接關(guān)閉了
zhoumengkang$ mysql -uroot -pzmkzmk -e "show global status"|grep "Connections"
Warning: Using a password on the command line interface can be insecure.
Connections    30200

加上上面終端請(qǐng)求查詢數(shù)據(jù)庫(kù),共增加了兩個(gè)連接,也就是說(shuō)上面的30次請(qǐng)求就連接了一次數(shù)據(jù)庫(kù)。

如果是 java 在不使用數(shù)據(jù)庫(kù)連接池的情況下,必須在使用完數(shù)據(jù)庫(kù)之后關(guān)閉連接。類似的方法測(cè)試發(fā)現(xiàn) java 會(huì)連接30次數(shù)據(jù)庫(kù)。所以使用數(shù)據(jù)庫(kù)連接池勢(shì)在必行,不然就是費(fèi)代碼了。

弄了半天,使用的是apache.commons.dbcp,做了下壓測(cè)對(duì)比,還是在一個(gè) api 里做30次數(shù)據(jù)庫(kù)插入操作。
在不使用連接池的情況下

zhoumengkang$ ab -c100 -n1000 "http://localhost:8081/?method=test"
Requests per second:    17.24 [#/sec] (mean)
Time per request:       5800.506 [ms] (mean)

連接數(shù)直接增加了3萬(wàn)。耗時(shí)58秒。使用了連接池后,

Requests per second:    158.87 [#/sec] (mean)
Time per request:       629.462 [ms] (mean)

設(shè)置的最小連接數(shù)20,耗時(shí)6秒。相差還是很大的。

未完待續(xù)...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64451.html

相關(guān)文章

  • 前端模塊化和構(gòu)建工具

    摘要:以前一直對(duì)前端構(gòu)建工具的理解不深,經(jīng)過(guò)幾天的研究特意來(lái)總結(jié)一下,第一次寫(xiě)博客,有寫(xiě)錯(cuò)的請(qǐng)多多見(jiàn)諒,該文章我也從其他博客拷了一些內(nèi)容,如果有冒犯之處,請(qǐng)指出。強(qiáng)大的設(shè)計(jì)使得它更像是一個(gè)構(gòu)建平臺(tái),而不只是一個(gè)打包工具。 以前一直對(duì)前端構(gòu)建工具的理解不深,經(jīng)過(guò)幾天的研究特意來(lái)總結(jié)一下,第一次寫(xiě)博客,有寫(xiě)錯(cuò)的請(qǐng)多多見(jiàn)諒,該文章我也從其他博客拷了一些內(nèi)容,如果有冒犯之處,請(qǐng)指出。 如今,網(wǎng)頁(yè)不再...

    ad6623 評(píng)論0 收藏0
  • 【半月刊 4】前端高頻面試題及答案匯總

    摘要:引言半月刊第四期來(lái)啦,這段時(shí)間新增了道高頻面試題,今天就把最近半月匯總的面試題和部分答案發(fā)給大家,幫助大家查漏補(bǔ)缺,歡迎加群互相學(xué)習(xí)。更多更全的面試題和答案匯總在下面的項(xiàng)目中,點(diǎn)擊查看。引言 半月刊第四期來(lái)啦,這段時(shí)間 Daily-Interview-Question 新增了 14 道高頻面試題,今天就把最近半月匯總的面試題和部分答案發(fā)給大家,幫助大家查漏補(bǔ)缺,歡迎 加群 互相學(xué)習(xí)。 更多更...

    hankkin 評(píng)論0 收藏0
  • 反思總結(jié)然后整裝待發(fā)

    摘要:保證上線后的版本不會(huì)因?yàn)g覽器緩存而產(chǎn)生影響。前端部分之后會(huì)有多人合作,為了提高效率決定采用組件化開(kāi)發(fā)。對(duì)之后的維護(hù)工作造成了一點(diǎn)困擾。之后的日子里做到一周更新兩篇博文,主要是實(shí)際項(xiàng)目中遇到的具體問(wèn)題來(lái)加以總結(jié)和分析,未完待續(xù)。 原文鏈接: http://xdlrt.github.io/2016/1...距離上次更博已經(jīng)過(guò)去兩個(gè)月了,終于也有時(shí)間能靜下心來(lái)想一些事情,也對(duì)這幾個(gè)月的生活做...

    twohappy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Magicer

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<