Javascript 缩放angularjs的最佳实践

Javascript 缩放angularjs的最佳实践,javascript,angularjs,web-applications,Javascript,Angularjs,Web Applications,我一直在开发一个AngularJs应用程序,它可能会在内容、视图、模板和控制器等方面发展壮大。我真的很喜欢angularjs的灵活性。我可以很快创建新页面。非常稳定和跨浏览器。它真的很强大。然而,由于AngularJs并没有延迟加载特性和其他缺陷,我面临着使应用程序具有可扩展性的挑战。我想在这里分享我的问题,希望有人能告诉我解决问题的正确方法: 具有不同样式和控制器的多个模板 我在这里面临的问题是如何能够有效地管理模板、css和控制器。我很难管理CSS,因为它们都需要一次加载。如果我使用服务器端

我一直在开发一个AngularJs应用程序,它可能会在内容、视图、模板和控制器等方面发展壮大。我真的很喜欢angularjs的灵活性。我可以很快创建新页面。非常稳定和跨浏览器。它真的很强大。然而,由于AngularJs并没有延迟加载特性和其他缺陷,我面临着使应用程序具有可扩展性的挑战。我想在这里分享我的问题,希望有人能告诉我解决问题的正确方法:

具有不同样式和控制器的多个模板 我在这里面临的问题是如何能够有效地管理模板、css和控制器。我很难管理CSS,因为它们都需要一次加载。如果我使用服务器端模板(例如php、jsp),我可以有选择地在不同的页面上加载不同的CSS

我想做的是将我的应用程序与小应用程序分开。因为我的应用程序并没有完全分离,所以我面临着它们之间的路由问题。管理多个index.html文件可能会很乏味,因为index.html结构本身会有相当多的重复(尽管我共享指令和控制器)

一个很有希望的选择是使用ui路由器而不是ng路由,但ui路由仍在开发中,它无助于解决CSS和控制器出现的更大问题

隐藏特定用户无法访问的应用程序功能 同样,由于所有控制器都需要一次加载,因此美化的小型javascript仍在提供大量信息。若我想让某些用户可以使用某些功能,那个么用户可能会明白这一点。实际上,一个明显的例子是,如果我有一个功能在某个日期可用,但我不想在那个时候部署新的应用程序,我需要发布我修改过的控制器。用户仍然可以看到该功能包含在代码中

多层HTTP请求 尽管我尽可能多地使用解析/异步http请求,但最终还是得到了几层(同步)http请求。如果我没记错的话,这是一个例子:

  • 浏览器加载HTML

  • 浏览器加载CSS/Javascript/开始下载一些图像

  • 解析请求(用户检查、查找字段数据、页面数据等)

  • 征求意见书(部分)

  • 5.1。在视图中,指令正在从templateUrl加载模板

    5.2。控制器可发送额外数据请求(特殊情况)

    我的一些复杂页面可能包含其他图像(例如,在指令中,ng includes等),这些图像将在之后加载

    现在加载第一页大约需要1秒的时间。(虽然基准不可靠,但我有相当快的互联网,我的应用程序是从AWS提供的)

    错误消息(和其他消息) 我们的应用程序有许多错误消息。我有一个消息文件,列出所有错误消息(主要是输入验证错误)。此文件变大,需要加载所有内容

    我们已经尝试了后端解决方案(例如,我们的资源API返回错误消息)。然而,在许多情况下,API并没有返回我们想要显示的正确消息,或者消息包含HTML(我可以想到ng show/ng hide或ng HTML bind…)

    运行时与构建时配置 我们有dev、stage和production,它们在每个环境中都需要不同的配置。例如,谷歌分析id,打开和关闭开发模式(例如开发助手)

    我现在的丑陋解决方案是在服务器启动时生成配置文件并将其注入index.html。(现在,如果我计划分离应用程序,那么我需要将配置注入到所有应用程序中……这可能很好……)

    搜索引擎优化 我读了很多关于搜索引擎优化的信息。在我的应用程序的大部分不是搜索,然而,我想第一页和其他夫妇被爬网。由于我们在服务器端使用Java,HtmlUnit是一个难题,我无法让它正确地呈现页面。现在,我正在使用grunt html快照生成静态快照,因为我的内容页是静态的,所以现在可以使用。但是,我可以看到动态内容的问题,我们需要在未来支持这些内容

    我们可能需要使用第三方SEO或添加node.js,以便我可以使用phantom.js动态创建快照


    我们的应用程序到处都有补丁(我觉得不是很漂亮)。请分享您的想法。

    您有具体问题吗?我强调的主题是问题。我试图解释我面临的问题。并且想看看其他人有什么选择/怎么做。(例如,对于每个主题,问题是“您如何解决此问题?”)。谢谢。我想加一个tl;你可能已经阅读了大量关于angular的资料,但我将为你添加一个额外的资源-免费ng cookbook你可能对第6章或第13章感兴趣Brian Ford在这里也有一篇讨论大型应用程序的帖子:。问题太广泛,很难给出具体的答案。