节点,Express +翡翠加载脚本一次

Node, Express + Jade load script once

本文关键字:一次 脚本 加载 Express 节点      更新时间:2023-09-26

我使用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'上,我想使用这些值,所以重新加载脚本并不好,因为它会清空它

一个普通的脚本标签src文件将被浏览器缓存,这样它就不会在第二页上重新加载。

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

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

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

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

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