【发布时间】:2014-12-22 19:45:54
【问题描述】:
我目前将 Angular 与 ng-routes、ng-table 和 ng-animate 一起使用。我还使用其他库,例如 jQuery 和 Modernizr。最后我有了自己的自定义 javascript,可以是多个文件。
所以我的项目会加载一长串这样的资源:
<script type="text/javascript" src="/lib/jquery.min.js"></script>
<script type="text/javascript" src="/lib/modernizr.min.js></script>
<script type="text/javascript" src="/lib/angular.min.js"></script>
<script type="text/javascript" src="/lib/angular-route.min.js"></script>
<script type="text/javascript" src="/lib/angular-animate.min.js"></script>
<script type="text/javascript" src="/js/custom.js"></script>
我知道我可以通过减少 HTTP 调用和压缩所有文件来加快我的项目。
我使用 CodeKit,它提供了将 JS 文件相互导入并将它们编译成单个压缩文件的选项。如果我对上面的列表执行此操作,那么我只需加载一个像这样的文件:
<script type="text/javascript" src="/js/main.min.js"></script>
单个 HTTP 调用而不是 6+,并且所有代码都被缩小了。这里的问题是单个文件是 500kb+ 并且在一个完整的项目中会大得多,可能超过 1mb。
- 这是否意味着文件太大而不会被浏览器缓存?
- Angular 或其他库在以这种格式编译时会出现运行问题吗? (如果 .map 文件不在同一目录中,控制台会抛出错误)
- 当然,一个 500kb 以上的文件仍然需要很长时间才能加载,那么这真的会缩短加载时间吗?
我认为它必须等待整个大文件加载后才能执行任何操作。而如果文件是分开的,它们可以在每个加载后立即开始执行脚本。
【问题讨论】:
-
缩小后500kb?对于您迄今为止所包含的那些来说,这是巨大的。
-
一个关键优势仍然是您减少了网络请求的数量。
-
@KevinB
angular.min.js本身就是 122kb。 -
最好的情况可能是将您的代码分成两部分:首先,仅显示页面所需的代码,然后是与页面交互所需的代码,让您立即显示页面,然后添加功能。我还没有完成这个 angular.js,似乎很难实现。使用 Angular,最好将其全部保存为一个文件。
-
最终,您希望控制项目中包含的内容,以便仅包含必要的内容,从而减少未使用的代码量。例如,jQuery.js,它是 82kb 的缩小版(1.11.1 为 93kb),您可能只使用其中的一小部分,它已经包含在 angular 本身中!在初始加载时加载这些文件时,您实际上并没有太多选择。无论哪种方式,您都必须加载整个有效负载。您可以做出的最大改进是通过编写 DRY 代码预先减小大小。
标签: javascript html angularjs caching codekit