我有用PHP編寫的腳本和用Javascript編寫的相同腳本。
它迭代一百萬次,每次將一個字符串剝離到一個數組中,並將第一個數組項賦給一個新的變量。迭代腳本中的內存消耗
的PHP是:
class First
{
public function Iterate()
{
$count = 1000000;
$test_string = '';
$test_array = '';
$first_word = '';
for($i=1; $i <= $count; $i++){
$test_string = 'This is a test string';
//could use explode but no explode in js
$test_array = split(" ", $test_string);
$first_word = $test_array[0];
}
}
}
$first = new First();
$first->Iterate();
和JavaScript是:
function First() {
this.Iterate = function() {
count = 1000000;
test_string = '';
test_array = '';
first_word = '';
for(var i=1;i <= count; i++){
test_string = 'This is a test string';
test_array = test_string.split(" ");
first_word = test_array[0];
}
}
}
first = new First();
first.Iterate();
我運行PHP用PHP-CLI 5.3.10與節點v0.6.12的JavaScript。
對於PHP,我使用'memory_get_usage()',對於Javascript我使用'process.memoryUsage()'。我在腳本的開始處運行它們,然後在最後,然後減去結尾並開始,最後將字節數轉換爲mb。
PHP使用0.00065 mb的內存,而Javascript使用0.25 mb,但PHP需要4秒,JavaScript需要0.71秒。我在兩臺不同的機器上運行了結果。
有沒有人知道爲什麼Javascript的內存使用量會比PHP的高很多(儘管Javascript的執行速度非常快)?
我能想出的惟一解釋是V8的使用性質隱藏類提高了速度但增加了內存消耗。
只是說明:腳本不一樣。 php函數中的變量是私有的,在js中是全局變量。 –
您的測試示例不像它們可能的那樣相似。在JavaScript中您應該將您的Iterate方法應用爲First的原型對象的一部分......這樣您不會在每次執行時重新創建方法(這更接近於PHP的行爲方式)。 – Pebbl
@pebbl謝謝。類似於First.prototype.Iterate = function() –