JavaScript作为页面的一部分与<;脚本src="&引用&燃气轮机;

JavaScript作为页面的一部分与<;脚本src="&引用&燃气轮机;,javascript,html,Javascript,Html,我的页面上有500行JavaScript代码,现在它被放在页脚中 如果我将其移动到一个单独的文件并包含为,它会以任何方式影响加载速度或性能吗?如果像您建议的那样包含,您的外部脚本将是一个渲染阻止资源,这意味着HTML解析器将在找到标记时停止,获取外部资源(这意味着您的页面会导致一个额外的GET请求),然后解析并执行它包含的Javascript,只有这样HTML解析器才会在标记之后继续解析HTML 如果不一定要在该时间点执行,但也可能在稍后发生,则在完全解析HTML后,您有两个选项: <sc

我的页面上有500行JavaScript代码,现在它被放在页脚中


如果我将其移动到一个单独的文件并包含为
它会以任何方式影响加载速度或性能吗?

如果像您建议的那样包含,您的外部脚本将是一个渲染阻止资源,这意味着HTML解析器将在找到
标记时停止,获取外部资源(这意味着您的页面会导致一个额外的GET请求),然后解析并执行它包含的Javascript,只有这样HTML解析器才会在
标记之后继续解析HTML

如果不一定要在该时间点执行,但也可能在稍后发生,则在完全解析HTML后,您有两个选项:

<script src="script.js" defer></script>
添加
async
属性将完成两件事:

  • 一旦外部脚本满足您的
    脚本
    标记,浏览器就会启动外部脚本的获取,但在启动请求后,它将立即继续解析页面
  • 一旦完全获取脚本,脚本就会执行
  • 请注意,2.还意味着,如果有多个
    async
    加载的脚本,则无法预测执行顺序。任何先加载的脚本都会先运行


    async
    加载的脚本也不会等待
    DOMContentLoaded
    ,这意味着事件可能已经结束,或者仍然会发生,您不知道使用
    async

    如果像您建议的那样包含,您的外部脚本将成为渲染阻止资源,这意味着HTML解析器将在找到您的时停止de>标记,获取外部资源(意味着您的页面会导致额外的GET请求),然后解析并执行它包含的Javascript,只有这样HTML解析器才会在
    标记之后继续解析HTML

    如果不一定要在该时间点执行,但也可能在稍后发生,则在完全解析HTML后,您有两个选项:

    <script src="script.js" defer></script>
    
    添加
    async
    属性将完成两件事:

  • 一旦外部脚本满足您的
    脚本
    标记,浏览器就会启动外部脚本的获取,但在启动请求后,它将立即继续解析页面
  • 一旦完全获取脚本,脚本就会执行
  • 请注意,2.还意味着,如果有多个
    async
    加载的脚本,则无法预测执行顺序。任何先加载的脚本都会先运行


    async
    加载的脚本也不会等待
    DOMContentLoaded
    ,这意味着事件可能已经结束,或者仍然会发生,这取决于
    async

    ,,在正常的
    HTTP/1.x
    中,如果没有缓存任何内容,安装程序将减慢脚本执行第一次加载之前的时间,这是需要的遇到
    script
    标记时,发出两个请求,一个请求该页面,另一个请求脚本。是否明显取决于加载了多少其他文件

    对于后续请求,这取决于如何为文件设置缓存策略。在最坏的情况下,它仍然会向文件发出请求,并从服务器获得
    304
    响应。如果文件未被修改,这将稍微快一点,因为没有传输数据,但仍会有额外的请求。但它不会这可能比您的解决方案更快,因为脚本数据不会在每次请求时发送

    同样,是否值得注意取决于向服务器发送了多少其他请求以及嵌入脚本的大小

    您可以设置缓存策略,使浏览器不会重新检查文件是否已更新,在这种情况下,不会执行其他请求,也不会比嵌入脚本慢,但您需要一种策略来强制更新。这通常是通过将静态资源放在以哈希为前缀的路径中来完成的或者加上时间戳并更改它


    使用HTTP/2,您可以发送请求所需的所有文件,因此在这种情况下,客户端不必对脚本发出第二次请求,它的速度与嵌入脚本的速度一样快。对于传输的数据,它与您的解决方案相同。但是,您需要一种不发送sc的策略在正常的
    HTTP/1.x中,如果没有缓存任何内容,安装程序将减慢时间,直到第一次加载时执行脚本,因为它需要发出两个请求,一个用于该页面,另一个用于脚本遇到de>script
    标记。是否明显取决于加载了多少其他文件

    对于后续请求,这取决于如何为文件设置缓存策略。在最坏的情况下,它仍然会向文件发出请求,并从服务器获得
    304
    响应。如果文件未被修改,这将稍微快一点,因为没有传输数据,但仍会有额外的请求。但它不会这可能比您的解决方案更快,因为脚本数据不会在每次请求时发送

    同样,是否值得注意取决于向服务器发送了多少其他请求以及嵌入脚本的大小

    您可以设置缓存策略,使浏览器不会重新检查文件是否已更新,在这种情况下,不会执行其他请求,也不会比嵌入脚本慢,但您需要一种策略来强制更新。这通常是通过将静态资源放在以哈希为前缀的路径中来完成的或者加上时间戳并更改它

    使用HTTP/2,您可以发送请求所需的所有文件,因此在这种情况下,客户端不必发出请求