Node, Express + Jade 一次加载脚本

Node, Express + Jade load script once

我正在使用 Node、Express 和 Jade 呈现一个网站的 3 个页面。我只是将页面作为:

router.get('/', function (req, res, next) {
    res.render('home');
});

router.get('/mid', function (req, res, next) {
    res.render('mid');
});

router.get('/final', function (req, res, next) {
    res.render('final');
});

我打算在“/mid”和“/final”页面上使用 jQuery,所以我只是在 mid.jade 和 final.jade 的末尾添加了以下内容:

script(type='text/javascript' src='jquery-min.js')

我的问题:如果用户打开“/mid”然后打开“/final/”,那么用户会下载 jQuery 两次。是否可以在不 jQuery 加载两次的情况下设置类似的东西?我可以想到多种客户端解决方案,但我很好奇我是否可以做到与当前代码有些相似?

编辑: jQuery 不是一个很好的例子,让我们假设在 '/mid' 和 '/final' 上我有相同的脚本:

var a = [];

然后在“/mid”上我将一些项目推入数组然后在“/final”上我想使用这些值,所以重新加载脚本不好,因为它会清空它。

一个普通的script标签src文件只会被浏览器缓存,所以它不会在第二页重新加载。

内容嵌入到页面中的自定义脚本标记不能由浏览器独立缓存,因为它嵌入在页面中,浏览器只缓存整个文件。

如果您想在两个不同的模板中填充相同的数组,那么您实际上只需将相同的代码连接到两个模板,以便相同的代码在两个模板中填充它们。您不能 "save" 一个模板的结果,然后在另一个模板中使用它。

您可以将 javascript 数组放入子模板(或部分模板或包含模板或任何 jade 调用的模板),以便在两个页面中使用相同的子模板。然后,您只需在子模板中配置一次该数组的呈现,两个页面将使用相同的代码。

请记住,没有任何 Javascript 状态会从一个页面保存到下一个页面 - 为每个新页面创建一个全新的环境,因此无论您希望 Javascript 环境出现在给定页面中,您必须自己将其初始化 - 它不会 "keep" 上一页的任何状态。您可以有意识地将状态从一个页面保存到下一个页面,无论是在数据库的服务器端还是在 cookie 或 LocalStorage 的客户端,但要利用它,您必须专门编写将状态保存到存储位置的代码,然后适用时从那里读取的代码。

但是,听起来你想要的只是在两个页面中初始化相同的数组,这应该可以很好地与子模板一起工作,或者只是在两个页面中引用相同的模板代码。