z*******3 发帖数: 13709 | 1 就是脚本+oo特性,这几个都是如此
而且还都是动态类型
动态类型在运行时效率会使得一般的虚拟机无法作出相应的优化
如果我记得没错的话
v8引擎的优化其实就是通过对于动态类型生成一个子类
用这种方式把动态类型转换成静态类型,以提升效率
facebook对于php的优化也类似
也是把php代码最早是转换成c++代码以提升效率
现在改成字节码,其实hhvm跟jvm已经很接近了
所以要优化,把动态类型转换成静态类型
是很重要的一个效率优化手段
dart对于js的改进,也集中在静态类型以及oo上
所以dart运行效率得分一下子就是js的两倍还多
vert.x也是静态类型,其运行效率也要优于使用v8的node.js
所以有至少两个id说
business logic还是要用静态类型的语言
这个是对的
另外一个就是oo,这个主要是项目管理方面的问题
不oo的话,连封装都是一个很大的问题
soa什么就无从谈起,最后混乱的结构会导致项目无法进行下去
google那个组活生生的一个实例 |
Y**G 发帖数: 1089 | 2 动态语言中,一个对象基本就是一个hash table。访问成员的速度是LOG(N)如果这个对
象有N个成员。编译型语言中,成员的偏移量是常数,所以访问成员的时间基本是常数
。着导致的效率差异太大了。 |
Y**G 发帖数: 1089 | 3 不过动态语言的好处是成员可以在运行中增加和减少。这可是静态语言无法做到的。所
以付出点代价还是值得的。
【在 Y**G 的大作中提到】 : 动态语言中,一个对象基本就是一个hash table。访问成员的速度是LOG(N)如果这个对 : 象有N个成员。编译型语言中,成员的偏移量是常数,所以访问成员的时间基本是常数 : 。着导致的效率差异太大了。
|
p**o 发帖数: 3409 | 4 别的先不说。除开 amortized worst case,哈希表访问肯定是O(1)。动态语言慢是由
各种原因造成的,比如 interpreter overhead,而不是生搬硬套 Big-O 来解释。
【在 Y**G 的大作中提到】 : 动态语言中,一个对象基本就是一个hash table。访问成员的速度是LOG(N)如果这个对 : 象有N个成员。编译型语言中,成员的偏移量是常数,所以访问成员的时间基本是常数 : 。着导致的效率差异太大了。
|
Y**G 发帖数: 1089 | 5 首先,表示歉意,hash table的performance不是LOG(N)。误判。
hash table的performance的决定因素很多,但是通常不是O(1)
* bucket的数目很重要。java的hash table的实现会检查非空的bucket数目,如果达到
一定比例(75% ?),就会double bucket的数目。
* hash算法也很重要。即要快,有要产生的数比较均匀。但是,最坏情况下,hash
table会变成链表,导致查找效率变成O(N)
【在 p**o 的大作中提到】 : 别的先不说。除开 amortized worst case,哈希表访问肯定是O(1)。动态语言慢是由 : 各种原因造成的,比如 interpreter overhead,而不是生搬硬套 Big-O 来解释。
|