如何在Cloud Function for Firebase中测量特定代码块的执行时间?

时间:2018-01-31 07:09:18

标签: node.js firebase firebase-realtime-database google-cloud-functions

我想测量在google云功能上运行的特定代码块的执行时间(用于firebase写入事件)。谁能告诉我怎么做。

是否没有专门的工具来衡量执行时间。

我编码了2个代码。所以,我想知道哪些代码具有更好的执行时间,从而提供更好的性能。

我尝试在以下代码中使用process.hrtime(),但它会为相同的数据产生不同的结果。

* Algo 1跑步时间299661890

Algo 1跑步时间5684236

Algo 1跑步时间10185061 *

开始时间[87,594147806] 'Algo 1跑步时间9251749'

开始时间[22,803098325] 'Algo 1运行时间1498176261'

// Import the Firebase SDK for Google Cloud Functions.
var functions = require('firebase-functions');
var t0
var mymap= new Map();
    exports.processData=functions.database.ref("/test").onWrite(event=>{
    const dataValue = event.data.child('data').val()
    dataValue.body = myFuction(dataValue.body)
    const promise = event.data.ref.child('data').set(dataValue)
  '
    //Finish Time
    t1=process.hrtime(t0)

    var RunTime=Math.round((t1[0]*1000000000) + (t1[1]));
    console.log("Algo 1 Running time "+RunTime)
    return promise;
    }
})

function myFunction(s){
    // start time 
    t0=process.hrtime()
    var newValue=0
    myProbdict.forEach(mapElements);
    function mapElements(value, key, map) {
        if(newValue< 68){
        reduction+=parseInt(value)
        var regexstring ="\\b"+`${key}`+"\\b"
        var regexp = new RegExp(regexstring, "gi");
        s= s.replace(regexp,"#")
        }
    }
    return dataValue
}

1 个答案:

答案 0 :(得分:1)

你不能期望有一个恒定的执行时间。执行函数所需的时间总是不同的,因为它取决于当前的网络状态(可能还有当前的服务器使用情况)。

我在this blog post找到了一个很好的例子。博客作者编写了一个应该在1ms内执行的函数:

var start = new Date();
var hrstart = process.hrtime();

    setTimeout(function (argument) {
        // execution time simulated with setTimeout function
        var end = new Date() - start,
            hrend = process.hrtime(hrstart);

        console.info("Execution time: %dms", end);
        console.info("Execution time (hr): %ds %dms", hrend[0], hrend[1]/1000000);
}, 1);

在第一次执行时,他得到了预期的结果:

Execution time: 1ms
Execution time (hr): 0s 1.025075ms

但是在第二次执行时,该函数花了不到1ms:

Execution time: 3ms
Execution time (hr): 0s 2.875302ms

如果您需要知道代码块的执行时间,您可以获取这些输出并计算平均值:(29961890 + 5684236 + 10185061)÷3,这将产生类似于15277062的内容。