2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
La lecture dynamique du fichier à chaque requête a un certain impact sur les performances, en particulier dans les situations de forte concurrence. Pour résoudre ce problème, vous pouvez lire la configuration du modèle au démarrage de l'application et mettre à jour la configuration lorsque le modèle change, de sorte que le fichier ne doive être lu qu'au démarrage de l'application et que le modèle change, au lieu de lire le fichier à chaque fois. demande.
Vous pouvez utiliser une variable globale pour mettre en cache le chemin du modèle actuel et mettre à jour la variable et le fichier uniquement lorsque le modèle est modifié.
Voici l'exemple de code amélioré :
project
│
├── views/
│ ├── template1/
│ │ └── index.njk
│ ├── template2/
│ │ └── index.njk
│
├── config/
│ └── templateConfig.json
│
├── app.js
templateConfig.json
Exemple de contenu{
"currentTemplate": "template1"
}
app.js
Exemple de codeconst express = require('express');
const nunjucks = require('nunjucks');
const path = require('path');
const fs = require('fs');
const app = express();
// 设置静态文件目录
app.use(express.static(path.join(__dirname, 'public')));
// 全局变量,缓存当前模板路径
let currentTemplatePath;
// 读取配置文件中的当前模板路径
function loadTemplateConfig() {
const config = JSON.parse(fs.readFileSync(path.join(__dirname, 'config/templateConfig.json'), 'utf8'));
currentTemplatePath = config.currentTemplate;
}
// 配置Nunjucks环境
function configureNunjucks() {
nunjucks.configure(path.join(__dirname, `views/${currentTemplatePath}`), {
autoescape: false,
noCache: true,
express: app
});
}
// 初始化时加载配置
loadTemplateConfig();
configureNunjucks();
// 路由
app.get('/', (req, res) => {
res.render('index.njk', { title: 'Hello Nunjucks!' });
});
// 路由:更改模板路径
app.get('/change-template', (req, res) => {
const newTemplate = req.query.template;
if (newTemplate) {
currentTemplatePath = newTemplate;
const config = { currentTemplate: newTemplate };
fs.writeFileSync(path.join(__dirname, 'config/templateConfig.json'), JSON.stringify(config), 'utf8');
configureNunjucks(); // 更新Nunjucks配置
res.send(`Template changed to ${newTemplate}`);
} else {
res.send('No template specified');
}
});
// 启动服务器
const port = 3000;
app.listen(port, () => {
console.log(`服务器已启动,访问地址:http://localhost:${port}`);
});
currentTemplatePath
: Mettez en cache le chemin du modèle actuel.loadTemplateConfig
fonction: Lisez le fichier de configuration du modèle au démarrage de l'application et enregistrez le chemin vers une variable globale.configureNunjucks
fonction: configurez l'environnement Nunjucks en fonction du chemin du modèle mis en cache.loadTemplateConfig
etconfigureNunjucks
fonction.De cette manière, le fichier et les Nunjucks de configuration ne sont lus que lorsque l'application démarre et que l'utilisateur modifie le chemin du modèle, évitant ainsi le problème de performances lié à la lecture du fichier à chaque requête.