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

1380次阅读  |  发布于5年以前

因为后续考虑实现 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

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8