Javascript架构:分解模块或根本不使用模块

时间:2016-01-04 18:45:59

标签: javascript architecture

我正处于开发阶段,遇到了架构问题。我已将其归结为以下选项,无法确定哪个最佳。也许(最有可能)那里有一个完全不同的更好的解决方案,我的问题将帮助其他人制定未来的建筑计划。

V1 ------------------

usersModule - fns:private A B C

adminModule - fns:私有X Y但也是C(与usersModule中的fn相同)

编译成users.js(仅限usersModule)和admin.js(仅限adminModule)

V2 ------------------

usersModule - fns:private A B,public C

adminModule - fns:private X Y并抓取usersModule.C

编译成main.js(包含usersModule和adminModule)

V3 ------------------

shareModule - fns:public C

usersModule - fns:private A B并抓取shareModule.C

adminModule - fns:private X Y并抓取shareModule.C

编译成users.js和admin.js(usersModule with sharedModule into users.js,adminModlue with sharedModlue into admin.js)

V1提供最小的文件大小,但是没有:不要写两次相同的fn-C。

V2编译为最大文件大小,因为usersModule和adminModule都编译成一个main.js. adminModule只需要fn-C,因此在所有usersModule中编译都是浪费。如果用户登录,则不需要任何adminModule代码。更大的浪费!

V3提供最小的文件大小,只有所需的代码,似乎是明确的选择......但是......现在添加:

login.php传递加载admin.js或users.js的html标头。它还将数据加载到js全局空间:userInfoJson和adminInfoJson。

usersModule将userInfoJson和adminInfoJson解析为privateavailableInfo1和usefulInfo2(其中一些由fn-C使用)。类似地,adminModule将adminInfoJson解析为可私有使用的变量。

坚持使用V3,如果admin登录,则userInfoJson永远不会被解析为usefulInfo1和usableInfo2(因为userModule永远不会被编译成admin.js),现在fn-C(来自sharedModule.C)不起作用。

所以V3出局了吗?或者我们是否将代码添加到sharedModule,将userInfoJson和adminInfoJson解析为公共变量?或者V2真的是更好的选择吗?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我最终将所有共享方法移动到lib模块。 (顺便说一句,我正在使用揭示模块。)

然后Grunt与用户一起为userMain.js和lib与admin为adminMain.js联合lib。

到目前为止,这项技术运作良好。