2012-07-09 175 views
0

我们有一个可用的Web应用程序,它是用ExtJS为客户端开发的,Struts,Spring,Hibernate用于服务器端。现在,我们正在考虑迁移到GXT(或者可能是GWT本身)。事情是我对GWT/GXT很新。我们正在试图决定我们是否走上这条道路。

1)到目前为止,我们有2个域用于我们的网络应用程序。一个是已经部署了应用程序(Struts + ...),另一个主要是无cookie的自定义CDN。客户端和服务器之间的传输主要是XHR请求,发送/接收JSON和/或JSONP。但是,随着我们面前的新方法的出现,我开始明白,对于整个GXT应用程序,我们应该只有一个域。这是正确的还是我忘了在这里考虑一些事情?

如果没有,是否有可能我们仅部署了应用程序(即com.ourcompany.webapp.gxt.server。*)到主服务器,以及由GWT编译和生成的内容编译器到其他类CDN域?

2)我们面临的另一个大问题是当前的应用程序大多由3个巨大的模块组成。一个负责“登录”,另一个负责“Webtop”,第三个负责“每个用户都可以访问的模块”。后者由于每个用户的“访问权限”而在服务器上生成,显然可能因用户不同而不同。

我能找到的关于此事的唯一可能是Code Splitting。虽然我并不完全确定这是否是适合的解决方案。

我们希望应用程序在启动时检查用户是否已登录。如果不是,则加载SignIn集合的JavaScript文件(即webapp.signin.nocache.js),然后在用户输入正确的用户名/密码后,卸载此签名文件并加载webtop.nocache.js和modules.nocache.js。

如果你能帮助我,我会非常感激。初学者GXT问题

回答

3

1)如果您的GWT应用程序是从不同的域加载的,则不得不面对相同的来源策略。你不能做一个xhr到不同的域。你可以使用ScriptTagProxy来解决这个问题。但它不觉得非常中性。

2)您可以使用CodeSplitting来动态地自动加载应用程序的特定部分。你所要做的就是将你的分解点转换为异步调用。 详细的compile report为您提供了一个非常好的概述代码拆分的工作方式。

但CodeSplitting不会卸载已加载的代码。如果它确实需要这样做,则必须将用户重定向到另一个url以加载相应的用户依赖模块。
一旦Javascript代码已被加载并执行,它不可能从浏览器内存中删除代码。

Grettings, Peter

+0

谢谢您的回应Peter。但是1)那么使用两个不同的域名是“实际上不是一个好方法”? 2)是否有可能在飞行中的某个分割点为每个用户生成modules.nocache.js? – Khosrow 2012-07-10 10:01:50

+0

1)正好; 2)如果你的代码像if(userA){startUserAModul();} else if(userB){startUserBModul();} aso。并将“CodeSplitting”点放入startUserXModul方法中,gwt应该为每个“模块”自动创建额外的Javascript文件。这些JS文件会在您调用适当的模块时自动加载。详细的gwt编译报告为您提供了大量关于代码拆分的信息。 – Peter 2012-07-11 05:41:12