06月26, 2014

Node.js与PHP、Python的字符处理性能对比

因为后续考虑实现 Fl 引擎的Node.js版本,所以对比了下Node.js和PHP的字符处理性能。发现Node.js真是甩了PHP几条街啊,再测试了下Python,比PHP还慢。

测试用例分为用函数和类来进行一个大字符串的字符逐一读取。

测试代码

Node.js

函数

var fs = require("fs");

var content = fs.readFileSync("page.html", {
    encoding: "utf-8"
});

function chars(content){
    var length = content.length;
    var pos = 0;
    while(pos ++ < length){
        var chr = content[pos - 1];
    }
}
var start = Date.now();
chars(content);
var end = Date.now();
console.log(end - start);

var fs = require("fs");

var content = fs.readFileSync("page.html", {
    encoding: "utf-8"
});

var Chars = function(str){
    this.str = str;
    this.length = str.length
    this.pos = 0;
}
Chars.prototype.run = function(){
    while(this.pos ++ < this.length){
        var chr = this.str[this.pos - 1];
    }
}
var start = Date.now();
var instance = new Chars(content);
instance.run();
var end = Date.now();
console.log(end - start);

PHP

函数

<?php
function chars($content){
    $length = strlen($content);
    $pos = 0;
    while ($pos ++ < $length) {
        $char = $content{$pos - 1};
    }
}
$content = file_get_contents("page.html");
$start = microtime(true);
chars($content);
$end = microtime(true);
echo ($end - $start) . "\n";
?>

<?php
class Chars{
    public function __construct($str){
        $this->str = $str;
        $this->length = strlen($str);
        $this->pos = 0;
    }
    public function run(){
        while($this->pos++ < $this->length){
            $char = $this->str{$this->pos - 1};
        }
    }
}
$content = file_get_contents("page.html");
$start = microtime(true);
$instance = new Chars($content);
$instance->run();
$end = microtime(true);
echo ($end - $start) . "\n";
?>

Python

函数

import codecs
import time


def chars(content):
    length = len(content)
    pos = 0
    while(pos < length):
        char = content[pos]
        pos = pos + 1

f = codecs.open("page.html", encoding="utf-8")

content = f.read()

start = time.time()
chars(content)
end = time.time();

print end - start

import codecs
import time

class Chars(): 
    def __init__(self, str): 
        self.str = str
        self.length = len(str)
        self.pos = 0

    def run(self):
        while(self.pos < self.length):
            char = self.str[self.pos]
            self.pos = self.pos + 1

f = codecs.open("page.html", encoding="utf-8")

content = f.read()

start = time.time()
instance = Chars(content)
instance.run()
end = time.time();

print (end - start)

其中page.html文件内容为一个长度为4701942的文本。

测试结果

语言 函数
Node.js 0.022s 0.026s
PHP 0.35s 1.02s
Python 0.58s 1.50s

本文链接:http://welefen.com/post/chars-performance-with-Node.js-Python-PHP.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。