包含extjs內存監視的詞條

本文目錄一覽:

ExtJS是什麼,一位學長說的,對這個從未聽說

1.extja是什麼?

答: ExtJS是一種主要用於創建前端用戶界面,是一個與後台技術無關的前端ajax框架。

功能豐富,無人能出其右

無論是界面之美,還是功能之強,ext的表格控制項都高居榜首。

單選行,多選行,高亮顯示選中的行,推拽改變列寬度,按列排序,這些基本功能咱們就不提了。

自動生成行號,支持checkbox全選,動態選擇顯示哪些列,支持本地以及遠程分頁,可以對單元格按照自己的想法進行渲染,這些也算可以想到的功能。

再加上可編輯grid,添加新行,刪除一或多行,提示臟數據,推拽改變grid大小,grid之間推拽一或多行,甚至可以在tree和grid之間進行拖拽,啊,這些功能實在太神奇了。更令人驚嘆的是,這些功能竟然都在ext表格控制項里實現了。

呵呵~不過ext也不是萬能的,與fins的ecside比較,ext不能鎖定列(土豆說1.x里支持鎖定列,但是2.0里沒有了,因為影響效率。),也沒有默認的統計功能,也不支持excel,pdf等導出數據。另外fins說,通過測試ecside的效率明顯優於ext呢。:)

[編輯本段]Ext發展史

1、第一隻「出海」的YUI-Ext只是作者Jack打算對基於BSD協議的Yahoo!UI庫進行自定義的擴展,但後來一度風頭蓋過其父輩YUI,足以說明 大家對它的熱情,很多人把它投入項目人並不十分了解它。分析人士打了一比喻:就好比尚未謀面, 並不了解一個人的家庭、教育、品行等背景,只因為他有一副精緻漂亮的外觀,就對其陷入了瘋狂的傾慕之中。因此分析人士建議,在投入項目前,要認真仔細地了 解EXT的內在原理和與其他Ajax庫不同地方。

2、在2006年初 ,Jack Slocum(傑克斯·洛克姆 ) 就一套公用設施擴建為Yahoo! User Interface (YUI) 庫而工作。這些擴展很快組織成一個獨立的庫代碼並以」 yui-ext」 的名義下發布。

3、在2006年秋天,Jack發行了版本為0.33的yui-ext,而最終被證明為最後版本的代碼,根據這名字(下開放源代碼DSB許可)。在年底之前,這個庫已大受歡迎, 名字被簡化為Ext,反映了它作為一個框架的成熟和獨立。

該公司成立於2007年初,Ext現在為雙執照,使用LGPL和一個商業執照。

4、在2007年4月1日,發布1.0正式版。

5、直至今日(2008年4月1日)ExtJS已發展涵蓋美國、日本、中國、法國、德國等全球範圍的用戶,現在的版本為Ext-3.0

6、官方在2009年4月14-16日的首次Ext Conference中發布了Ext的3.0 RC版本。

7、2009年5月4日,Ext的3.0 版本發布。

[編輯本段]什麼是EXT

1、ExtJS可以用來開發RIA也即富客戶端的AJAX應用,是一個用javascript寫的,主要用於創建前端用戶界面,是一個與後台技術無關的前端ajax框架。因此,可以把ExtJS用在.Net、Java、Php等各種開發語言開發的應用中。ExtJs最開始基於YUI技術,由開發人員JackSlocum開發,通過參考JavaSwing等機制來組織可視化組件,無論從UI界面上CSS樣式的應用,到數據解析上的異常處理,都可算是一款不可多得的JavaScript客戶端技術的精品。

2、Ext的UI組件模型和開發理念脫胎、成型於Yahoo組件庫YUI和Java平台上Swing兩者,並為開發者屏蔽了大量跨瀏覽器方面的處理。相對來說,EXT要比開發者直接針對DOM、W3C對象模型開發UI組件輕鬆。

[編輯本段]ExtJs UI Engine簡介

ExtJs初期僅是對Yahoo! UI的對話框擴展,後來逐漸有了自己的特色,深受網友的喜愛。 發展至今, Ext除YUI外還支持Jquery、Prototype等的多種JS底層庫,讓大家自由地選擇。該框架完全基於純Html/CSS+JS技術,提供豐富的跨瀏覽器UI組件,靈活採用JSON/XML數據源開發,使得服務端表示層的負荷真正減輕,從而達到客戶端的MVC應用!

