- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我使用 Express & Jade 在 nodejs 中创建了一个网站。当我加载内容非常少的简单登录页面时,即使这样加载也需要很多时间。它的 TTFB 太高(引用所附的屏幕截图。) 下面是我的 app.js 代码。不确定我做错了什么。
app.js
// Packages
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var dbhelper = require('./routes/dbhelper.js')
var common = require('./routes/common.js')
var session = require('express-session')
var http = require('http');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
cookie: { secure: true }
}))
// uncomment after placing your favicon in /public
//app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(require('stylus').middleware(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public')));
//app.locals.basedir = path.join(__dirname, 'views');
// set up mustbe config
var mustBe = require("mustbe");
var mustBeConfig = require("./mustBeConfig");
mustBe.configure(mustBeConfig);
// Routes
var routes = require('./routes/index');
var users = require('./routes/users');
var dashboard = require('./routes/dashboard');
var monitor = require('./routes/monitor');
var resetpassword = require('./routes/resetpassword');
var archive = require('./routes/archive');
var archiveList = require('./routes/archiveList');
var archiveSetup = require('./routes/archivesetup');
app.locals.moment = require('moment');
app.use(function (req, res, next) {
res.locals.session = session;
next();
});
// Make database connection available to router
app.use(function (req, res, next) {
req.sessionID = req.sessionID;
req.db = dbhelper.sql;
req.config = dbhelper.config;
req.ActionOutput = common.ActionOutput;
req.ActionStatus = common.ActionStatus;
req.ChangeEmployer = common.ChangeEmployer;
// Redirect to login page if no session found
if ((session.Employee == null || session.Employee == undefined || session.Employee == '') && (req.url != '/' && req.url != '' && req.url != '/login'))
res.redirect('/');
// Redirect to dashboard if session exists & redirecting to login page
else if ((session.Employee != null && session.Employee != undefined && session.Employee != '') && (req.url == '/' || req.url == '' || req.url == '/login'))
res.redirect('/dashboard');
else
next();
});
app.use('/', routes);
app.use('/users', users);
app.use('/dashboard', dashboard);
app.use('/monitor', monitor);
app.use('/resetpassword', resetpassword);
app.use('/archive', archive);
app.use('/archiveList', archiveList)
app.use('/archivesetup', archiveSetup);
process.on('uncaughtException', function (err) {
console.log('Caught exception: ${ err}');
var EID = SaveErrorLog(err.message, err.stack, 'a', err.address);
});
app.use(function (err, req, res, next) {
if (!err)
return next();
var EID = SaveErrorLog(err.message, err.stack, req.connection.remoteAddress , err.path);
// Check if request is ajax
var is_ajax_request = req.xhr;
var op = new common.ActionOutput();
op.ActionStatus = common.ActionStatus.Error;
op.Message = err.message;
res.send(op);
});
function SaveErrorLog(Message, CompleteError, IP, URL) {
// Get Logged In User
var UserID = null;
if (session.SupportUser != null && session.SupportUser != undefined && session.SupportUser != '') {
UserID = session.SupportUser.UserID;
} else if (session.Employee != null && session.Employee != undefined && session.Employee != '') {
UserID = session.Employee.EmployeeID;
}
// Log Error Into Database
var ErrorLogID = 0;
var sql = dbhelper.sql;
var conn = new sql.Connection(dbhelper.config);
conn.connect().then(function () {
// Stored Procedure
var request = new sql.Request(conn);
request.input('UserID', sql.BigInt, UserID);
request.input('Message', sql.VarChar(500), Message);
request.input('CompleteError', sql.VarChar(2000), CompleteError);
request.input('IP', sql.VarChar(50), IP);
request.input('URL', sql.VarChar(50), URL);
request.execute('USP_SaveErrorLog', function (err, recordset, returnValue) {
if (!err && recordset[0][0].ValidationCode == null) {
ErrorLogID = recordset[0][0].ErrorLogID;
} else {
}
return ErrorLogID;
});
});
}
// catch 404 and forward to error handler
app.use(function (req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function (err, req, res, next) {
res.status(err.status || 500);
res.render('shared/error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function (err, req, res, next) {
res.status(err.status || 500);
res.render('shared/error', {
message: err.message,
error: {}
});
});
module.exports = app;
//app.listen(1234, function () {
// console.log('Server starts on port: ' + 1234);
//});
http.createServer(app).listen(1234, function () {
console.log('Express server listening on port ' + 1234);
});
我还从 app.js 中删除了所有与数据库相关的工作,但仍然面临同样的问题。任何帮助将不胜感激。
最佳答案
我们用过类似的东西,它会缓存 jade 内容并减少 TTFB
/* GET home page. */
router.get('/', function (req, res) {
var abs = session.Employers;
var options = {cache: true , title: 'Express'};
//Method 1
//var template = jade.compileFile('./views/login/index.jade', options);
//res.send(template({ title: 'Express' }));
//Method 2
res.send(jade.renderFile('./views/login/index.jade', options));
});
关于node.js - NodeJs 网站 TTFB 很高,网站运行很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36325922/
我得到了以下公式来测量第一个字节的时间 (TTFB)、TTFB 到 DOM 就绪和页面加载。 TTFB window.performance.timing.responseStart - window
我遇到了一个 wordpress 网站的问题,我得到了大约 8 秒的 TTFB。 我的服务器是 debian 7,带有 apache,3go RAM,托管在 gandi cloud IAAS 如果我安
由于 TTFB 会因每个请求而异,因此我想对其进行统计并获取平均值。有谁知道我如何通过 PHP 进行测量?bytecheck.com 网站能够分析这些数据:这是 example.com 的示例:htt
当我使用 angular Universal 运行我的应用程序时,我发现 TTFB 存在巨大差异。 ssr 比正常的 Angular 命令花费更多的时间。如何使用 Angular 通用服务器端渲染改进
我的 MVC 应用程序在 IIS 6.0(生产服务器上为 7.0)上运行,其中使用了 API。对于 API,我在 API.ashx 文件中使用 IHttpHandler 实现。 我对我的 API.as
我有一个 php、Mysql、Apache 站点。在本地测试时,页面加载速度确实很快,大约为 20 毫秒到 40 毫秒。 但是,当我将其托管在共享托管服务器上并配置尽可能接近本地主机的所有配置和设置时
我们正在运行一个使用 WP 4.1 和 ~10 个信誉良好的插件的成员(member)网站。平均而言,我们的第一个请求需要 1.2 秒。 因为它是一个成员,我们使用片段缓存,而不是整页缓存。通过这样做
类似问题:Here 网站:Cleanfiles PPD Network Raw Server Link (Skip DNS): http://173.247.246.58/ 瀑布 View (网页测试
我有一个查询,其中涉及根据创建时间按排序顺序从表中获取用户列表。我从 chrome 开发人员工具中得到了以下时序图。 您可以看到 TTFB(到第一个字节的时间)太高了。 我不确定是否是因为 SQL 排
我正在使用 nginx 在本地 Ubuntu 系统上运行 PHP 项目。在我的本地系统上,当我向 127.0.0.1 发送请求时,它首先返回 100 毫秒,然后在第二个、第三个和所有请求时返回 10
我有一个包含 7 个 div 的 html 页面,我使用 ajax 调用加载每个 div,以便并行加载这些卡片。当我从 Controller 端检查时,每个 div StoredProcedure 只
我有一个查询,涉及根据创建时间从表中按排序顺序获取用户列表。我从chrome开发者工具中得到了以下时序图。 您可以看到 TTFB(第一个字节的时间)太高。 不知道是不是SQL排序的原因。如果这是原因,
这些响应时间是来自 JMeter TTFB 还是 TTLB? 最佳答案 响应时间是“到最后一个字节的时间” http://jmeter.512774.n5.nabble.com/JMeter-resu
我想知道是否可以使用 fetch API 计算 TTFB(第一个字节的时间)或等待时间,或者只是第一个 block 到达客户端的时间。 最佳答案 我已经设法找到一种方法来查找 ttfb 以及请求花费了
我在减少 PHP 上的 TTFB 时遇到了麻烦。 即使文件为空,也需要大约 100 毫秒。 .php 或 .html 无关紧要,两者都需要相同的时间。 我在 HETZNER 上有一个不错的服务器,服务
我有一些简单的 ajax 调用来填充下拉列表: window.addEventListener('load', function () { GetDropDownData('http://mysite
我正在 Node.js + MongoDB 中构建一个仅限移动设备的应用程序。我已在 AWS AP-Southeast-1 区域中部署了我的服务器。 由于我是 MongoDB 新手,因此我正在利用 M
无论我们做了什么改变,TTFB 都很高!令人惊讶的是,服务器端人员坚持认为一切都设置正确并且服务器运行速度足够快但是webpagetest报告完全没有变化!经过如此多的优化,我不敢相信它没有改变,我开
这是一个加载 url 并捕获响应时间的 python 脚本: import urllib2 import time opener = urllib2.build_opener() request =
我在一个页面上有几个类似的 Vue.js 组件,每个组件都需要使用 axios 向我的服务器发送 API 请求。 请求看起来像这样: this.axios.get(`/api/stock/${this
我是一名优秀的程序员,十分优秀!