我需要创建一个可能非常大的 HTML / JS移动网络应用,它将作为移动网站提供,并使用 Phonegap 进行本地交付。我目前正在努力确定组织应用程序本身的最佳方式。
基本计划是拥有许多模块,每个模块都会关注不同的主题。其中一些模块将是非常基本的(即公告/新闻),一些将非常复杂(即体育:团队球员,日程安排,视频等)。将会有一个适用于大多数页面的侧抽屉导航,以便用户可以快速导航到其他模块。需要能够在模块中深层链接。这些模块将由各种开发人员和供应商创建。
大多数移动解决方案我认为涉及单页,在这种情况下对我来说似乎是一个坏主意,因为有可能会有如此多的内存使用。似乎很难协调模块之间的哈希导航和模块内部分之间的哈希导航。模块开发必须考虑应用程序框架,并限制供应商和开发人员可以完成的工作。另一方面,事情并没有经常加载,一切都可以轻松地相互沟通。
使用多个页面,似乎每个模块都可以通过供应商熟悉的任何技术轻松创建(并且可以快速且廉价地完成)。它会减少内存使用,但也会消除模块进行通信的能力(此时我不知道这个功能对我们来说是必要的)。我可以看到制作一个 javascript 库,每个模块都会用于各种事件的常见处理(如记录错误,导航等)。模块之间的每个应用程序导航都是新页面调用,重置 DOM 。如果愿意,每个模块都可以使用单页设计。
那么,是否有关于如何设计此类事物的常见或新知识?我渴望开始工作,但不想重写可能已经存在的事情。我的推理中是否有任何明显的缺陷?我很乐意听到有见识的人的发言。
答案 0 :(得分:0)
老实说,如果您正在考虑构建任何您认为高容量且高复杂度的应用程序,那么您真的应该考虑进行本机开发,或者至少使用像Appcelerator这样的应用程序将“编译”到本机代码以获得更好的性能如果您打算让任意数量的开发人员构建他们自己的javascript组件,这些组件可能会或可能不会很好地管理有限的系统资源,那么很快就会遇到应用程序性能问题。
另一方面,如果你只是想要概念证明,并且不介意在你获得足够复杂度的情况下可能不得不极大地重构你的应用程序架构,那么你可能只想简单地使用网络应用程序方法。
实际上,您还需要考虑后端服务架构与前端架构一样多或更多。在尝试集成其他开发人员的产品时,你真的会遇到问题。
答案 1 :(得分:0)
几年前我遇到了类似的架构问题。它不是移动的,但也不是完全基于网络的。目标应用程序是网站和桌面应用程序的混合体,未来可能会移动。
有趣的是,之前有两次尝试创建一个可以在各种情况下使用的框架。问题以及两次尝试失败的原因是开发人员将其视为UX问题空间。他们使用了几种不同的技术来接近它,但由于他们已经预先做出了假设并且在他们的裤子座位上飞行了项目,因此陷入了困境。
我的方法是完全避开所有UI讨论,并专注于可以从任何角度进行处理的后端架构。为此,我创建了一个双向数据的Web服务,最终服务于数学模型。该服务使用不同的技术从各种来源访问:Flash,Unity,Google Earth插件,最后来自不相关的Web架构,提供良好的HTML。
我对你的建议是,不要把注意力集中在前端映射上,而要让你的后端正确。一旦你有了一个数据结构,你就可以向外构建,而且一些问题,比如内存管理,单片应用程序与否,即一页与多页,几乎可以自行解决。努力创建一个具有许多良好界面的优秀API,你不会陷入“许多厨师”的漏洞。另一方面,给一堆分散的开发者提供足够的绳索,你永远不会找到所有结的位置!
决定是否最终通过基于HTML5的技术(例如Sencha Touch,jQuery Mobile或Phonegap)使用本机API是一个福音派黑洞,将在未来几个月和几年内播出。在某些情况下,原生应用程序可能更流畅,更快速,但是应该考虑对资源的投入。另一方面,JavaScript开发人员潜伏在各个角落,而且供不应求。
答案 2 :(得分:0)
你的第一步是确定这些要求。
如果您是为自己或您自己的公司做这件事,那么请确定这些模块(合作)的运作方式。
如果你是为你的雇主做这件事,那么某人就应该知道他们想要看到什么,否则,你将如何构建它?
支持多个页面,打开和关闭模块而不进行通信的解决方案需要与负责同时维护多个小部件的框架不同,这可能会也可能不会通过系统调用或服务进行通信
没有办法解决这个问题 - 为模块构建服务/沙盒/等将比处理页面更改(或使它们成为文字页面更改)更多地工作。
当你弄清楚你希望你的程序做什么时,开始构建一个你希望其他人拥有的API的想法。
您是否打算为他们提供用于构建UI组件的API,或者您是否会将其置于他们自己的想法中?
就个人而言,我会避免每个模块更改只是替换iFrames的情况,然后最终用户可以在那里做任何他们想做的事情。
同样地,我会避免你允许模块创建者在非沙盒环境中运行任何他们想要的东西的情况......对于你的最终用户(或者你,在英国法院)而言,它的结果很糟糕。
但那不是一个问题。
首先关注的是您的平台做了什么。
然后弄清楚你的后端通信会是什么样的,你将为模块创建者提供什么接口,以及你将如何从你的终端获取数据(基于http的API) ,REST或其他任何东西......但如果你还没有它,那就好了。
然后,当你知道你的平台应该做什么时,你有一个可以很好地服务于各种任务的后端,弄清楚你要为内容创建者提供什么样的服务,制作他们的小部件,并从您的服务和沙箱等上传/下载数据。