<script> 与 <noscript>
<script> 标签用于在HTML文档中嵌入或引用JavaScript代码,而 <noscript> 标签用于为不支持或禁用JavaScript的用户提供替代内容。
<script> 标签
基本语法
html
<!-- 内部脚本 -->
<script>
// JavaScript代码
</script>
<!-- 外部脚本 -->
<script src="script.js"></script>重要属性
src:引入外部JavaScript文件的URLtype:指定脚本的类型- 现代网页通常可以省略,默认为
text/javascript - 对于模块脚本(ES6+),使用
type="module"
- 现代网页通常可以省略,默认为
async:异步加载脚本- 脚本下载时不阻塞页面解析
- 下载完成后立即执行,不保证执行顺序
defer:延迟执行脚本- 脚本下载时不阻塞页面解析
- 在文档解析完成后,按照顺序执行
crossorigin:跨域资源共享设置anonymous:不发送用户凭证use-credentials:发送用户凭证
常见用法示例
html
<!-- 基本外部脚本 -->
<script src="app.js"></script>
<!-- 异步加载脚本 -->
<script src="analytics.js" async></script>
<!-- 延迟加载脚本 -->
<script src="main.js" defer></script>
<!-- ES6模块脚本 -->
<script type="module" src="module.js"></script>
<!-- 内联脚本 -->
<script>
document.addEventListener('DOMContentLoaded', () => {
console.log('页面加载完成');
});
</script>加载策略
- 普通脚本
html
<script src="script.js"></script>- 阻塞HTML解析
- 按照出现顺序执行
- async脚本
html
<script src="script.js" async></script>- 不阻塞HTML解析
- 加载完立即执行
- 适用于独立脚本
- defer脚本
html
<script src="script.js" defer></script>- 不阻塞HTML解析
- DOM完成后执行
- 保证执行顺序
加载顺序对比
<noscript> 标签
基本语法
html
<noscript>
<!-- 当JavaScript被禁用时显示的内容 -->
</noscript>使用场景
- 提供无JavaScript提示
html
<noscript>
<p>请启用JavaScript以获得最佳体验。</p>
</noscript>- 提供替代内容
html
<noscript>
<img src="static-image.jpg" alt="静态图片">
</noscript>- 提供替代样式
html
<noscript>
<link rel="stylesheet" href="no-js.css">
</noscript>最佳实践
- 脚本放置位置
- 推荐放在
</body>前 - 使用
defer属性时可以放在<head>中
- 推荐放在
html
<!DOCTYPE html>
<html>
<head>
<script src="critical.js" defer></script>
</head>
<body>
<!-- 页面内容 -->
<script src="app.js"></script>
</body>
</html>- 性能优化
- 使用适当的加载策略(async/defer)
- 合理拆分代码块
- 考虑代码压缩和缓存
html
<!-- 关键脚本 -->
<script src="core.js" defer></script>
<!-- 非关键脚本 -->
<script src="analytics.js" async></script>- 模块化开发
html
<script type="module">
import { feature } from './modules/feature.js';
feature.init();
</script>注意事项
- 避免在HTML中直接写大量JavaScript代码
- 注意脚本加载顺序和依赖关系
- 合理使用async和defer属性
- 考虑无JavaScript场景的降级处理
- 注意跨域资源的安全设置
浏览器兼容性
<script>:所有浏览器都支持基本功能async和defer:现代浏览器普遍支持type="module":需要现代浏览器支持<noscript>:所有浏览器都支持
合理使用<script>和<noscript>标签可以提升网页性能和用户体验。通过选择适当的加载策略和提供合适的降级方案,我们可以构建更健壮的网页应用。
