javascript、ruby和C性能一瞥(1)
测试一下本地js、浏览器中的js以及ruby对于类似算法的性能。结果有些意外:浏览器js最快,本地其次当相差很小;ruby最慢而且不是一个数量级的;
因为写的匆忙,可能有重大问题没能看出来,请各位高人不吝赐教。
程序计算小于给定数n的最大素数,代码均未作优化,我们依次来看:
首先是浏览器的:
<!DOCTYPE html>
<html>
<head>
<title>sieve suanfa</title>
<script src="sieve.js" type="text/javascript"></script>
<script type="text/javascript">
window.onload = function(){
btn_n.onclick = function(){
var i = parseInt(n.value);
if(isNaN(i))
result.innerHTML = "must input a number";
else if(i <= 0)
result.innerHTML = "must input + number";
else{
var start = new Date().getTime();
var max_p = sieve(i);
var spend = new Date().getTime() - start;
result.innerHTML = "max_p is : " + max_p + "(take " + spend + "ms)";
}
}
}
</script>
<style type="text/css">
#result{
color: red;
font-weight: bold;
}
</style>
</head>
<body>
<h1>Sieve Suanfa</h1>
<label for="n">input n : </label>
<input type="text" id="n" />
<input type="button" id="btn_n" value="ret max p" />
<label id="result"></label>
</body>
</html>
其中的sieve函数和下面的sieve一致。计算1千万300ms左右,1亿4000ms左右
下面是node.js本地的测试:
#!/usr/bin/node
var path = require("path");
//return max su shu but < n
function sieve(n){
var a = new Int8Array(n+1);
var max = Math.floor(Math.sqrt(n));
var p = 2;
while(p <= max){
for(var i=2*p;i<=n;i+=p)
a[i] = 1;
while(a[++p]); /* empty */
}
while(a[n]) n--;
return n;
}
//0:node , 1:sieve_node.js , 2:n
if(process.argv.length < 3){
console.log("must input n value like : " + path.basename(process.argv[1]) + " 1000");
return;
}
var i = parseInt(process.argv[2]);
if(isNaN(i))
console.log("must input a number");
else if(i < 0)
console.log("must input + number");
else{
var start = new Date().getTime();
var max_p = sieve(i);
var end = new Date().getTime() - start;
console.log("max p is " + max_p + "(take " + end + " ms)");
}
测试结果和浏览器js类似,不过前者在多次计算1亿后会发生脚本无响应的情况,后者一直很稳定。
最后是ruby的测试:
#!/usr/local/bin/ruby
def sieve(n)
a = Array.new(n+1);
max = Math.sqrt(n).to_i;
p = 2;
while p<=max do
i = 2*p
while i<=n do
a[i] = 1
i+=p
end
while a[p+=1] == 1 do end
end
while a[n] do n-=1 end
n
end
x = ARGV[0].to_i
if x == 0
puts "must input a number"
elsif x < 0
puts "must input + number"
else
start = Time.now.to_f
max_p = sieve(x)
_end = Time.now.to_f - start
puts "max p is #{max_p} (take #{_end*1000} ms)"
end
计算1千万将近2秒,1亿超过20秒。当然ruby肯定有优化空间,在这里不展开发挥了。
javascript、ruby和C性能一瞥(1)的更多相关文章
- javascript、ruby和C性能一瞥(3) :上汇编
在博文(1)和(2)里分别用了4中方式写一个素数筛选的算法,分别是javascript in browser.node.js.ruby和c:最终的结果是c最快,node.js其次,js in b虽然也 ...
- javascript、ruby和C性能一瞥(2)
好吧,最后让我们用C来实现,看看再能榨取多少性能.注意我没有改变算法,C的算法和之前的3种都是基本相同的: #include <stdio.h> #include <stdlib.h ...
- JavaScript数据存取的性能问题
JavaScript中四种基本的数据存取位置: 字面量:只代表自身 字符串.数字.布尔值.对象.函数.数组.正则,以及null和undefined 快 本地变量:var定义的 快 数组元素 ...
- JavaScript代码规范和性能整理
性能 Js在性能方面有多要注意的地方: 避免全局查找 Js性能优化最重要的就是注意全局查找,因为作用域的查找是先找局部作用域在没有找到之后在去上一级作用域查找直到全局作用域,所以全局作用域查找的性能消 ...
- (转)Javascript的DOM操作 - 性能优化
转载:https://my.oschina.net/blogshi/blog/198910 摘要: 想稍微系统的说说对于DOM的操作,把Javascript和jQuery常用操作DOM的内容归纳成思维 ...
- JavaScript实现元素拖动性能优化
前言:前几天没事干写了个小网站,打算用原生的javascript实现元素的拖动,但是事情并没有想象的那么顺利,首先是实现了拖动的元素卡的不能再卡,简直不能够,上图~~ 看见没?这就是效果,简直让人欲哭 ...
- javascript 作用域链及性能优化
在JavaScript中,函数也是对象,实际上,JavaScript里一切都是对象.函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性.其中一个内部属 ...
- 学习javascript总结下来的性能优化的小知识(一)
http://www.cnblogs.com/ctriphire/p/4115525.html http://www.cnblogs.com/xjchenhao/archive/2012/10/22/ ...
- JavaScript 总结几个提高性能知识点
前段时间花时间看了大半的<High Performance JavaScript>这本书啊,然后就开始忙项目了,庆幸最忙的一周已经熬过去了.由于空不出时间,这个月写的学习笔记也不多,忙完最 ...
随机推荐
- 【Netty源码解析】NioEventLoop
上一篇博客[Netty源码学习]EventLoopGroup中我们介绍了EventLoopGroup,实际说来EventLoopGroup是EventLoop的一个集合,EventLoop是一个单线程 ...
- 6.1、Android Studio的Android Monitor概览
Android Monitor帮助你监测你的应用的性能,以帮助你合理的进行优化,调试,提升.如下功能: 1. Log消息,系统定义的或者开发者定义的. 2. 内存,CPU和GPU使用情况. 3. 网络 ...
- 直接内存访问(DMA)
1. 什么是DMA 直接内存访问是一种硬件机制,它允许外围设备和主内存之间直接传输它们的I/O数据,而不需要系统处理器的参与.使用这种机制可以大大提高与设备通信的吞吐量. 2. DMA数据传输 有 ...
- 贪婪算法(Greedy algorithm)-算法学习之旅(一)
我研一下学期选修了网络管理,因为是限选课所以我没有认真上课,今天因为快结课考试了,我才去,然后我发现了一个大秘密...... 原来老师从第三节课已经开始讲算法导论的知识了,我是不是错过了什么... 废 ...
- Hadoop:Hadoop简介及环境配置
http://blog.csdn.net/pipisorry/article/details/51243805 Hadoop简介 下次写上... 皮皮blog 配置hadoop环境可能出现的问题 每次 ...
- Android面试题目总结
1.java 基础题,输入结果是什么? public static void main(String[] args) { String str = new String("abc" ...
- Ext JS 6应用程序Build后出现“c is not a constructor return new c(a[0])”的处理
概述 在对Ext JS 6的应用程序打包后,时不时会出现以下错误: 由于是压缩后出现的错误,要进行调试也无从下手,因而这个错误会令新手手足无措,不知道是怎么回事. 错误原因 造成该错误的主要原因是要创 ...
- 【一天一道LeetCode】#86. Partition List
一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Given a ...
- iOS 使用AVAudioPlayer开发录音功能
最近要做一个类似对讲的功能,所以需要用到录音上传,然后再播放的功能. 一.音频格式分析 因为之前没研究过音频这块,所以很多音频格式都是第一次见. AAC: AAC其实是"高级音频编码(adv ...
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十二)
回到Xcode,新建Level1类,继承于CCNode. 打开Level1.m在初始化方法中添加如下方法: -(void)didLoadFromCCB{ [self initBasket]; [sel ...