As an engineer, especially when working on enterprise-grade applications, our coding is influenced by many factors. It is no longer about if your function worked or your ability to achieve the desired result. It is rather about writing performant code, thinking about time complexity vs space complexity, scaling, and ensuring that your application is as fast as possible.
The console.time() method is the console class of Node.js. It is used to starts a timer that is used to compute the time taken by a piece of code or function. The method console.timeEnd() is used to stop the timer and output the elapsed time in milliseconds to stdout. The timer can be accurate to the sub-millisecond.
console.time() takes the parameter “label” and the label must be the same name when calling console.timeEnd() to stop the timer and get the time output to the console. If the label name is not the same, it will throw Warning: No such label ‘{label name}’ for console.timeEnd().
To understand this better, let me use the stopwatch concept to illustrate. Let’s assume you wanted to start a race, you would start your stopwatch and when the race ends, you would stop your stopwatch. So console.time() is the same as starting your stopwatch and console.timeEnd() as stopping your stopwatch. Easy right?
Now let us take an example of merging two objects with time complexity in mind. Remember, it is not about what works but what works in the shortest time.
const object_1 = {
id: 3,
age: 34,
gender: 'male',
name: 'Ed Sheeran'
}
const object_2 = {
car: "Ferrari",
colour: "red",
year: "2023"
}
//Start the timer
console.time('object_assign')
const merge_1 = Object.assign(object_1, object_2);
console.timeEnd('object_assign')
//end the timer
//Start the timer
console.time('rest_operator')
const merge_2 = {...object_1,...object_1}
console.timeEnd('rest_operator')
//end the timer
In the above code, I merged two objects using Object constructor method Object.assign() and Javascript spread operator.
Time output on the console:
object_assign: 0.257ms
rest_operator: 0.032ms
From the console output, we can see that the rest/spread operator is faster than Object.assign()
And hence we can now make an informed decision. Please note that in this article we are NOT talking about why rest operators should be used over Object.assign(), but about HOW to use console.time! 🙂
Ready for another example?
const arr = [1,3,4,5,3]
//Start timer
console.time("map")
arr.map(item => item)
console.timeEnd('map')
//End timer
//Start timer
console.time("forEach")
arr.forEach(element=>element)
console.timeEnd('forEach')
//End timer
Output
map: 0.188ms
forEach: 0.035ms
So we saw how console.time() and console.timeEnd() can be used as a quick debugging tool to identify bottlenecks in our application.
You can check the MDN documentation for console.time() and console.timeEnd()