2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Tiedoston dynaamisella lukemisella jokaisen pyynnön yhteydessä on tietty vaikutus suorituskykyyn, erityisesti erittäin samanaikaisissa tilanteissa. Tämän ongelman ratkaisemiseksi voit lukea mallin asetukset sovelluksen käynnistyessä ja päivittää asetukset, kun malli muuttuu niin, että tiedosto täytyy lukea vain, kun sovellus käynnistyy ja malli muuttuu sen sijaan, että tiedostoa luettaisiin joka kerta. pyyntö.
Voit käyttää yleistä muuttujaa tallentaaksesi nykyisen mallipolun välimuistiin ja päivittää muuttujan ja tiedoston vain, kun mallia muutetaan.
Tässä on parannettu esimerkkikoodi:
project
│
├── views/
│ ├── template1/
│ │ └── index.njk
│ ├── template2/
│ │ └── index.njk
│
├── config/
│ └── templateConfig.json
│
├── app.js
templateConfig.json
Esimerkki sisällöstä{
"currentTemplate": "template1"
}
app.js
Esimerkkikoodiconst 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
: Tallenna nykyisen mallin polku välimuistiin.loadTemplateConfig
toiminto: Lue mallin määritystiedosto sovelluksen käynnistyessä ja tallenna polku globaaliin muuttujaan.configureNunjucks
toiminto: Määritä Nunjucks-ympäristö välimuistissa olevan mallin polun perusteella.loadTemplateConfig
jaconfigureNunjucks
toiminto.Tällä tavalla tiedostot ja konfiguraatiot luetaan vain, kun sovellus käynnistyy ja käyttäjä muuttaa mallin polkua, jolloin vältetään suorituskykyongelmat, jotka liittyvät tiedoston lukemiseen jokaisella pyynnöstä.