2012-08-26 14 views
1

我正在創建一個小的Java Web應用程序,其中我定義了一個路由文件,該文件爲每個操作指定應執行的控制器的方法。Play的Java反射的性能和替代品!框架類似於路由的功能

爲了做到這一點,我解析了這個路由文件,並在我的主要Servlet中,基於接收到的調用,我使用反射來調用所需的方法。

但是,Java反射會導致性能開銷(基於JVM等)。

因此,我想問一下,如果這是正確的程序,或者有另一種替代方案來執行此類任務。

非常感謝!

+3

聽起來像你正試圖重寫播放框架。爲什麼不使用Play的路由呢? – emt14

+1

你也可以看看SpringMVC的這個路由器https://github.com/resthub/springmvc-router –

+0

我想知道這個路由是如何工作的以及哪個是實現這種特性的最佳方式。也感謝鏈接,我會檢查出來! –

回答

4

在這種情況下,通過反射調用方法的性能開銷可以忽略不計:我估計反射方法調用的時間大約爲0.1微秒,而客戶端和服務器之間的網絡延遲很容易爲10毫秒。也就是說,響應時間的小於0.001%是由於反射開銷。回覆主題消息:當被告知某些事情「緩慢」時,總是詢問「與什麼相比」,並嘗試評估是否可以在對性能進行優化之前產生可測量的性能影響。 (如果您需要解決實際的性能問題,請測量您的程序的哪些部分較慢,優化這些部分 - 然後再測量一次)。

0

反思似乎是動態路由的一種方式,並且對開發人員提供了良好的反饋,所有這些都在快速的開發/測試周期中進行。

作爲移除開銷的​​替代方案,可以想象有一個「編譯」步驟,可以從路由文件中生成Java代碼。但我個人不會推薦。

在任何情況下,規定性能是一個問題似乎是不成熟的,沒有測量它。