Node,Express + Jade加载脚本一次

时间:2015-09-01 18:55:54

标签: javascript node.js express pug

我使用Node,Express和Jade来渲染网页的3个页面。我只是将页面服务为:

some_string/

我计划在'/ mid'和'/ final'页面上使用jQuery,所以我只是在mid.jade和final.jade结束时添加了以下内容:

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两次。是否有可能在没有jQuery加载两次的情况下设置类似的东西?我可以想到多个客户端解决方案,但我很好奇我是否可以在某种程度上与当前代码类似?

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

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

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

1 个答案:

答案 0 :(得分:1)

浏览器只会缓存一个常见的脚本标记src文件,因此不会在第二页上重新加载。

浏览器无法单独缓存内容嵌入页面的自定义脚本标记,因为它嵌入在页面中,浏览器仅缓存整个文件。

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

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

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

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