Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
La lectura dinámica del archivo con cada solicitud tiene un cierto impacto en el rendimiento, especialmente en situaciones de alta concurrencia. Para resolver este problema, puede leer la configuración de la plantilla cuando se inicia la aplicación y actualizar la configuración cuando la plantilla cambia, de modo que el archivo solo deba leerse cuando se inicia la aplicación y la plantilla cambia, en lugar de leer el archivo cada vez. pedido.
Puede utilizar una variable global para almacenar en caché la ruta de la plantilla actual y solo actualizar la variable y el archivo cuando se cambia la plantilla.
Aquí está el código de muestra mejorado:
project
│
├── views/
│ ├── template1/
│ │ └── index.njk
│ ├── template2/
│ │ └── index.njk
│
├── config/
│ └── templateConfig.json
│
├── app.js
templateConfig.json
Contenido de muestra{
"currentTemplate": "template1"
}
app.js
Código de muestraconst 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
: almacena en caché la ruta de la plantilla actual.loadTemplateConfig
función: Lea el archivo de configuración de la plantilla cuando se inicie la aplicación y guarde la ruta a una variable global.configureNunjucks
función: Configure el entorno Nunjucks según la ruta de la plantilla almacenada en caché.loadTemplateConfig
yconfigureNunjucks
función.De esta manera, el archivo y la configuración Nunjucks solo se leen cuando se inicia la aplicación y el usuario cambia la ruta de la plantilla, evitando el problema de rendimiento de leer el archivo en cada solicitud.