javascript - Node、Express + Jade 加载脚本一次

标签 javascript node.js express pug

我正在使用 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,但要利用它,您必须专门编写代码将状态保存到存储位置,然后适用时从那里读取它的代码。

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

关于javascript - Node、Express + Jade 加载脚本一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32338973/

相关文章:

javascript - onchange不能用?

javascript - Node Ejs 模块,包括不工作

javascript - 如何在Vue中提交表单,重定向到新路由并传递参数?

node.js - Angular2 + ng2-Uploader UPLOAD_DIRECTIVES 未定义

javascript - 为什么我的显示和编辑路由中的 req.body 未定义,但创建路由中却未定义?

node.js - Angular2 和 Express

javascript - 使用kineticjs和tweens实现持久动画

javascript - 如何在鼠标悬停时停止滚动 <div>?

javascript - Web/SPA 元素中的 Visual Studio 2015 Bundler/Minifier 问题

node.js - Nodejs 事件错误 Express