亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

一個簡單 java 項(xiàng)目的優(yōu)化過程(未完...)

Magicer / 487人閱讀

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

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

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

先不做壓測了,直接在 chrome 里打開看響應(yīng)耗時,
請求時間可以忽略不計,等待時間和文檔下載時間都太長了

后端緩存優(yōu)化

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

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

后端服務(wù)我直接用 netty 做服務(wù)和 api,沒有設(shè)置壓縮導(dǎo)致 api 文本很大
調(diào)試一個類似大小的之前項(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

而我目前卻還沒做壓縮處理,
直接請求 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);

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

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

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

但是不好使,找了半天也沒找到資料,最后只能把壓縮轉(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;

在不聲明文檔類型的時候,通過 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)文本有了很大的壓縮,下載時間大大減少了(在我做筆記的時候api 的文檔大小因?yàn)閿?shù)據(jù)變化而減少了3k)

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

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

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

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ù)庫連接關(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

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

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

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

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萬。耗時58秒。使用了連接池后,

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

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

未完待續(xù)...

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/64451.html

相關(guān)文章

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

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

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

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

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

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

    twohappy 評論0 收藏0

發(fā)表評論

0條評論

Magicer

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<