具有多个单页面应用程序的Polymer项目

时间:2015-11-23 07:37:41

标签: module single-page-application polymer-1.0 project-structure

我想用Polymer创建项目。项目必须有几个模块(例如:联系人,日程安排,接待,管理......)

Polymer starter kit脚手架是“项目的一个SPA”。

如果我想要模块化项目(每个模块自己的SPA,独立模块部署),我如何组织文件。或者模块必须是几个项目?

1 个答案:

答案 0 :(得分:1)

有一些选择,但最好的方法可能不是简短或直接的答案。有许多事情需要考虑。

我想,当你说“模块”时,你所说的软件与同一个应用程序相关,运行在同一个URL中,属于同一个身份验证领域,并且一个用户可以访问一个或多个模块在一天之内。如果此描述不适合,您可能有许多应用程序,而不是很多模块。

这里有一些选项,但我认为最后一个(“带动态加载元素的SPA”方法)可能最适合你:

“加载另一个HTML页面”方法

我认为您的应用有一些身份验证机制。我不知道你是否使用REST API,但如果你是,你可能需要存储你登录时收到的令牌。当每个模块调用一个单独的HTML时,你可能需要在新加载的时候传递你的令牌页面。它可以通过HTML5 sessionStorage元素完成,也可以通过cookie(由于CSRF攻击不推荐 - 请在此处阅读更多内容:https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet)。

好处

  • 它会从内存中卸载不必要的脚本,这些脚本只存在于另一个模块中。你可以用这种方式释放一些记忆。
  • 您可以拥有一个完全独立的模块,它可以帮助您的模块组织。

<强>缺点

  • 您的浏览器将重新加载,并且在发生这种情况时您将无法控制页面。
  • 它将重新加载您的JavaScripts,即使它们之前使用过。它们可能会从缓存中读取,但浏览器可能需要向您的网站发出新请求才能检查304 Not Modified标头。
  • 需要更多时间,您需要提供更多信息来重新创建整个屏幕(您已经绘制了界面,并且需要重新创建)。

“一体化 - SPA”方法

好处

  • Javascript State将保留在各个模块中。
  • 装载一次
  • 每个模块的界面都相同
  • 您可以硫化您的应用以将其置于单个HTML文件中

<强>缺点

  • 臃肿而沉重。将加载许多可能未被使用的东西。
  • 由于甚至无法使用的组件出现问题,可能会产生问题。

“具有动态加载元素的SPA”方法

你可以动态导入新元素(我在https://easyusedev.wordpress.com/2015/11/06/dynamically-loading-polymer-elements-on-the-fly/中写了一篇关于它的帖子。)

好处

  • Javascript State将保留在各个模块中。
  • 仅在需要时加载内容
  • 每个模块的界面都相同
  • 您可以硫化您的应用以将其置于单个HTML文件中

<强>缺点

  • 加载的元素和javascript将保留在内存中,即使不再需要它们也是如此。没有简单的方法从记忆中“卸载”东西。
  • 您需要付出一些努力才能正确实现该模式