zoukankan      html  css  js  c++  java
  • [转载]原来jQuery的性能是如此差的

    原文地址:http://www.cnblogs.com/rubylouvre/archive/2010/02/26/1673098.html

    结论是来自测试框架taskspeed的结果。jQuery每次升级都会提到某某方法性能比原来提升了多少多少,里面都会提到这个框架。这结论可能会让许多人大跌眼镜吧,不过也不奇怪,因为中国是美工主导前台,那些人的英语水平都比较一般,很少能主动到外国博客了解最前沿最尖端的javascript技术。另,jQuery的易上手也很容易给人一个错觉,认为它什么是好的,既然它现在被捧得这么红。不过被网络捧红的人有时不单单是包建斌(烧饼帅哥),也有可能是芙蓉姐姐。现在特意声明一下,jQuery肯定不是后者,各位jQuery死忠请稍安勿燥!

    现在简单介绍一下各大javascript框架,各位就知性能一向不是jQuery的得意之处。总归来说,jQuery是设计师的javascript框架,它的CSS选择器对设计师来说是非常亲切。Prototype.js则是Rubyer的javascript框架,它与著名rails捆绑在一起,另,它也是早些年最受青睐的javascript框架,现在它的影响力还在于jQuery之上。学Python的人可以选择MochiKit,同为十大框架,不过它好像要借助dojo的包机制。MochiKit里面有一个叫Deferred的类,被日本高手cho45发展为一个异步框架JSDeferred,天天被人邀请做演讲。不过,国内被墙得厉害,加之国人对日本人的仇视与偏见,知之人甚少。dojo的后台非常厉害,什么AOL,IBM,SUN,java的三大框架之一Struts就是用它的。作为最企事业化的产物,它的性能当然是不容忽视,不过它的野心太大了,除了拥有一套完整的UI组件外,还向图形,本地储存伸出魔爪,导致战线过长,发展缓慢。qooxdoo把自己定义为GUI类库,国内估计也很少人认识它,它拥有最优质的插件。mootools是现在最被看好的类库之一,优雅的OO机制与靠大量函数堆砌在一起的jQuery站于两个巅峰。此外还有YUI与Ext,雅虎以前是巨有钱,有线可以招许多聪明人弄一些好东西。YUI就是其他的产物之一,但聪明人太多了,互相制肘,于是有人跑出来搞了Ext。好了,介绍就到此为止。我们可以发现jQuery是个非常特别的框架,首先它没有什么后台,其次它把自己定义为一个轻量级的类库。轻量级有级量级的好处,重量级有重量级的好处,怎么大家都如此怕重量级呢?总有人问这样废问题——“这个库大不大?”怕什么啊!再大也没有美工砌的那几张图片大!由于jQuery不搞UI(官网那个UI只是乌合之众),许多性能问题没有突现出来。因为一涉及到界面,就意思着要创建数十个或上百个DOM元素,性能的问题就被放大了。我想,看过jQuery源码的人都好头晕,那些方法互相调用得太厉害,而且为了使用已定义的jQuery方法,这些方法会再次把分解得来的DOM元素再包装成jQuery对象,巨吃内存。另,整个库放在一个自动执行函数(闭包),另闭包里面还存在闭包,闭包意味着是一重作用域(在主流类库中,好像就jQuery这样做吧)。再者,一个方法同时作为写方法与读方法,也让它在性能比较很吃亏(一个方法当许多方法来用,导致函数体很长,函数体长意味着逻辑复杂,判定多,调用外围作用域的函数的机会多,使用循环的机会多,这些都是要消耗时间与内存的)……

    最后我们看结果吧:

    在所有浏览器中性能最好的是qooxdoo 0.8.2。

    在各个浏览器的比较结果:

    最后说一句,流行的东西不一定是最好的。jQuery最大的卖点是好用,易上瘾,就像鸦片一样。或者jQuery的易用性和其他庞大的插件能一时帮你解决了问题,但千万别忽略了学习javascript与DOM的基础API与其他类库。

     
  • 相关阅读:
    liunx定时任务执行
    spark-stream简单使用案例
    spark的UDF操作,RDD与DataFrame转换,RDD DataFrame DataSet的分析
    uni-app:text文本组件是行内元素,如何让标题居中显示?
    报错:java.math.BigDecimal cannot be cast to java.lang.String(oracle数据库中的number类型数据,java查询出来的对象属性数据类型其实为BigDecimal)
    uni-app封装请求方法
    in和exists比较
    人写的SQL与机读SQL的顺序
    spring cloud组件之Feign:Feign内置的Ribbon把Rest的请求进行隐藏并基于某种负载均衡算法自动发起请求,而Feign伪装成类似Controller一样来拼接url
    spring cloud组件之Hystrixi:通过服务降级即返回一个结果来隔离访问远程服务,防止出现级联失败
  • 原文地址:https://www.cnblogs.com/mezero/p/2274747.html
Copyright © 2011-2022 走看看