对于相同的代码,重要的Node.js与Python 3的执行时间差异是多少?

时间:2018-04-19 15:53:29

标签: javascript python node.js performance runtime

我正在为一个练习网站的问题解决方案并得到正确的答案。我在JavaScript / ES6(Node.js)中编写了我的解决方案,其执行时间约为870ms。这是我写的代码:

console.time('runtime')
const isPrime = num => {
    if (num < 0) return false
    for (let i = 2, s = Math.sqrt(num); i <= s; i++)
        if (num % i === 0) return false
    return num !== 1
}

let sideLength = 7
let ratio = 100
let gap = 2
let progress = 1
let primes = 0
let count = 2

for (let i = 3; ratio >= 10; i += gap) {
    const iRoot = Math.sqrt(i)
    if (iRoot % 2 === 1) {
        ratio = (primes / count) * 100
        sideLength = iRoot
    }
    const curProgress = progress % 4
    if (curProgress === 0)
        gap += 2
    progress++
    if (isPrime(i))
        primes++
    count++
}

console.log(sideLength)
console.timeEnd('runtime')

作为对自己的挑战,我想在Python 3中重写相同的逻辑。我试图在两个程序之间尽可能地复制相同的逻辑。但是它的执行时间明显变慢了。大约19200ms!比JavaScript版慢大约22倍!我最终将此作为Python 3版本的结果:

from math import sqrt

def is_prime(num):
    if num < 0:
        return False
    s = sqrt(num)
    for i in range(2, int(s) + 1):
        if num % i == 0:
            return False
    return num != 1

side_length = 7
ratio = 100
gap = 2
progress = 1
primes = 0
count = 2
i = 3

while ratio >= 10:
    root_i = sqrt(i)
    if root_i % 2 == 1:
        ratio = (primes / count) * 100
        side_length = root_i
    current_progress = progress % 4
    if current_progress == 0:
        gap += 2
    progress += 1
    if is_prime(i):
        primes += 1
    count += 1
    i += gap

print(int(side_length))

我不确定我是否遗漏了一些非常明显的东西,或者在比较JavaScript和Python时,类似功能在后台的工作方式存在显着差异。任何帮助理解为什么会出现这种性能差异将非常感谢!谢谢!

请注意我如何衡量执行时间

对于Python,我使用了magic function中的%timeit iPython以及使用%run从文件执行。

对于JavaScript版本,我使用console.time函数,将console.time('runtime')console.timeEnd('runtime')分别放在文件的顶部和底部。

0 个答案:

没有答案