中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

從四分鐘到兩秒:我的客戶端性能優(yōu)化實(shí)踐

2019-03-26    來(lái)源:博客園

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

最近跟售后經(jīng)理吃飯,他跟我再次談起兩年前為公司臨時(shí)寫的一個(gè)客戶端,仍然非常激動(dòng)的跟我說(shuō),這個(gè)客戶端完爆了公司其他版本的客戶端,包括最老的Delphi寫的,Asp.Net寫的,以及最新的Wpf寫的客戶端。無(wú)論是多么大的界面(集成的機(jī)房多),這個(gè)系統(tǒng)都是瞬間打開,而且運(yùn)行非常穩(wěn)定,一旦成功部署之后基本沒(méi)有任何問(wèn)題。

這個(gè)版本的客戶端僅僅只是一個(gè)臨時(shí)替代的版本:原來(lái)的Delphi客戶端實(shí)在是太慢了,在大型的數(shù)據(jù)中心監(jiān)控中需要4~5分鐘才能進(jìn)入主監(jiān)控界面,而asp.net版本的客戶端又經(jīng)常存在不穩(wěn)定的情況(IE瀏覽器不支持7*24小時(shí)的異步刷新),最新的Wpf客戶端又還在設(shè)計(jì)階段,于是臨危受命決定開發(fā)一個(gè)臨時(shí)過(guò)渡版本,當(dāng)時(shí)也只是開發(fā)了一個(gè)月,沒(méi)想到竟然如此成功,至今仍讓我們的售后部門津津樂(lè)道。這中間其實(shí)沒(méi)有太多高深的技術(shù),但是卻有很多的開發(fā)技巧以及編程的思想。我至今仍然看到很多人都在犯這么一些簡(jiǎn)單的錯(cuò)誤(例如VS2010工具箱的加載項(xiàng)),導(dǎo)致他們的系統(tǒng)非常緩慢,但是他們卻總是抱怨是編程語(yǔ)言的問(wèn)題,是windows系統(tǒng)的問(wèn)題,是機(jī)器的性能不行……

我決定把我的一些實(shí)踐經(jīng)驗(yàn)跟大家分享:不是非得你有多么牛逼的技術(shù),才能做出一個(gè)穩(wěn)定快速的系統(tǒng),更多的時(shí)候,它取決于你是否有一個(gè)產(chǎn)品的意識(shí),是否讓你的軟件真正貼近用戶。

系統(tǒng)界面與功能

先來(lái)看看原來(lái)的系統(tǒng)界面是怎樣子的:

功能如下,我新寫的客戶端增加了支持生成OCX控件的功能:

整個(gè)系統(tǒng)的物理架構(gòu)是這樣的:

原系統(tǒng)存在的問(wèn)題

  • 加載主頁(yè)面慢
    • 隨著界面數(shù)量的增加,會(huì)需要更多的加載時(shí)間
    • 隨著地點(diǎn)和設(shè)備的增加,加載會(huì)需要更多的時(shí)間
  • 頁(yè)面之間切換卡
  • 數(shù)據(jù)顯示慢
  • 地點(diǎn)的報(bào)警狀態(tài)顯示不準(zhǔn)確且存在延遲
  • 報(bào)警并發(fā)較多時(shí)卡頓更嚴(yán)重

客戶端性能優(yōu)化的基本手法

我們來(lái)看看通過(guò)一些什么手法能夠解決原來(lái)的系統(tǒng)存在的這些問(wèn)題。

按需獲取

大部分的情況下,我們其實(shí)所能看到的東西都是極其有限的,無(wú)論系統(tǒng)是多么龐大,功能多么的豐富,其實(shí)呈現(xiàn)給用戶的都是極其有限的。

監(jiān)控界面的按需獲取

