Estoy de ninguna manera un experto, pero aquí están algunas ideas que he hecho en este. No creo que te hayas perdido nada (si es así, yo también) - Creo que este es un problema bastante fundamental con todas las aplicaciones cliente, ya sea un ejecutable compilado o un Javascript.
Por supuesto, el ejecutable compilado no se ve obstaculizado por esto, ya que se ha convertido en código de máquina que es muy difícil de leer o descompilar en algo útil. Sin embargo, con Javascript, la aplicación a menudo se sirve exactamente como la escribiste, por lo que es fácil modificarla y razonar sobre ella.
Eso me lleva a la primera semi-solución: ofuscación de su Javascript. Si usa la herramienta de compilación de Dojo con el parámetro de reducción de seguridad, se eliminan todos los espacios en blanco innecesarios y se acortan todos los identificadores, lo que hace que el código sea bastante difícil de leer. Llamé a esto una semi-solución, algunos pueden decir que incluso eso le está dando demasiado crédito; yo mismo todavía creo que vale la pena hacerlo. ¡Después de todo, el código reducido también se descarga más rápido!
La segunda medida que tomo en mis aplicaciones es separar las diferentes partes en "capas de construcción". Por ejemplo, en el perfil de construcción, voy a tener algo así como
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
}
]
}
Ahora, en lugar de servir a los archivos JS construidas directamente como archivos estáticos, dejo que las peticiones pasan por un controlador en mi aplicación del lado del servidor, que comprueba si la capa JS requiere autenticación y si el usuario ha iniciado sesión con el acceso necesario.
Esto tiene ciertas desventajas. Los archivos JS no están en la memoria caché, y si tuviera todos mis JS en una capa de compilación, la aplicación probablemente cargaría un poco más rápido.Por supuesto, también hay un límite sobre la cantidad de matices que vale la pena hacer las capas. Más capas significan más problemas, pero también un acceso a los módulos más fino.
Estaría interesado en escuchar a otros entrar en esto también. Es una buena pregunta.
BTW, el back-end se implementa a través de cakePhp. – andreb