我正在尝试使用服务器端包含系统以模块化方式组织我的网站。这个想法是每个模块都将拥有自己的 css 和自己的 javascript,并且只会在页面中包含后才加载 - 因此任何没有该模块的页面也不会加载该模块 css/js。
我已经这样做了:
header.html
-----------
<!-- header start -->
<link rel="stylesheet" href="css/header.css">
<header class="module-header">
<div class="links">
links...
</div>
</header>
<script src="js/header.js"></script>
<!-- header end -->
footer.html
-----------
<!-- footer start -->
<link rel="stylesheet" href="css/footer.css">
<header class="module-footer">
<div class="links">
links...
</div>
</header>
<script src="js/footer.js"></script>
<!-- footer end -->
然后在 index.html 上:
<!DOCTYPE html>
<head>
<title>Modular page</title>
</head>
<body>
<!--#include virtual="html/header.html" -->
<!--#include virtual="html/footer.html" -->
</body>
</html>
这很好用,并且由于脚本是在每个模块之后加载的,因此可以保证在运行脚本之前内容存在。Css 是在之前加载的,并确保它有一个很好的布局。
但是 - 我的解决方案遇到了一些问题:
- 如果我要多次包含一个模块,例如 product.html,它将被重复 20 次 - 我也会包含 20 次 css 和 js 文件。不好。
- 通常我已经看到 css 包含在 head 标签中,而 js 包含在 body 的末尾。在文档编制过程中让它们全部出现会导致任何问题吗?
这些包含可以与任何包含、php、asp 或 jsp 交换......这是使用 apaches SSI。
整个想法是否朝着错误的方向发展?我想这用于开发设置,但是有某种加载页面的智能 nodejs rhino 脚本 - 查找加载的脚本和 css,连接并缩小并添加为单个包含以用于生产。