首先我得承认,我脑洞很大。- -
在 #8 中,我指出 AngularJS 有一个不好的地方:默认情况下,所有控制器、指令、服务都需要先加载才完毕能启动应用。
但这次我走了另一个极端:所有控制器、指令、服务、甚至样式都做到按需加载。(项目在这里)
我承认我不顾后果的就开始做了,我也知道,这必然会让 HTTP 请求数(疯狂的)攀升。
所以我也没指望谁真的把那个项目用到生产环境里去= =
尽管如此,我仍然觉得这样做是有意义的,至少起了一个抛砖引玉的作用:在两个极端里,我们应该如何找到一个最佳的平衡点呢?
第一个极端是将所有文件都打包成 “all.js” 与 “all.css” ,但是任何一个小改动都会破坏用户的缓存,让用户重新下载这两个大文件。
第二个极端(即我的项目)是将所有文件都做成按需加载的。好处是对小文件的修改不会破坏其他文件的缓存,坏处是用户_每个路由的第一次访问_都要加载两三个甚至更多文件,延迟感比较明显。
为什么我还是觉得我的极端比较合理 = =
为了缓解 HTTP 请求数,我们可以将并不是公用的指令和服务直接写在控制器里,但即使如此,第一次访问一个路由时仍然需要加载三个文件:控制器,模板及样式。
实际上,这个模式就跟传统网站类似。当从一个页面点到另一个页面的时候,也是需要加载这三个文件的,此时模板一般会直接写在 html 里,而且 html 的缓存时间不敢设太长;使用 AngularJS 做到完全的按需加载后,就可以放心的给模板设置长一点的缓存时间了,毕竟模板里面不会引用脚本与样式。
欢迎大家讨论一下到底怎么做比较好 = =