浏览器加载资源的最有效方式

时间:2014-10-27 15:17:17

标签: javascript html angularjs caching codekit

我目前使用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 +的文件仍然需要很长时间才能加载,所以这会真正改善加载时间吗?

我看到它的方式是它必须等待整个大文件加载才能执行任何操作。然而,如果文件是分开的,则它们可以在每次加载时立即开始执行脚本。

1 个答案:

答案 0 :(得分:1)

  

这是否意味着该文件不会被浏览器缓存,因为它太大了?

这取决于浏览器。桌面浏览器不应该有任何问题,不过移动设备会。

  

当以这种格式编译时,Angular或其他库是否会运行任何问题? (如果.map文件不在同一目录中,则控制台抛出错误)

不。除非打开控制台,否则.map问题不会影响最终用户。这也可以通过构建过程来修复,从而为组合版本生成.map文件。

  

肯定一个500kb +的文件仍然需要很长时间才能加载,所以这会真正改善加载时间吗?

是的,因为您不会在每次请求时来回传递Cookie和http标头。

但是,您可以采取一些措施来缩短加载时间。例如,我将文件分为两类:

立即需要的文件以及以后可以加载的文件。

不幸的是,你无法真正区分角度而没有后果,因为所有路线都需要预先定义,以及所述路线所需的所有控制器和服务。您可以真正删除的唯一内容是内联模板,因为稍后可以通过ajax请求模板。

我能够为我的一个应用程序进行这样的拆分;我拆分了管理代码和客户端代码,并且在管理员登录成功后才包含管理代码。这对管理员来说不方便,因为管理员无法直接进入管理页面,无法在没有问题的情况下重新加载管理页面,但确实减少了非管理员用户的加载时间。


这样您只有一个真正的选择:减少所包含内容的总体大小。这意味着使控制器和服务尽可能可重用,并且不包括不必要的代码。看看你的例子,你包括jQuery。 jQuery的目的是使编写ajax请求和选择/操作DOM节点变得更容易,两者都已经被Angular覆盖了。因此,您可以通过删除jQuery并使用基于角度的插件来减小代码库的大小。