我絕不是專家,但這裏有一些想法,我這個做。我不認爲你錯過了任何東西(如果是這樣,我也有) - 我認爲這是所有客戶端應用程序的一個非常基本的問題,不管它是編譯的可執行文件還是Javascript。
當然,編譯好的可執行程序並沒有受到特別的阻礙,因爲它被製作成機器代碼,這些代碼很難讀取或反編譯成任何有用的東西。但是,使用Javascript時,應用程序通常會按照您所寫的完全一樣提供,因此很容易修改和推理。
這給我帶來了第一個半解決方案:混淆你的Javascript。如果使用帶有shrinksafe參數的Dojo構建工具,將刪除所有不必要的空白,並縮短所有標識符,使代碼難以閱讀。我稱這爲半解決方案,有人甚至可以說這是一種半信用 - 我仍然認爲這是值得的。畢竟,縮小的代碼下載速度也更快!
我在我的應用程序中採取的第二個措施是將不同的部分分爲「構建層」。舉例來說,在我的建造輪廓,我會像
dependencies = {
..
layers: [
{ name: "../myApp/Core.js", resourceName: "myApp.Core",
dependencies: ["myApp.Core", "myApp.Foobar"]
},
{ name: "../myApp/modules/Login.js", resourceName: "myApp.modules.Login",
dependencies: ["myApp.modules.Login", "myApp.modules.LoginUi"...],
layerDependencies: ["../myApp/Core.js"]
},
{ name: "../myApp/modules/Secret.js", resourceName: "myApp.modules.Secret",
dependencies: ["myApp.modules.Secret", "myApp.modules.SecretUi"],
layerDependencies: ["../myApp/Core.js"],
authentication: 42
}
]
}
現在,而不是直接服務內置JS文件爲靜態文件,我讓請求都通過我的服務器端的應用的控制器,它檢查JS層是否需要身份驗證以及用戶是否使用必要的訪問權限登錄。
這確實有一定的缺點。 JS文件沒有被緩存,如果我在一個構建層中擁有所有的JS,應用程序可能會稍微加載一些內容。當然,製作這些圖層的價值也是有限的。更多的圖層意味着更多的麻煩,但也更細粒度的模塊訪問。
我很想聽到別人對此的評價。這是一個很好的問題。
順便說一句,後端是通過cakePhp實現的。 – andreb