为什么当我请求更多 .js 文件而不是更少时性能会受到影响?
Why, exactly, does performance suffer when I request more .js files rather than less?
假设我有一个包含十个组件的 javacsript 文件。确切地说,为什么这比加载 10 个文件(每个文件都包含一个组件)的性能更好?好像是一样的数据量?那有什么区别呢?
不同之处在于浏览器不会同时加载所有资源。大多数浏览器只有 2-4 个并发请求打开,所以如果你有 5 个 JS 文件,浏览器将请求前四个,然后等到其中一个完成后再请求第 5 个。一些较旧的浏览器一次只请求一个 JavaScript 文件,并等待它完全解析后再获取下一个。
网络时间通常是用户体验中最糟糕的部分(尤其是在世界的某些地方或某些设备上),因此拥有一个只发出一个请求而不是 5 个请求的捆绑包意味着您的应用程序会感觉更好响应。
网上也有很多关于此的好文章,YSlow 是最早用来检查这些东西的工具和指标之一,但还有其他的。
简单地说,这与请求的大小无关,而与请求的数量有关,以及它们是否同步或异步.
同步编程意味着,除了条件和函数调用,代码从上到下按顺序执行,阻塞长运行宁任务,例如网络请求和磁盘I/O。
异步编程意味着引擎运行处于事件循环中。当需要阻塞操作时,启动请求,代码保持 运行ning 不阻塞结果。当响应就绪时,将触发一个中断,这会导致事件处理程序为 运行,控制流将在此处继续。这样,单个程序线程可以处理很多并发操作。
正如这个 answer by Cletus 解释的那样:
JavaScript is always synchronous and single-threaded. If you're executing a JavaScript block of code on a page then no other JavaScript on that page will currently be executed.
JavaScript 仅在它可以进行例如 Ajax 调用的意义上是异步的。代码将停止执行,直到调用 returns(成功或失败),此时回调将同步 运行。此时没有其他代码 运行ning。它不会中断当前正在 运行ning 的任何其他代码。
这就是为什么当您加载更多 JavaScript 个文件时您的性能会受到影响。
假设我有一个包含十个组件的 javacsript 文件。确切地说,为什么这比加载 10 个文件(每个文件都包含一个组件)的性能更好?好像是一样的数据量?那有什么区别呢?
不同之处在于浏览器不会同时加载所有资源。大多数浏览器只有 2-4 个并发请求打开,所以如果你有 5 个 JS 文件,浏览器将请求前四个,然后等到其中一个完成后再请求第 5 个。一些较旧的浏览器一次只请求一个 JavaScript 文件,并等待它完全解析后再获取下一个。
网络时间通常是用户体验中最糟糕的部分(尤其是在世界的某些地方或某些设备上),因此拥有一个只发出一个请求而不是 5 个请求的捆绑包意味着您的应用程序会感觉更好响应。
网上也有很多关于此的好文章,YSlow 是最早用来检查这些东西的工具和指标之一,但还有其他的。
简单地说,这与请求的大小无关,而与请求的数量有关,以及它们是否同步或异步.
同步编程意味着,除了条件和函数调用,代码从上到下按顺序执行,阻塞长运行宁任务,例如网络请求和磁盘I/O。
异步编程意味着引擎运行处于事件循环中。当需要阻塞操作时,启动请求,代码保持 运行ning 不阻塞结果。当响应就绪时,将触发一个中断,这会导致事件处理程序为 运行,控制流将在此处继续。这样,单个程序线程可以处理很多并发操作。
正如这个 answer by Cletus 解释的那样:
JavaScript is always synchronous and single-threaded. If you're executing a JavaScript block of code on a page then no other JavaScript on that page will currently be executed.
JavaScript 仅在它可以进行例如 Ajax 调用的意义上是异步的。代码将停止执行,直到调用 returns(成功或失败),此时回调将同步 运行。此时没有其他代码 运行ning。它不会中断当前正在 运行ning 的任何其他代码。
这就是为什么当您加载更多 JavaScript 个文件时您的性能会受到影响。