τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Η δυναμική ανάγνωση του αρχείου με κάθε αίτημα έχει κάποιο αντίκτυπο στην απόδοση, ειδικά σε καταστάσεις υψηλής ταυτόχρονης χρήσης. Για να λύσετε αυτό το πρόβλημα, μπορείτε να διαβάσετε τη διαμόρφωση προτύπου όταν ξεκινά η εφαρμογή και να ενημερώσετε τη διαμόρφωση όταν αλλάζει το πρότυπο, έτσι ώστε το αρχείο να χρειάζεται να διαβάζεται μόνο όταν ξεκινά η εφαρμογή και αλλάζει το πρότυπο, αντί να διαβάζετε το αρχείο σε κάθε αίτηση.
Μπορείτε να χρησιμοποιήσετε μια καθολική μεταβλητή για να αποθηκεύσετε προσωρινά την τρέχουσα διαδρομή προτύπου και να ενημερώσετε τη μεταβλητή και το αρχείο μόνο όταν αλλάξει το πρότυπο.
Εδώ είναι το βελτιωμένο δείγμα κώδικα:
project
│
├── views/
│ ├── template1/
│ │ └── index.njk
│ ├── template2/
│ │ └── index.njk
│
├── config/
│ └── templateConfig.json
│
├── app.js
templateConfig.json
Δείγμα περιεχομένου{
"currentTemplate": "template1"
}
app.js
Δείγμα κώδικαconst 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
: Αποθηκεύστε προσωρινά την τρέχουσα διαδρομή προτύπου.loadTemplateConfig
λειτουργία: Διαβάστε το αρχείο διαμόρφωσης προτύπου όταν ξεκινά η εφαρμογή και αποθηκεύστε τη διαδρομή σε μια καθολική μεταβλητή.configureNunjucks
λειτουργία: Διαμορφώστε το περιβάλλον Nunjucks με βάση τη διαδρομή προτύπου που έχει αποθηκευτεί στην κρυφή μνήμη.loadTemplateConfig
καιconfigureNunjucks
λειτουργία.Με αυτόν τον τρόπο, το αρχείο και η διαμόρφωση Nunjucks διαβάζονται μόνο όταν ξεκινά η εφαρμογή και ο χρήστης αλλάζει τη διαδρομή του προτύπου, αποφεύγοντας το πρόβλημα απόδοσης της ανάγνωσης του αρχείου σε κάθε αίτημα.