2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Das dynamische Lesen der Datei bei jeder Anfrage hat gewisse Auswirkungen auf die Leistung, insbesondere in Situationen mit hoher Parallelität. Um dieses Problem zu lösen, können Sie die Vorlagenkonfiguration lesen, wenn die Anwendung gestartet wird, und die Konfiguration aktualisieren, wenn sich die Vorlage ändert, sodass die Datei nur dann gelesen werden muss, wenn die Anwendung gestartet wird und sich die Vorlage ändert, anstatt die Datei jedes Mal zu lesen Anfrage.
Sie können eine globale Variable verwenden, um den aktuellen Vorlagenpfad zwischenzuspeichern und die Variable und die Datei nur zu aktualisieren, wenn die Vorlage geändert wird.
Hier ist der verbesserte Beispielcode:
project
│
├── views/
│ ├── template1/
│ │ └── index.njk
│ ├── template2/
│ │ └── index.njk
│
├── config/
│ └── templateConfig.json
│
├── app.js
templateConfig.json
Beispielinhalt{
"currentTemplate": "template1"
}
app.js
Beispielcodeconst 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
: Den aktuellen Vorlagenpfad zwischenspeichern.loadTemplateConfig
Funktion: Lesen Sie die Vorlagenkonfigurationsdatei beim Start der Anwendung und speichern Sie den Pfad in einer globalen Variablen.configureNunjucks
Funktion: Konfigurieren Sie die Nunjucks-Umgebung basierend auf dem zwischengespeicherten Vorlagenpfad.loadTemplateConfig
UndconfigureNunjucks
Funktion.Auf diese Weise werden die Datei- und Konfigurations-Nunjucks nur gelesen, wenn die Anwendung gestartet wird und der Benutzer den Vorlagenpfad ändert, wodurch das Leistungsproblem vermieden wird, das beim Lesen der Datei bei jeder Anfrage entsteht.