2.2 行内代码与外部文件
虽然可以直接在 HTML 文件中嵌入 JavaScript 代码,但通常认为最佳实践是尽可能将 JavaScript 代
码放在外部文件中。
- 可维护性。JavaScript 代码如果分散到很多 HTML 页面,会导致维护困难。而用一个目录保存
所有 JavaScript 文件,则更容易维护,这样开发者就可以独立于使用它们的 HTML 页面来编辑
代码。 - 缓存。浏览器会根据特定的设置缓存所有外部链接的 JavaScript 文件,这意味着如果两个页面都
用到同一个文件,则该文件只需下载一次。这最终意味着页面加载更快。 - 适应未来。通过把 JavaScript 放到外部文件中,就不必考虑用 XHTML 或前面提到的注释黑科技。
包含外部 JavaScript 文件的语法在 HTML 和 XHTML 中是一样的。
2.3 文档模式
IE5.5 发明了文档模式的概念,即可以使用 doctype 切换文档模式。
最初的文档模式有两种:
- 混杂模式(quirks mode)。在所有浏览器中都以省略文档开头的 doctype 声明作为开关。
- 标准模式(standards mode)。通过下列几种文档类型声明开启:
<!-- HTML 4.01 Strict -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<!-- XHTML 1.0 Strict -->
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- HTML5 -->
<!DOCTYPE html>
随着浏览器的普遍实现,又出现了第三种文档模式:
- 准标准模式(almost standards mode)。这种模式下的浏览器支持很多标准的特性,但是没
有标准规定得那么严格。主要区别在于如何对待图片元素周围的空白(在表格中使用图片时最明显)。
准标准模式与标准模式非常接近,很少需要区分。
2.4 <noscript> 元素
针对早期浏览器不支持 JavaScript 的问题,需要一个页面优雅降级的处理方案。最终, <noscript>
元素出现,被用于给不支持 JavaScript 的浏览器提供替代内容。
- 浏览器不支持脚本;
- 浏览器对脚本的支持被关闭。
任何一个条件被满足,包含在 <noscript> 中的内容就会被渲染。否则,浏览器不会渲染 <noscript>中的内容。
2.5 小结
JavaScript 是通过 <script> 元素插入到 HTML 页面中的。这个元素可用于把 JavaScript 代码嵌入到
HTML 页面中,跟其他标记混合在一起,也可用于引入保存在外部文件中的 JavaScript。
- 要包含外部 JavaScript 文件,必须将 src 属性设置为要包含文件的 URL。文件可以跟网页在同
一台服务器上,也可以位于完全不同的域。 - 所有 <script> 元素会依照它们在网页中出现的次序被解释。在不使用 defer 和 async 属性的
情况下,包含在 <script> 元素中的代码必须严格按次序解释。 - 对不推迟执行的脚本,浏览器必须解释完位于 <script> 元素中的代码,然后才能继续渲染页面
的剩余部分。为此,通常应该把 <script> 元素放到页面末尾,介于主内容之后及 </body> 标签之前。 - 可以使用 defer 属性把脚本推迟到文档渲染完毕后再执行。推迟的脚本原则上按照它们被列出
的次序执行。 - 可以使用 async 属性表示脚本不需要等待其他脚本,同时也不阻塞文档渲染,即异步加载。异
步脚本不能保证按照它们在页面中出现的次序执行。 - 通过使用 <noscript> 元素,可以指定在浏览器不支持脚本时显示的内容。如果浏览器支持并启
用脚本,则 <noscript> 元素中的任何内容都不会被渲染。
网友评论