ExtJs支持多平台下的主流瀏覽器 Internet Explorer 6+ FireFox 1.5+ (PC, Mac) Safari2+、Opera9+。在使用的廠家包括IBM、Adobe、Cisco和更多。ExtJs官方網站

[編輯本段]Ajax主流框架與ExtJS

JQuery、 Prototype和YUI都屬於非常核心的JS庫。雖然YUI,還有最近的JQuery,都給自己構建了一系列的UI器件(Widget),不過卻沒有一個真正的整合好的和完整的程序開發平台。哪怕是這些低層的核心庫已經非常不錯了,但當投入到真正的開發環境中,依然需要開發者做大量的工作去完善很多缺失之處。而Ext就是要填補這些缺口。主流開源框架中只有Dojo像Ext一樣,嘗試著提供整合的開發平台。相比Dojo這個出色的工具包,我們認為 Ext能提供一個粘合度更高的應用程序框架。Ext的各個組件在設計之時就要求和其它Ext組件組合一起工作是無縫合作的。這種流暢的互通性,離不開一個緊密合作的團隊,還必須時刻強調設計和開發這兩方面目標上的統一,而這點是很多開源項目未能做到的。從構建每一個組件開始,我們始終都強調組件的外觀、性能、互通性和可擴展性,而我們認為組件已經達到了這幾點的要求。

Ext絕對可以單獨使用。實際上,除了有特定的要求,推薦單獨使用Ext,這樣的話文件佔位更小,支持和整合也更緊密。我們也支持與jQuery、 YUI或Prototype整合使用,作為低層庫的角色出現,以提供處理各種核心的服務,如DOM和事件處理,Ajax連接和動畫特效。使用整合方式的一個原因是它們已具備了一些特定的器件而Ext並沒有原生支持——像YUI的History控制項便是一個典型的例子。這時,Ext需要依賴YUI這個庫的底層來實現History控制項,這樣一來的話也可免去Ext自身底層庫,從而減少了整個程序的內存佔用。另一個使用整合方式的原因是,對於許多已在使用其他底層庫的程序,你可能希望逐步加入Ext。總之,如果已經有了其他庫,Ext可已利用它們。我們的宗旨是為用戶提供各種可能性和性能上的優化。而事實是,只要實現了相對應的底層庫介面,為任意一個框架添加上適配器是沒有問題的——人們可以輕鬆地將Dojo、Moo、Ajax.NET,或其它JS庫轉變為 Ext的底層。

Ext從2.x開始收費,這給他的應用前景帶來一些問題。不過對國內開發人員的影響不大,畢竟是客戶付款。

[編輯本段]Ext學習及應用經驗小結

一、理解Html DOM、Ext Element及Component

要學習及應用好Ext框架,需要理解Html DOM、Ext Element及Component三者的區別。

Ext是基於Web的富客戶端框架,其完全是基於標準W3C技術構建設的,使用到的都是HTML、CSS、DIV等相關技術。Ext最傑出之處,是開發了一系列非常簡單易用的控制項及組件,我們只需要使用這些組件就能實現各種豐富多彩的UI的開發。

無論組件有多少配置屬性、還是事件、方法等等,其最終都會轉化為HTML在瀏覽器上顯示出來,而每一個HTML頁面都有一個層次分明的DOM樹模型,瀏覽器中的所有內容都有相應的DOM對象,動態改變頁面的內容,正是通過使用腳本語言來操作DOM對象實現。

僅僅有DOM是不夠的,比如要把頁面中的某一個節點移到其它位置,要給某一個節點添加陰影效果,要隱藏或顯示某一個節點等,我們都需要通過幾句 javascript才能完成。因此,Ext在DOM的基礎上,創建了Ext Element,可以使用Element來包裝任何DOM,Element對象中添加了一系列快捷、簡便的實用方法。

對於終端用戶來說,僅僅有Element是不夠的,比如用戶要顯示一個表格、要顯示一棵樹、要顯示一個彈出窗口等。因此,除了Element以外,Ext 還建立了一系列的客戶端界面組件Component,我們在編程時,只要使用這些組件Componet即可實現相關數據展示及交互等,而 Component是較高層次的抽象,每一個組件在渲染render的時候,都會依次通過Element、DOM來生成最終的頁面效果。

