1. 传统做法,放在<Head>元素中
特点:页面会等到所有外部文件(包括css和js)下载,解析和执行后 才会开始呈现页面内容。由于需要下载和解析, 会导致用户看到一个不是空白的页面前会多等待一会。
适用条件1: 核心js或css, 极度影响页面内容的展现的外部文件。
应用场景1:如果文档的内容脱离了某个js或css就会变得没有意义时, 可以把这些外部文件的引用放入<head>标签中。
例如,用extjs或者其他框架中的组件(比如说创建一个grid),使用的是markup方式而不是js动态创建时,这种情况下,一定要把js和css放到<head>中,否则用户在差的网络环境中就会先看到一个bad markup的页面。
2. 放在<body>元素中页面内容的后面
特点:浏览器会先把页面内容呈现出来, 再去下载和解析JavaScript代码。用户需要等待的总时间不变 但是可以先看到一个不是那么空白的页面。
适用条件1: 在允许dom内容可以以一个比较raw的原始形态展现给用户时(而不是先需要js或css调整dom后, 用户才看得懂时)
适用条件2:一些锦上添花的js, 页面的一些动态小模块(无关紧要的, 如广告)。
应用场景1: 在平稳退化支持的比较好的应用中,html会支持一个旧浏览器的版本(像一个金字塔的底层), 之后如果有js/css可以提升用户体验并且js在检测了浏览器兼容性之后也可以支持, 那么在下载和解析完毕之后, 再去最终渲染这个页面。