posted @ 2009-05-31 20:31 云自無心水自閑 閱讀(3008) | 評論 (0) | 編輯 收藏
posted @ 2009-05-30 13:55 云自無心水自閑 閱讀(3105) | 評論 (0) | 編輯 收藏
Ben Gidley進行了一個關于Tapestry5.1.0.5的性能測試。原文見:http://blog.gidley.co.uk/2009/05/tapestry-load-testing-round-up.html
最后,他得出的結論是:
1、Tapestry的速度是比較快的。即使在一定的壓力下Tapestry的反應時間也相當短。Tapestry并不總是最快的解決方案,但它對于我(譯注:Gidley)已經足夠快了。
2、Tapestry沒有內存泄漏。我以前曾經聽說過Tapestry會占用大量的內存,實際上,正好相反。它使用的內存比struts/jsp還要少。內存使用曲線相當的平坦。
3、Tapestry在表單應用中比struts要快。Tapestry在應用變得非常復雜的時候有一定的優勢。這可能利益于其模塊池技術。
4、Tapestry不輕易崩潰,即使崩潰,也會恢復。Tapestry在極大壓力的情況下確實會相應變慢,但是它會暫停或者遇到瓶頸(譯注:我懷疑是作者這里有筆誤,從語氣和上下文來看,感覺應該不是暫停和沒有瓶頸),這的確是一個好事情。另外在壓力減輕之后,Tapestry能夠自動恢復。
5、更多的CPU并一定會提升性能。在一系列的測試中,性能與CPU的數量并不是線性增長。2個CPU確實比一個CPU的性能翻倍了,但是4個CPU并不比2個CPU的性能翻倍。因此,建議在多個雙核CPU的虛擬機上運行,而不是少數的4核CPU上運行。
6、64位比32位要快。這一點很讓我驚奇。不管在Solaris還是Linux上,運行在64位JVM中要比在32位JVM要快。
7、Linux要比Open Solaris X86要快。這一點同樣讓我驚奇。我本來以為性能應該是相似的。
最終的結論是:Tapestry即使是對于一個大并發量的Web應用來說也已經足夠快了。如果你的應用有性能問題的話,那么問題應該出在你自己本身的代碼上。
上述是原文的翻譯。下面是一些評論:
Howard(應該是Tapestry的作者):Taptestry5和Struts相比,我認為差別應該是在反射的使用上(包括在java.bean.Introspector中大量的synchronization)。因此在Struts將查詢參數的名稱映射成JavaBean屬性的時候,會比較耗時。而Tapestry5是不使用反射的,Tapestry在查詢參數和JavaBean的屬性之間使用一種“預編程”向量組件,也許這就是兩者(Tapestry和Struts)的差別。當然,這只是猜想,如果要證實的話,是需要花費很多時間的。我認為OGNL的教訓不是說反射很慢,而是在于一個關鍵代碼上的序列存取對于性能的影響是相當大的。
最后一個小提示:我覺得在Tapestry5應用中如果把BeanModel從BeanModelSource中只提取一次,然后給Grid,BeanEditForm等等提供一個可以存取的方法,將會獲得相當的性能提升。這樣就不是需要每次都重建BeanModel,將減少操作的消耗。
jeverest:我也進行了Tapestry的性能測試,并且同意Tapestry5的性能比較以前版本的要快。
posted @ 2009-05-16 19:38 云自無心水自閑 閱讀(2208) | 評論 (1) | 編輯 收藏
Tapestry5.1經過數個alpha,Beta版的非正式發布,今天終于在主頁看到最終正式版5.1.0.5的發布。
這次的版本算得上是比較迅速了,從官方主頁中可以看到,第一版5.1.0.1是2月24日發布了,短短3個月不到的時間,發了4個版本,動作不可謂不迅速。
5.1中具有以下幾個新特性
1、Tapestry現在開始采用BlackBird作為JavaScript的調試工具
2、一個Ajax的事件請求現在可以返回一個MultiZoneUpdate實例來更新瀏覽器中的多個區
3、客戶端數字的檢驗實現了國際化
4、相對于5.0.18有顯著的性能提升,主要是頁面的加載時間和頁面的渲染時間大大縮短
5、Tapestry的IoC服務現在既可以是Advised也可以是Decorated
6、Tapestry的服務現在可以注入到Spring的Bean中
7、對于支持Gzip的客戶端,Tapestry現在可以壓縮返回包
8、有序的和Mapped的配置信息現在可以被重新賦值
9、屬性表達式得到加強,現在可以調用有參數的方法,或者創建一個列表
10、IoC的貢獻既可以是類(自動生成實例)也可以是具體的實例
11、現在提供了一個簡單的可以重寫內建服務的方法
這里面最讓我感興趣的還是性能的提升,不知道在展示大數據量的時候性能的提升到底有多少,有機會一定要測試一下。
posted @ 2009-05-07 21:08 云自無心水自閑 閱讀(1723) | 評論 (0) | 編輯 收藏
今天,我在Sql Brower中用Sql命令插入了幾條數據卻沒有被復制。
原因是這樣的:我在Sql Browser中沒有選擇我需要數據更新的數據庫,而且使用Mysql這個數據庫作為當前數據庫。
而在Sql中指定了我的數據庫名稱,這樣,我的數據如我所愿地進行了更新。
但是,通過這種方式的操作好像無法被復制。
我思考了一下,覺得應該是Log記錄的問題,MySql設置了數據庫復制后,有一個Log會記錄所有數據庫的變更,另一個數據庫會根據這個Log來進行同樣的數據操作。這樣就實行了數據的復制。
我感覺如果你沒有使用use <數據庫名>這個命令,而是使用其他的數據庫作為當前數據庫,那么Log的記錄就缺失了,因此復制也將不會進行。
posted @ 2009-05-02 22:06 云自無心水自閑 閱讀(1529) | 評論 (0) | 編輯 收藏
2. 不知道為什么,我無法使用development.conf來啟動Resin, 只有resin.conf是可用的。
posted @ 2009-05-01 12:43 云自無心水自閑 閱讀(327) | 評論 (0) | 編輯 收藏
在web.xml中添加:
<servlet>
<servlet-name>JSPSupportServlet</servlet-name>
<servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
在頁面的最上面添加<#assign security=JspTaglibs["http://www.springframework.org/security/tags"] />
使用的時候:
<@security.authorize ifAnyGranted="ROLE_USER,ROLE_ADMIN">
Hello
</@security.authorize>
注意中間用的是句號,而不再是冒號,我一開始在這里沒注意,花了不少時間解決這個問題
2. Context Path的取得
在Google中搜了一下,有人提問題,但是沒有得到解決,后來查資料才知道應該是這樣寫的:
${request.contextPath}
3. 字符串的比較
字符串不能直接比較大小,我原來兩個日期字符串的比較就需要先轉換成日期型
<#if dateString1?date("yyyy-MM-dd HH:mm:ss") < dateString2?date("yyyy-MM-dd HH:mm:ss")>
日期小
</#if>
4. <#if><#else>
在if比較時小于號可以直接使用,但是大于號不行,要寫成
<#if a > b>
</#if>
5. 在jfinal中使用map
在jfinal中如果像通常情況下使用map, <#list map?keys as key> ${key} </#list>
會發現不僅是所有鍵值,所有的java方法名也被打印出來,比如:hashcode, getClass, put, get, clone, equals, containsKey, values等等。
正確的方法是:
<#list map.keySet() as key>
${key}
</#list>
if the key of the map is not String, such as Integer or other types,
we can access the value of the map by map.get( 1 ) instead of map[1]
posted @ 2009-04-28 12:19 云自無心水自閑 閱讀(3421) | 評論 (1) | 編輯 收藏
最主要的原因還是從性能上的考慮。
Tapestry的5.1版的最主要改動就是想提升性能,而JSF似乎還沒有這方面的行動。
而且從Tapestry5.1的版本發布情況來看,動作相當的迅速。預計Final版馬上就要出來了。
據Lewis的說法,Tapestry5.0在頁面內容比較少的時候,速度幾乎和純JSP頁面一樣快。只是在展示大量數據的會有一定的性能瓶頸。
所以,他推出5.1來解決這個問題。
而JSF的實現和組件庫呈現一種百花齊放的狀態,難免會有一些良莠不齊。
當然大家需要選擇其中比較好的,但是選型本身就是一件非常頭疼的事情。
我選擇的是MyFaces+RichFaces,但是我查看了RichFaces的在線Demo后,對其展示速度不是很滿意。
不知道是演示網站的問題還是RichFaces本身的問題。
也歡迎大家進行討論。
不過Tapestry相對JSF而言的一個缺點就是文檔不夠豐富。畢竟JSF是標準啊。
posted @ 2009-04-21 23:09 云自無心水自閑 閱讀(2386) | 評論 (3) | 編輯 收藏
1. 啟動速度比我的MyEclipse7.0要快不少。
2. 部署還是有問題
a. 速度慢,
b. 有一個spring的配置文件沒有自動更新
c. 啟動和停止glassfish都非常慢
3. 沒有內建支持Jetty
posted @ 2009-04-17 10:57 云自無心水自閑 閱讀(452) | 評論 (0) | 編輯 收藏
根據我的觀察,好像只有Tapestry實現了將Taglib嵌入到html控件這樣的功能。或許這個說法不準確,不過最是想表達這樣一個意思。使用了Tapestry標簽的jsp頁面是可以在DreamWeaver之類的頁面編輯工具中完整地顯示出來的。
不你struts或者jsf那樣,使用s:或者h: 即:<s:text>...
而Tapestry是:<input t:type="">
當然,其事件驅動的思想也是與大多數的Web框架不同的,不過JSF在這一點上和它是非常類似的。關鍵是jsf是JEE的標準,而且得到了不少開源組織的 擁護,產生了myfaces之類的實現,而且有了大量諸如:fichfaces,icefaces,restfaces等等的components package. 在這一點上是Tapesty無法比擬的。
posted @ 2009-04-02 07:36 云自無心水自閑 閱讀(348) | 評論 (0) | 編輯 收藏