在使用Ext開發的應用程序中,組件Component是最高層次的抽象,是直接給用戶使用的,Ext Element是Ext的底層API,主要是由Ext或自定義組件調用的,而DOM是W3C標準定義的原始API,Ext的Element通過操作DOM 來實現頁面的效果顯示。

在Ext中,組件渲染以後可以通過訪問組件的el屬性來得到組件對應的Element,通過訪問Element的dom屬性可以得到其下面的DOM對象。另外,我們可以通過通過Ext類的快捷方法getCmp、get、getDom等方法來得組件Component、Ext元素Element及DOM節點。比如:

var view=new Ext.Viewport();//創建了一個組件Component

view.el.setOpacity(.5);//調用Element的setOpacity方法

view.el.dom.innerHTML=”Hello Ext”;//通過Element的dom屬性操作DOM對象

再看下面的代碼:

var win=new Ext.Window({id:”win1″,title:”我的窗口”,width:200,height:200});

win.show();

var c=Ext.getCmp(“win1”);//得到組件win

var e=Ext.get(“win1”);//根據id得到組件win相應的Element

var dom=Ext.getDom(“win1”);//得到id為win1的DOM節點

二、熟悉ext組件體系

Ext2.0對整個框架進行了重構,最為傑出的是推出了一個以Component類為基礎的組件體系,在Component類基礎上,使用面向對象的方法,設計了一系列的組件及控制項。因此,要能遊刃有餘地使用Ext,熟悉Ext組件體系是最基本的。

在《ExtJS實用開發指南》中,有如下面一幅組件圖:

通過組件結構圖我們可以一目了然的看出整個Ext組件繼承及組成體系,當使用一個組件的時間,了解他的繼承體系,這樣可以便於我們掌握組件的各種特性。

三、掌握核心控制項

控制項其實也是組件,比如用於顯示樹信息的TreePanel、用於顯示錶格的GridPanel及EditorGridPanel,還有代表應用程序窗口的Ext.Window等都屬於Ext控制項。在使用Ext的時候,一定要掌握一些核心控制項,特別是處於基類的控制項。比如上面提到的幾個控制項,他們都是繼承於面板Panel,所以我們要重點掌握面板這個核心控制項的特性。比如面板由以下幾個部分組成:一個頂部工具欄(tbar)、一個底部工具欄(bbar)、面板頭部(header)、面板尾部(bottom)、面板主區域(body)幾個部分組成。面板類中還內置了面板展開、關閉等功能,並提供一系列可重用的工具按鈕使得我們可以輕鬆實現自定義的行為,面板可以放入其它任何容器中,面板本身是一個容器,他裡面又可以包含各種其它組件。只要掌握了Panel的應用,那麼學習TreePanel、Window等就會變得簡單得多。

同樣的道理,對於Ext的表單欄位來說,不管是ComboBox,NumberField、還是DateField,他們其它都是 Ext.form.Field類的子類,在他上面定義了表單欄位的各種基本操作及特性。在學習使用表單欄位組件時,一定要重點研究Field這個類,掌握他的主要方法、事件等,就能有助於更好的學習使用其它的欄位。

四、學習及研究示例

由於javascript語言非常靈活,不像靜態強類型語言(比如Java)那樣有固定的代碼設計模式,而往往是不同的人就有不同的編程風格。在實際應用開發中,只有見多識廣,才能在自己的在腦中建立一個開發庫。

學習別人的示例對於我們開發幫助會非常大,示例包括基本組件的應用、綜合應用等多個方面。在此,簡單推薦幾個。

1、Ext官方示例,在ext項目下載包的examples目錄中,包括各個控制項的基本應用演示,同時還有一些比較複雜的組合示例,有簡有繁,非常適合初學者認真研究。

2、Vifir推出的示例,Vifir推出的一些示例主要包括兩類,一種是開源的示例應用,另外一種是針對VIP用戶的實用示例。開源的示例主要是指 wlr單用戶blog系統,這個一個集合了前後台技術的ext綜合示例,而針對VIP用戶的實用示例則是可以作為開發骨架或擴展組件的示例。