前面說(shuō)了,監(jiān)控主界面里的界面都是組態(tài)的,是由工程師拖拉控件上去實(shí)現(xiàn)的,大家也看到上面圖形還算豐富,主要是使用了大量的圖片,因此我們系統(tǒng)中在保存這些組態(tài)界面的時(shí)候,同時(shí)也保存了界面圖片的字節(jié)流。大型的數(shù)據(jù)中心由于界面較多,這些界面加起來(lái)是可能會(huì)超過(guò)1G大小的。這么大的界面,如果都是直接加載到界面中,首先就要費(fèi)不少的時(shí)間,即使是在內(nèi)網(wǎng)的情況下,假設(shè)你網(wǎng)絡(luò)能夠1s下載20M左右,也要50秒,接近1分鐘,遇上網(wǎng)絡(luò)高峰,花個(gè)1~2分鐘并不奇怪。

我們是否有必要把所有界面都加載進(jìn)來(lái)呢,當(dāng)然沒(méi)有。我們只需加載第一個(gè)界面,其他界面在需要的時(shí)候(用戶點(diǎn)擊或者發(fā)生告警需要跳轉(zhuǎn)的時(shí)候)才加載,這樣我們的速度里面就提升了,這就是按需加載!

當(dāng)然說(shuō)的輕巧,實(shí)際做的會(huì)有很多問(wèn)題。比如,如何實(shí)現(xiàn)不實(shí)現(xiàn)頁(yè)面又能知道該頁(yè)面是否告警(必須解析每個(gè)界面上的控件,才能知道某個(gè)界面包含了哪些控件,才知道監(jiān)控指標(biāo)告警在哪個(gè)界面上)?

我的步驟如下:

  • 保存界面的時(shí)候,把界面上的控件的Id列表存儲(chǔ)到設(shè)備記錄中
  • 加載時(shí)只加載所有的設(shè)備記錄(名稱+控件Id列表)
  • 把對(duì)應(yīng)的信息附加到樹形節(jié)點(diǎn)中
  • 根據(jù)對(duì)應(yīng)的樹形節(jié)點(diǎn)的告警信息在需要顯示界面時(shí)生成界面

按需刷新界面上的數(shù)據(jù)

做監(jiān)控系統(tǒng),除了告警頁(yè)面必須實(shí)時(shí)通知到客戶外,監(jiān)控?cái)?shù)據(jù)界面,其實(shí)只需展示當(dāng)前顯示頁(yè)面的數(shù)據(jù)即可。

怎么做呢,我們可以提供一個(gè)單獨(dú)的程序來(lái)管理所有接收到的數(shù)據(jù),然后再提供一個(gè)獲取當(dāng)前數(shù)據(jù)的接口給客戶端,具體請(qǐng)看下面更改的架構(gòu)。

有些人可能會(huì)疑問(wèn),為什么不直接在采集器中提供這個(gè)接口呢?因?yàn)檫@是組態(tài)界面,界面上的控件要取哪個(gè)采集器的數(shù)據(jù)是未知的,所以把數(shù)據(jù)放在一起統(tǒng)一管理會(huì)更加方便。而且采集器可以7*24小時(shí)工作,而客戶端是經(jīng)常要打開關(guān)閉的……

VS2010中的反例

如果用過(guò)VS2010開發(fā)自定義的Winform組件,那么大家對(duì)它的工具箱加載自定義組件這個(gè)功能肯定印象深刻,每次選擇添加項(xiàng),然后選擇自定義控件dll的時(shí)候,都非常痛苦,尤其我電腦比較忙而又裝了不少插件的情況下,為了一個(gè)非常簡(jiǎn)單的功能,我需要花費(fèi)4分多的時(shí)間來(lái)打開那個(gè)選擇文件的界面,這個(gè)界面加載了一大堆我絕大多數(shù)時(shí)候都用不上的COM組件,我實(shí)在沒(méi)法想象開發(fā)這個(gè)功能的程序猿是怎么想的。還好,在VS2013中微軟總算是改進(jìn)了這個(gè)功能,但是做得還不夠。按我的想法,完全可以把COM組件部分異步加載,給出正在加載的提示即可,可以立即顯示“選擇”按鈕,這樣體驗(yàn)性立即上升了一個(gè)層次。

延遲加載

延遲加載是指用到的時(shí)候,再去進(jìn)行實(shí)際的構(gòu)建。

標(biāo)簽:  突Ф擻嘔

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:百度新算法外鏈與內(nèi)容哪個(gè)重要?

下一篇:回顧:2014年最流行前端開發(fā)框架對(duì)比評(píng)測(cè)