#javascript #node.js
#javascript #node.js
Вопрос:
Попытка измерить производительность и вывести показатели производительности с помощью performance.getEntriesByType() однако возвращает ошибку, что performance.getEntriesByType() не является функцией. Пробовал разные способы устранения неполадок, однако все, что я пробовал, приводит к той же ошибке, на самом деле не понимаю, как getEntriesByType() не является функцией, поскольку она исходит из зависимости от узла. Версия узла, которую я использую: 10.22.1, не использующая никаких пакетов npm, чистый код NodeJS.
var {performance} = require('perf_hooks');
var util = require('util');
var debug = util.debuglog('performance');
handlers._tokens.post = function (data, callback){
performance.mark('entered function')
var phone = typeof(data.payload.phone) == 'string' amp;amp; data.payload.phone.trim().length > 10 ? data.payload.phone.trim() : false
var password = typeof(data.payload.password) == 'string' amp;amp; data.payload.password.trim().length > 0 ? data.payload.password.trim() : false
performance.mark('inputs validated')
if (phone amp;amp; password){
performance.mark('beginning user lookup')
_data.read('users', phone, function(err, userData){
performance.mark('user lookup complete')
if(!err amp;amp; userData){
// hash the password and validate
performance.mark('beginning password hashing')
hashedPassword = helpers.hash(password)
performance.mark('password hashing complete')
if (hashedPassword == userData.hashedPassword) {
// if valid create token
performance.mark('creating data for token')
var tokenId = helpers.createRandomString(20)
// set expiry date
var expires = Date.now() 1000 * 60 * 60
var tokenObject = {
'phone': phone,
'id': tokenId,
'expires': expires
}
performance.mark('token data creation complete')
performance.mark('beginning storing token data')
// store the token
_data.create('tokens', tokenId, tokenObject, function(err){
performance.mark('token data storing is complete')
// gather all the measurements
performance.measure('Beginning to end', 'entered function', 'token data storing is complete')
performance.measure('Password hasing', 'beginning password hashing', 'password hashing complete')
performance.measure('Finding user', 'beginning user lookup', 'user lookup complete')
performance.measure('Input validation', 'entered function', 'inputs validated')
performance.measure('Token creation', 'creating data for token', 'token data creation complete')
performance.measure('Token storing', 'beginning storing token data', 'token data storing is complete')
// log out all the measurements
var measurements = []
measuerments = performance.getEntriesByType('measure')
measurements.forEach((measurement)=>{
debug('x1b(33m%sx1b(0m', measurement.name ' ' measurement.duration)
})
if(!err){
callback(200, tokenObject)
} else {
callback(500, {'error': 'couldnt create new token'})
}
})
} else {
callback(400, {'error': 'passwords did not match'})
}
} else {
callback(400, {'error': 'couldnt find the user'})
}
})
} else {
callback(400, {'error': 'missing required fields'})
}
}
Ответ №1:
Взгляните на документацию:
Вам нужно создать a PerformanceObserver
и при его обратном вызове вы получаете a PerformanceObserverEntryList
, для которого вы можете вызвать getEntriesByType()
const {
performance,
PerformanceObserver
} = require('perf_hooks');
const obs = new PerformanceObserver((list, observer) => {
console.log(list.getEntriesByType('measure'));
observer.disconnect();
});
obs.observe({ entryTypes: ['measure'], buffered: true });
performance.measure('test');
(пример кода также взят из документации и слегка адаптирован к вопросу OP)