3、其它示例,在ext社區中還有很多比較優秀的ext應用示例,有些只是一個應用演示,雖然沒有提供源碼下載,但我們可以直接下載引用的js文件來得到這些示例的ext應用代碼,同樣能取起到非常好的學習效果。

五、多運用

Ext看起來是非常簡單的東西,稍有點編程知識的人,按照《ExtJS實用開發指南》中的入門指南,半小時就能學會使用Ext。然而,當準備使用Ext開發一個項目時,卻不知道從何處入手,或者是在使用Ext的時候,出了一點小問題自己不知道該如何解決。編程是一門實踐性的科學,僅僅靠看書、看別人寫的代碼是遠遠不夠的,因此,必須多做實踐才行,只有通過不斷的練習,大量的使用,才能對Ext的組件特性、事件、事件處理機制以及與伺服器端交互介面等深入的掌握,只有多做運用,深入了解ext的組件的工作原理及機制,才能編寫出高級的Ext的應用。

六、熟讀Ext項目的源代碼

如果要想深入應用Ext,那麼閱讀Ext項目的源代碼這是必不可少的環節,Ext的代碼質量非常高,通過閱讀他的代碼我們可以更加深刻的了解 javascript面向對象編程,Ext代碼中包含了很多高級的js技巧以及設計模式。在使用Ext的過程中,我們經常根據項目的需要對Ext組件進行擴展,設計自己的組件或控制項,而如何實現一個自定義的Ext組件,我們可以從Ext的各個組件源代碼中找到答案。

Ext的源代碼在Ext項目的source目錄。讀Ext源碼,並不一定非要從某一個地方開始,而組件核心代碼Component.js、容器組件代碼 Container.js、面板Panel.js等這些是必看的; core目錄中的Element.js、Ext.js等也是必看的。當需要從一個控制項進行擴展的時候,最好能簡單看一看這個控制項的源代碼。

2.extjs應該很少應用吧 我做jsp的,從來就沒有用過這些東西·

Eclipse裡面放了Extjs4的jar包,Eclipse很卡,卡得死機,這什麼情況呢?

問題出在你安裝Extjs4.0錯誤。沒有那麼大的jar包要安裝。

你先移除掉原來安裝的。

在項目使用時,在項目WEB-INF下建立個ext文件夾複製下面文件進去:

ext-all.js EXT核心庫

ext-all-debug.js EXT調試錯誤用

INCLUDE_ORDER.txt EXT許可文件

adapter/ext/ext-base.js 包含EXT的所有功能,所有的JavaScript腳本都在這裡

src/locale/ext-lang-zh_CN.js 是簡體中文國際化資源文件

resources 目錄下是CSS樣式表和圖片

只要自己的項目中包含上述內容,就可以使用EXT了。使用時,在頁面中導入下面的代碼:

link rel=”stylesheet” type=”text/css” href=”${放置ext的目錄}”/resources/css/ext-all.css”/

script type=”text/javascript” src=”${放置ext的目錄}”/ext-base.js”/script

script type=”text/javascript” src=”${放置ext的目錄}”/ext-all.js”/script

script type=”text/javascript” src=”${放置ext的目錄}”/ext-lang-zh_CN.js”/script

導入時,請注意JavaScript腳本的順序

extjs如何優化緩存?

1,載入慢

1.1 減少要載入的東西

不要動不動就ext-all.js,extjs是可以定製的,如果你用不到tree,就不要包含這個組件了。ExtJs的官網上有詳細的定製方法和工具。

1.2 給出合適的用戶提示

把Js後置,然後前面做一個載入的提示。如果像Gmail那樣給出進度條,或者像很多網遊那樣來點圖片或者Tips啥的就更好了,說不定用戶還會覺得怎麼載入這麼快,我還沒看清楚呢,呵呵。

1.3 用的時候再載入

動態載入,參考使用ExtJs開發MIS系統(2):Js的動態載入。

1.4 只載入一次

別用iframe了,如果你的靜態內容過期做的不好,瀏覽器會經常再不厭其煩的從伺服器下載同樣的東西。

1.5 對你的Js添加過期標記

ext-base.js、ext-all.js都可以設置很長的過期時間,甚至永不過期(如果你不換extjs的版本)。這點對所有靜態內容都很有用,如何設置過期標記請垂詢Google。

