2012-07-26 47 views
0

我必須爲Web應用程序(基於這些:java,tomcat,jsp,oracle db)創建一個導航器菜單,一旦用戶登錄,它將出現在所有內容中。關鍵是幾乎每個連接的人都有不同的因此每個人都會看到不同的導航菜單。這是我的第一個Web開發之一,所以我不太瞭解事物如何從客戶端傳達到服務器的概念,反之亦然,因此,最好做什麼,但是我的一些考慮因素有他們的優點和缺點。從服務器角度來看,導航器如何實現最佳?

  • 製作過濾器以在每個請求中加載菜單。這會查詢對它很痛苦的數據庫,因爲在少數情況下,事情會發生變化(或者至少不是很常見)。然而,當有變化時,它會立即加載。
  • 製作一個iframe來加載菜單一次,並從這一個控制第二個iframe(我認爲這是最不鼓勵的,但仍然是一個選項,並且有一個優點是不會每次點擊某個東西時向服務器發出相同的請求)。當有變化時,重新加載會加載新的數據。
  • 使菜單在會話中保持爲對象。這將在用戶登錄後查詢數據庫。每次連接都會加載更改(或通過重新加載按鈕)。但是這種方法會把東西放到服務器內存中,我認爲這是一個糟糕的想法。 (不知道我在這裏說什麼,我錯了嗎?)

正如我所說,我太新了,所以我不知道我可以做什麼。據我所知,我不能寫一個文件到客戶端(例如xml),因此它是菜單的數據源並且每天都會刪除它。我可以用數據在服務器上寫一個文件,所以我不需要從數據庫中查詢(但仍然是對服務器的請求),但是這帶來了其他問題,數據的更改不會被刷新(除非當然,我做了一些需要更多時間和更多事情的東西),我不知道這是否會比訪問數據庫更快。

這是如何最好地實施?考慮開發成本,維護成本,性能(減少上的相同信息的請求,每次點擊),用戶感知延遲以及我在這個主題上尚未看到的成熟度。有關網頁設計書籍的任何建議?

編輯: 我打算使用jsTree的可視化,使菜單能級對Ajax請求加載。

回答

2

我會忘記第二種選擇,並採用最簡單的無狀態選項:第一種。數據庫很快!

如果看起來花費了太多時間或者對數據庫施加了太多的負載(但我懷疑它:加載用戶的provileges應該是非常快的),你可以隨時使用第三個選項。確定它會在會話中存儲菜單(或只是特權),但如果需要,會話也可以寫入磁盤或數據庫。

不要預先優化。

+0

沒有其他選擇嗎?例如提交已經查詢的菜單。它可能是一種形式,而不僅僅是一個列表。正如我所說,應該通過Ajax請求子頁面,所以,當我點擊菜單鏈接並重新加載時,它會顯示崩潰(不需要的行爲)。 jsTree支持保存狀態,但會爲每個打開的節點發出請求。感謝提示「不要預先優化」;我同意,但必須考慮分析階段。爲什麼你會忘記第二個選擇?也沒有對最終用戶有不良行爲的問題。 – Roger 2012-07-26 16:47:48

+0

因爲iframe很醜。您的頁面中會包含其他內容而不是菜單中的其他內容,並且您不希望將頁面正文中的每個導航鏈接或表單轉換爲提交整個菜單的表單提交。如果您使用AJAX擴展節點,您也可以使用AJAX加載與節點關聯的主體。如果你重新加載整個頁面,因爲樹的狀態可以存儲在服務器端並可以重新生成。我會選擇你認爲最簡單,最清潔的解決方案,並在必要時進行優化。 – 2012-07-26 21:09:24

+0

好的,謝謝,我會這樣做的。 – Roger 2012-07-27 04:26:58