inline script 和外链script
- 性能
从性能角度来说,inline script 和外链script (<script src="xxx" />) 各有优势。
假设你的script只有很少的几行,写在html内确实省去了一个请求。
不过用外链方式,最好的情况下可以让浏览器从本地缓存中进行一次IO读取——这只会花2ms。如果谁有兴趣的话我可以解释一下什么情况下会完全读本地缓存,什么情况下是HTTP 304,什么情况下会是全新的HTTP 200. 这些不是重点,结论是 js比较少的时候,在页面上写会有性能优势。
但是随着js代码的增加,这个优势越来越小。你需要衡量的东西也会越来越多:
-
外链js对页面加载速度的影响
-
内联js对页面加载速度的影响
-
外链js被缓存后,用户访问多个页面时能节约的加载时间
-
不同页面,新访问用户的比例
随着js代码的增加,直接在页面上嵌入script的做法获得的收益越来越小
- 维护性
维护性在我看来是优先于性能要考虑的,放在后面说是因为这方面外链script完胜。如果你在页面上写js,分散的js碎片要么迅速膨胀,要么被遗忘而成为隐患。
所以建议js还是写到单独的js文件里面。
再回到楼主的问题, 是否可以或者应该合并到一处?
-
是完全可以的,
$(function(){})里面的function会在DOMReady之后才运行,所以放在哪里都可以 (甚至在你要操作的DOM HTML前面) -
是否应该?如果模板是有很多个小模块构成,对应的js文件也尽量和模板放在一起,做模块化的管理。
<!-- module A -->
a模块的HTML…
</div>
<script src="module-a.js"></script>
<!-- module B -->
b模块的HTML</div>
<script src="module-b.js"></script>
(sinatra + haml 用惯了,不习惯rails的静态资源管理方式)
实际上上面这个模板,更好的方式是拆分成a、b两个partial模板了
维护记录
| 时间 | 修改内容 | 原因 |
|---|---|---|
| 2026-10-09 | 修复本地 Hugo 构建的 Raw HTML 警告:代码/配置放入代码块,正文中的尖括号占位符改为行内代码;文件重命名为 inline-external-script.md;title 改为「inline script 和外链 script」;url 改为 inline-external-script;旧 url 加入 aliases;categories 改为 JavaScript |
正文中的 HTML/XML 片段被当作原始 HTML 丢弃;文件名/URL/标题按规范调整 |