2,渲染慢

2.1 少載入少解析、晚載入晚解析

1.1,1.3,1.4都對改善渲染慢的情況有效——載入的少了自然渲染的快了。

2.2 別用iframe

iframe不僅僅可能會使瀏覽器載入兩遍,還一定會使瀏覽器解析兩遍,放棄它吧,真的。

2.3 精心設計你的Js代碼

例如緩存getElementByID()的結果、編譯查詢表達式之類的東西,這個純看Js功力。

2.4 可能的話,讓用戶換個瀏覽器吧

Chrome比IE的Js渲染快是數量級上的差異!構造一個40列,50行的複雜GridPanel試試,你就會深有體會了……對於企業內部的MIS系統,換瀏覽器還是具有可能性的。

3,內存泄露

Ext性能調優方案

1. 將JS進行合併壓縮。

使用yahoo的yui-compress.jar進行壓縮JS,去掉過多的空格和注釋,併合並,減少IO的支出。

2. 將前後台傳輸的數據進行GZIP壓縮。

大數據量的數據傳輸,通過GZIP的壓縮方案,可以減少到25%,有些數據可能會更多。

3. 對大量的JS分析依賴關係,進行動態載入。

這個是關鍵,通過分析所有的JS中的依賴關係,減少了JS載入的數量。從很大程度上提高了性能。

4. 另外對部分頁面進行緩存,而非真正的關閉。

還有一個外部的因素,由於系統使用的客戶機環境上的複雜,我們在多個瀏覽器上進行了測試,只有IE是最慢的,尤其是IE6,後來發現不是IE6要比IE7慢,是因為發現MS發布了腳本引擎cscript 5.7, 而大部分的ie6系統都裝的是5.6, 這個版本上的升級,不僅僅是修改了BUG,在JS的執行速度上也有了較大的提升,於是我們在環境因素上又加上了一條,要求客戶安裝cscript5.7,也大大的提升了頁面的打開時間。

extjs框架工作原理

1、ExtJS可以用來開發RIA也即富客戶端的AJAX應用,是一個用javascript寫的,主要用於創建前端用戶界面,是一個與後台技術無關的前端ajax框架。因此,可以把ExtJS用在.Net、Java、Php等各種開發語言開發的應用中。ExtJs最開始基於YUI技術,由開發人員JackSlocum開發,通過參考JavaSwing等機制來組織可視化組件,無論從UI界面上CSS樣式的應用,到數據解析上的異常處理,都可算是一款不可多得的JavaScript客戶端技術的精品。

2、Ext的UI組件模型和開發理念脫胎、成型於Yahoo組件庫YUI和Java平台上Swing兩者,並為開發者屏蔽了大量跨瀏覽器方面的處理。相對來說,EXT要比開發者直接針對DOM、W3C對象模型開發UI組件輕鬆。

extjs函數調用方法

一、獲取元素(Getting

Elements)

1.Ext.get

var

el

=

Ext.get(‘myElementId’);//獲取元素,等同於document.getElementById(‘myElementId’);//會緩存

2.

Ext.fly

var

el

=

Ext.fly(‘myElementId’)//不需要緩存。

註:享元模式(Flyweight

Design

Pattern)是一種節省內存的模式,該模式的大概原理是建立單個全體對象然後不斷反覆使用它。

3.Ext.getDom

var

elDom

=

Ext.getDom(‘elId’);

//

依據id來查dom節點

var

elDom1

=

Ext.getDom(elDom);

//

依據dom節點來查dom節點

二、CSS元素

4.addClass

Ext.fly(‘elId’).addClass(‘myCls’);

//

加入元素的’myCls’的樣式

5.radioClass

Ext.fly(‘elId’).radioClass(‘myCls’);//添加一個或多個className到這個元素,並移除其所有側邊(siblings)節點上的同名樣式。

6.removeClass

Ext.fly(‘elId’).removeClass(‘myCls’);

//

移除元素的樣式

7.toggleClass

Ext.fly(‘elId’).toggleClass(‘myCls’);

//

加入樣式

Ext.fly(‘elId’).toggleClass(‘myCls’);

//

移除樣式

Ext.fly(‘elId’).toggleClass(‘myCls’);

