客戶端動態輸出table資料並展示**,是web應用中較為常見的工作。對於迴圈列印輸出tr,td本身是一件非常僵硬和暴力的程式設計辦法,再加上最後繫結元素innerhtml字元流輸出,系統所消耗的效能代價是非常高昂的,如果我們需要展現的資料非常龐大時,那麼代價也是成倍的。然而這種動態輸出**的方法是大多數客戶端程式員最常用的方法。那麼基於最常用的方法,
如何才能降低效能成本,改善使用者體驗,快速安全的顯示我們所需要的資料呢?
我認為從根本上調優需要從兩個方面去考慮。
1:server的資料吐出和client的資料解析。這裡涉及的知識點較多,今後再做詳細的說明。但是對於較為複雜的xml的資料格式來說,client的解析應該用xpath定址和dom內建物件相結合的方法,高速定位。
2:dhtml的優化。包括dom,css,js的優化,也就是mvc(model, view, control)的優化。
這裡我們用js動態生成乙個table, 構建乙個3000行,8列的**,**分多個版本,便於清晰的比較每個版本不同的效能消耗。
vision 0.1 【耗時14694ms】
貌似以下的寫法是沒有任何錯誤,但是確是最暴力,效率最低,效能消耗最大的寫法。對於大量的資料行和列,用for迴圈拼接元素字串,最後innerhtml輸出是不可取的。
3000記錄頁面載入耗時14694毫秒,近15秒。這樣的頁面資料載入是近乎災難的,應該竭力避免。
vision 0.2 【耗時3623ms】這個版本的**有非常大的改進,採用dom技術動態新增元素,說明在需要處理展現大量資料的情況下,運用dom快速定位並新增繫結元素的方法,效率遠比拼接html元素字串的方法要高許多。
整個頁面載入完成所耗的時間為3623毫秒。3000行的記錄耗時不到4秒,這個版本的**結構和程式設計思路也無可挑剔, 那麼這樣的載入速度是否可以再快些呢?
vision 0.4 【耗時2779ms】
乙個document物件載入速度的優化就是在
vision 0.5 【耗時2650ms】
上乙個版本中的頁面載入速度已經縮短到了2779ms。下面我們對**進行進一步的優化。
我們看到**中dom操作,繫結子元素的方法是由下至上包裹,這樣的元素繫結方式會相對較慢。
create
create
create textnode
第一步 insert textnode into
第二步 insert into
第三步 insert into tbody
現在我們將元素的繫結順序顛倒過來,由上至下的包裹繫結元素
create
create
create textnode
第一步 insert into tbody
第二步 insert into
第三步 insert textnode into
vision 0.6 【耗時2580ms】這個版本中我們要調優的是修改table的css屬性,使用fixed-table布局(layout)。指定了fixed-table布局後的**的列寬使用標籤設定。
fixed-table布局樣式將改善table的效能,因為每個單元格的內容的尺寸不需要進行計算了。這是乙個非常實用的效能改善方法,特別是那些有很多列的大型**。
這個操作也可以通過簡單增加css樣式實現:
vision 0.7 【耗時2210ms】最後的乙個版本的調優就是給單元格賦值的方式。在所有的示例中,建立了乙個textnode,並新增給td。而在這個版本中我們將使用innertext代替插入乙個text節點,**調整為:
td.innertext = "text";
(注意:innertext只在ie中受支援,屬於ie擴充套件,相容firefox可使用innerhtml,但是innerhtml正如文章開頭所說的,效率非常低下,不建議使用)
vision 0.8 【耗時672ms】終極優化將字串作為陣列物件的方式是目前效率最高,效能最優的方式。
效能測試 效能測試步驟
針對此次庫內作業效能測試,梳理一下期間的工作流程 梳理已有的介面指令碼,確認需要做效能測試的幾個介面,即使用率高,對效能有要求的幾個主要介面。結合頁面的操作,和確認的介面,梳理具體的業務邏輯 同時,請開發人員部署了測試環境。測試環境的伺服器指標,盡量和生產環境一致。部署的時候,負載均衡等情況也盡量和...
效能測試之前端效能測試
本次總結總共分為以下部分 1.如何衡量乙個系統是否要做壓測 2.壓測的準備過程 3.壓測工具選擇 4.壓測資料以及報告結果相關 1.如何衡量乙個系統是否要做壓測 首先需要衡量乙個系統是否需要壓測,從以下角度考慮 從兩個角度進行分析 a.業務角度 明確系統是對內使用還是對外使用,使用人數是多少,如果使...
IT之路 效能測試系列 初識效能測試
上一章節我們大概了解了下loadrunner,這一章,我們來認識一下效能測試。說到效能測試,很多同學會有自己不同的感想。web前端的測試同學說 頁面怎麼半天打不開啊,沒辦法測啊,必須改善。一線運維的同學說 靠,系統上線這才多久啊,怎麼就嘎嘣的宕機了?這可以不行啊,客戶跳起來了,必須趕緊處理。終端使用...