//

再加入樣式

8.hasClass

if

(Ext.fly(‘elId’).hasClass(‘myCls’))

{//判斷是否已加上這個樣式

//

是有樣式的

}

10.replaceClass

Ext.fly(‘elId’).replaceClass(‘myClsA’,

‘myClsB’);//替換樣式

11.getStyle

var

color

=

Ext.fly(‘elId’).getStyle(‘color’);//返回該元素的統一化當前樣式和計算樣式。

var

zIndx

=

Ext.fly(‘elId’).getStyle(‘z-index’);//返回該元素的統一化當前樣式和計算樣式。

12.setStyle

Ext.fly(‘elId’).setStyle({

display

:

‘block’,

overflow

:

‘hidden’,

cursor

:

‘pointer’

});//設置元素的樣式,也可以用一個對象參數包含多個樣式。

13.getColor

Ext.fly(‘elId’).getColor(‘color’);//為指定的CSS屬性返回CSS顏色

14.setOpacity

Ext.fly(‘elId’).setOpacity(.45,

true);//設置元素的透明度。

15.clearOpacity

Ext.fly(‘elId’).clearOpacity();//清除這個元素的透明度設置

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/243767.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:58
下一篇 2024-12-12 12:58

相關推薦

  • Python創建分配內存的方法

    在python中,我們常常需要創建並分配內存來存儲數據。不同的類型和數據結構可能需要不同的方法來分配內存。本文將從多個方面介紹Python創建分配內存的方法,包括列表、元組、字典、…

    編程 2025-04-29
  • Python變數在內存中的存儲

    該文章將從多個方面對Python變數在內存中的存儲進行詳細闡述,包括變數的聲明和賦值、變數的引用和指向、內存地址的變化、內存管理機制等。 一、聲明和賦值 在Python中,變數聲明…

    編程 2025-04-29
  • Python計算內存佔用

    Python是一種高級的、解釋性的、面向對象的、動態的程序語言,因其易於學習、易於閱讀、可移植性好等優點,越來越受到開發者的青睞。當我們編寫Python代碼時,可能經常需要計算程序…

    編程 2025-04-28
  • 使用Go-Redis獲取Redis集群內存使用率

    本文旨在介紹如何使用Go-Redis獲取Redis集群的內存使用率。 一、Go-Redis簡介 Go-Redis是一個用於連接Redis伺服器的Golang客戶端。它支持Redis…

    編程 2025-04-28
  • Python內置函數——查看對象內存

    本文將介紹Python內置函數中,在開發中查看對象內存的相關函數。 一、id()函數 id()函數是Python內置函數,用於返回對象的唯一標識符,也就是對象在內存中的地址。 nu…

    編程 2025-04-27
  • Python進程池共享內存用法介紹

    本文將從多個方面詳細闡述Python進程池共享內存的相關知識,包括如何使用進程池、進程池的實現原理、進程池中的共享內存管理等。本文內容將涵蓋: 一、進程池的使用 進程池是一種有效的…

    編程 2025-04-27
  • 深入解析Redis內存淘汰策略

    Redis是一個高性能鍵值資料庫,由於其快速、穩定和易於使用,它已經成為很多應用程序中不可或缺的一部分。在使用Redis時,我們需要考慮內存管理問題。Redis內存淘汰策略是如何工…

    編程 2025-04-25
  • 解決SQL Server內存佔用高問題的方法

    一、關閉不必要的服務 在SQL Server安裝時,默認開啟了許多服務,包括SQL Server Browser,SQL Server Agent等。關閉不必要的服務可以釋放內存資…

    編程 2025-04-25
  • c++內存模型的詳細闡述

    一、c 內存模型有哪些 c語言的內存模型主要包括4個方面:數據類型在內存中的分布、存儲類型、指針、內存分配和釋放。 數據類型在內存中的分布,首先是指針類型,在32位系統中佔4個位元組…

    編程 2025-04-23
  • 深入gperftools:性能分析和內存分析工具

    一、gperftools安裝 gperftools是一個用於分析CPU使用率、內存分配和性能分析的工具。在Ubuntu系統上安裝gperftools,我們需要在終端中鍵入: $ s…

    編程 2025-04-23

發表回復

登錄後才能評論