SlideShare a Scribd company logo
1 of 83
Download to read offline
面向开发的前端性能优化

     前端开发部网速组—李强
0.前端优化的意义
0.前端优化的意义



   慢500ms = 20% 将放弃访问(Google)
   慢400ms = 5-9% 将放弃访问(Yahoo!)
   慢100ms = 1% 将放弃交易(Amazon)

   我们?
       pcauto      2.97 s
       autohome    1.67 s
                    (2010.2.1--2010.3.1)


   慢1300ms = ??% 将放弃访问
0.前端优化的意义



  优化的意义?



            •更好的用户体验
            •更多的访问量
            •更高的搜索排名
0.前端优化的意义




       0.16 s   后端20%
                (jsp、Apache、hibernate、
                 Nginx、Memcached....... )
0.前端优化的意义




      ∞ s   前端80%
            (js、css、images、
            <script></script>、
            jQuery.... )
0.前端优化的意义



  前端优化的黄金定律之一




      80%的用户响应时间花费在前端
1.重新认识浏览器
1.重新认识浏览器




            浏览器


            浏览器内核
1.重新认识浏览器


 内核的两大模块:




                浏览器内核

            渲染引擎        JS引擎
            DOM和渲染      JS执行
1.重新认识浏览器


 主流浏览器的两大引擎:



          浏览器       渲染引擎        JS引擎
     IE         Trident    jscript.dll
     Firefox    Gecko      Spider-Monkey
     Chrome     WebCore    V8
     Safari     WebCore    JavaScriptCore
1.重新认识浏览器


两大模块“互斥”:


   •同一时间浏览器只能调用其中一个模块工作

   •JS引擎优先级更高




            渲染引擎     JS引擎
1.重新认识浏览器


 页面的解析过程:


    1            2            3           4          5
        从服务器         解析html       解析CSS
                                              为渲染树        绘制
        端接收到          构建           构建
                                              生成布局       渲染树
         html        DOM树         渲染树



                2.1
                     遇到JS调
                     用JS引擎
                      执行
1.重新认识浏览器


 渲染引擎过程:

       2            3           4          5
           解析html       解析CSS
                                    为渲染树        绘制
            构建           构建
                                    生成布局       渲染树
           DOM树         渲染树
1.重新认识浏览器


 浏览器处理队列:

       渲染引擎


       Layout




       JS引擎
1.重新认识浏览器


 浏览器处理队列:

       渲染引擎




       JS引擎


        JS
1.重新认识浏览器


 浏览器处理队列:

              渲染引擎




       JS引擎
1.重新认识浏览器
2.重新认识用户
2.重新认识用户


 2.1首屏时间为何如此重要
2.重新认识用户


 首屏时间

   网站用户体验的一个重要指标。
   指一个网站被浏览器如IE窗口上部800*600的
 区域被充满所需时间。
   页面打开时,总加载时间要比首屏时间要长很
 多,但是对亍用户体验来说,首屏时间是用户对一
 个网站的重要体验因素。当页面充满800*600的
 区域时,对用户来说就可以看到内容并可以点击了。
                     --基调网络
2.重新认识用户


 用户的情况

     •人类,最小反应时间0.1s
     •浏览网页主要靠视觉
     •浏览器是主要的信息输出
2.重新认识用户


 对亍用户来说




                   感觉快了就是快了




     http://zzsvn.pcauto.com.cn/svn/liqiang/speed/example/js-top_vs_bottom/
2.重新认识用户




 不保证首屏

 页面渲染

 用户感受

        0   1   2   3   4   5   6
                                    无输出
 保证首屏                               渲染首屏

 页面渲染                               渲染其他屏

                                    等待中
 用户感受
                                    接收信息

        0   1   2   3   4   5   6
2.重新认识用户


 2.2 渐进增强
2.重新认识用户


 一显示,二提示,三可用
2.重新认识用户


 2.3客户端缓存为何作用有限



    命中率
    过期时间
    gzip
2.重新认识用户


 2.3客户端缓存为何作用有限



    命中率
    过期时间
    gzip
2.重新认识用户


 2.3客户端缓存为何作用有限



    命中率
    过期时间
           善于压缩文本
           对JS、CSS、html的压缩率为
    gzip
           60%~80%
2.重新认识用户


 2.3客户端缓存为何作用有限

             内嵌          外链
     客户端缓存   无           一部分有
     阻塞请求    不阻塞         会阻塞,特别在首屏
     传输量     文本gzip后很少   有缓存时是一个304




       结论:首屏的阻塞请求应该尽量内嵌
3.更高效的JS
3.更高效的JS




           JS是页面效率的噩梦!
3.更高效的JS




   以前
           var form=document.forms[0];
           if(form.txtName.length==0){
             alert("用户名不能为空");
             return false;
           }
3.更高效的JS




   现在
3.更高效的JS




   现在
3.更高效的JS




   前端性能的问题80%由JS引起
3.更高效的JS


 3.1不阻塞的JS
3.更高效的JS




            JS的请求阻塞其后的请求

     JS阻塞

            JS的执行阻塞页面的渲染
3.更高效的JS


 外链JS阻塞请求
   <script src=“http://js.3conline.com/js/min_contentslider.js”></script>
   <img src=“”/>



          HTML
                              JS
                                                       IMG
3.更高效的JS


 外链JS不阻塞请求
   <script>
   var script1 = document.createElement('script');
   script1.src = " http://js.3conline.com/js/min_contentslider.js ";
   document.getElementsByTagName('head')[0].appendChild(script1);
   </script>
   <img src=“”/>


          HTML
                             JS
                     IMG
3.更高效的JS


 内嵌JS阻塞请求:浏览器会偷懒么?
           httpwatch



           Dynatrace
3.更高效的JS


 JS执行阻塞渲染




      渲染         渲染
            JS
3.更高效的JS




           既然如此。。。
3.更高效的JS


 JS全部移到页尾




   问题:JS在页面载
   入后才能生效
3.更高效的JS




           万事皆权衡
3.更高效的JS


 首屏及早可用
3.更高效的JS

3.2更有效率的js                                  Ecmascript


            作用域链                 原型链

       var globalValue;       Object.name.name
       function test(){
         var localValue;
         alert(globalValue)
       }
3.更高效的JS

3.2更有效率的js                            Ecmascript


           作用域链           原型链

             global        Object


                      开   prototype
                      销
             local        instance
3.更高效的JS

3.2更有效率的js          Ecmascript
             局部缓存
3.更高效的JS

3.2更有效率的js          Ecmascript
             局部缓存
3.更高效的JS

3.2更有效率的js          Ecmascript
             局部缓存
3.更高效的JS

3.2更有效率的js                                       Ecmascript
                     元素集合


      var listA=document.getElementsByTagName(“a”);
      for(var i=0;i<listA.length;i++){
               func(listA[i]);
      }
3.更高效的JS

3.2更有效率的js                                       Ecmascript
                     元素集合


      var listA=document.getElementsByTagName(“a”);
      for(var i=0,len=listA.length;i<len;i++){
               func(listA[i]);
      }
3.更高效的JS

3.2更有效率的js                                             jQuery
                     选择符从id开始
     jQuery选择符本质:
     $(“#id”):document.getElementById(“id”);      //快
     $(“div”):document.getElementsByTagName(“div”);    //较慢
     $(“.class”):????? //很慢很慢
              ie没有getElementsByClassName
              so…
              var all=document.getElementsByTagName(“*”);
              for(var i=0;i<all.length;i++){
              if(all[i].className=“class”){
              return all[i];
              }}
     $(“.class”,$(“#id”)) or $(“#id .class”)//好一些
3.更高效的JS

3.2更有效率的js                                                   jQuery
                       选择符从id开始




   eg:
   http://zzsvn.pcauto.com.cn/svn/%cd%f8%d2%b3%cb%d9%b6%c8%d3%c5%bb%
   af/speed_edu/example/testjquery.html
3.更高效的JS

3.2更有效率的js                                                         jQuery
                           缓存jQuery对象
     $(„#traffic_light   input.on).bind(‟click„, function(){…});
     $(‟#traffic_light   input.on).css(„border‟, „3px dashed yellow‟);
     $(„#traffic_light   input.on).css(‟background-color„, „orange„);
     $(‟#traffic_light   input.on).fadeIn(‟slow‟);

     var $active_light = $(„#traffic_light input.on‟);
     $active_light.bind(„click‟, function(){…});
     $active_light.css(„border‟, „3px dashed yellow‟);
     $active_light.css(„background-color‟, „orange‟);
     $active_light.fadeIn(‟slow‟);
     OR
     $(„#traffic_light input.on‟).bind(„click‟,
     function(){…}).css(„border‟, „3px dashed
     yellow‟).css(„background-color‟, „orange‟).fadeIn(‟slow‟);
3.更高效的JS

3.2更有效率的js                      DOM
           DOM的操作是在JS引擎外完成的

                  效率很低


                   设值



      DOM树         设值
                         JS引擎
                  取值


                  取值
3.更高效的JS

3.2更有效率的js                   DOM
           减少操作DOM的次数
           尽量脱离DOM树进行操作




                 设值

      DOM树            JS引擎

                 取值
3.更高效的JS

3.2更有效率的js                                                         DOM




           http://zzb.pcauto.com.cn/power/js/jsProblem/dom.html
           http://zzb.pcauto.com.cn/power/js/jsProblem/dom2.html
3.更高效的JS

3.2更有效率的js                                                 DOM
               documentFragment


      var list = document.getElementById(“list”);
      for (var i=0; i<10 ;i++ ){
                var item = document.createElement(“li”);
                list.appendChild(item);
      }

                                          reflow
3.更高效的JS

3.2更有效率的js                                          DOM
              documentFragment

    var list = document.getElementById(“list”);
    var fragment = document.createDocumentFragment();
    for (var i=0; i<10 ;i++ ){
              var item = document.createElement(“li”);
              fragment.appendChild(item);
    }                                           Not
    list.appendChild(fragment);                reflow

                          reflow
3.更高效的JS

3.2更有效率的js                                        DOM
                     className



           Element.style.color = “red”;
           Element.style.height = “100px”;
           Element.style.fontSize = “25px”;
           Element.style.backgroundColor = “white”;
3.更高效的JS

3.2更有效率的js                                        DOM
                        className

             .active{
                        color:red;
                        height:100px;
                        width:25px;
                        background-color:white;
             }
             element.className=“active”;
4.我们的解决方案
4.我们的解决方案

4.1 defineJS



     外链js用到时才加载




        抵制浪费 各取所需
4.我们的解决方案

4.1 defineJS

<script src=“/www1/js/pc.jquery1.4.js”></script>

<script src=“http://www1.pconline.com.cn/js/contentslider.js”></script>




defineJS(“!$,!jQuery,!$.getScript=/www1/js/pc.jquery1.4.js”);

defineJS(“slider.init=1000:http://www1.pconline.com.cn/js/contentslider.js”);
4.我们的解决方案

4.2 JsBank


JS的存取管理“银行”




    存储迅速不阻塞
    取出时间随意定
4.我们的解决方案

4.2 JsBank

       <script src=“/www1/js/pc.jquery1.4.js”></script>
       <script>$(“#id”).html(“jquery”)</script>




              <script src=“JsBank.js”></script>
              <script>
              JsBank.store(function(){
                       $(“#id”).html(“jquery”)
              },” /www1/js/pc.jquery1.4.js”)
              </script>

              <script>JsBank.fetch()</script>
4.我们的解决方案

4.3 combineAD && combineJS


 基于JSP的处理方案




 劢态编译检查静态代码
4.我们的解决方案

4.3 combineAD && combineJS




       <combineAD>code</combineAD>//广告后出

       <combineJS>code</combineJS>//JS后出
4.我们的解决方案

4.4 PJL(Pc Javascript Lib)


 基于PC网站群实际情冴




  20%jQuery体积
  实现jQuery80%的功能
4.我们的解决方案

4.4 PJL(Pc Javascript Lib)


        •体积小巧
        •模块灵活可扩展
        •自主研发,不受限制
4.我们的解决方案

4.5 图片延迟加载 && 切换块按需加载


用户想要他会说




 节省流量 加快解析
4.我们的解决方案

4.5 图片延迟加载 && 切换块按需加载

  图片延迟加载
   http://zzsvn.pcauto.com.cn/svn/doc/javascript/%cd%bc%c6%ac%b0%b4
   %d0%e8%bc%d3%d4%d8/doc.html


  切换块按需加载
   http://zzsvn.pcauto.com.cn/svn/doc/javascript/ContentSlider%28%c9%e
   0%c7%a9%c2%d6%bb%bb%29%be%ab%bc%f2%b0%e6/
5.其他的解决方案
5.其他的解决方案


 5.1facebook

  速度是facebook最关心的用户体验指标


    •庞大的用户数
    •页面在服务器端的处理时间长
    •Pagelets乊间没有关联
5.其他的解决方案


 5.1facebook

  适合的就是最好的
5.其他的解决方案


 5.1facebook
5.其他的解决方案


 5.1facebook
5.其他的解决方案


 5.1facebook

  Pagelets
5.其他的解决方案


 5.2controlJS

                     让页面中的js片段对浏览器不可识别
 •异步加载               用Image戒Object元素异步加载

                     页面渲染初期用不到的js延迟执行
 •延迟执行

 •重写document.write   防止延迟的脚本中的write冲掉页面
                     存在问题
5.其他的解决方案


 5.2controlJS

    <script type="text/javascript" src="main.js"><script>
    <script type="text/javascript">sth...<script>




    <script type="text/cjs" src="main.js"><script>
    <script type="text/cjs">sth...<script>
面向开发的前端性能优化

More Related Content

What's hot

更好的文件组织
更好的文件组织更好的文件组织
更好的文件组织Kejun Zhang
 
面向未来的重构
面向未来的重构面向未来的重构
面向未来的重构Kejun Zhang
 
【第一季第四期】JavaScript Optimization
【第一季第四期】JavaScript Optimization【第一季第四期】JavaScript Optimization
【第一季第四期】JavaScript Optimizationtbosstraining
 
Make your web faster
Make your web fasterMake your web faster
Make your web faster德生 谭
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非Tony Deng
 
由浅到深了解Java Script类
由浅到深了解Java Script类由浅到深了解Java Script类
由浅到深了解Java Script类sosoyou
 
Kissy模块化实践
Kissy模块化实践Kissy模块化实践
Kissy模块化实践yiming he
 
iOS程序设计-数据持久化
iOS程序设计-数据持久化iOS程序设计-数据持久化
iOS程序设计-数据持久化qiyutan
 
SeaJS - 前端模块化开发探索与网站性能优化实践
SeaJS - 前端模块化开发探索与网站性能优化实践SeaJS - 前端模块化开发探索与网站性能优化实践
SeaJS - 前端模块化开发探索与网站性能优化实践lifesinger
 
Spring入门纲要
Spring入门纲要Spring入门纲要
Spring入门纲要yiditushe
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程appollo0312
 
Dog svr
Dog svrDog svr
Dog svryxcwf
 
J Query基础教程
J Query基础教程J Query基础教程
J Query基础教程yiditushe
 
常用数据库的链接方法
常用数据库的链接方法常用数据库的链接方法
常用数据库的链接方法wensheng wei
 
Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocketpwesh
 
透過 Windows Azure Mobile Services 開發各平台 Apps
透過 Windows Azure Mobile Services 開發各平台 Apps透過 Windows Azure Mobile Services 開發各平台 Apps
透過 Windows Azure Mobile Services 開發各平台 AppsEric ShangKuan
 
Asp.net開發要注意的是?
Asp.net開發要注意的是?Asp.net開發要注意的是?
Asp.net開發要注意的是?Rainmaker Ho
 
1.oracle 11g 用户管理新功能
1.oracle 11g 用户管理新功能1.oracle 11g 用户管理新功能
1.oracle 11g 用户管理新功能WASecurity
 

What's hot (20)

更好的文件组织
更好的文件组织更好的文件组织
更好的文件组织
 
面向未来的重构
面向未来的重构面向未来的重构
面向未来的重构
 
nodejs开发web站点
nodejs开发web站点nodejs开发web站点
nodejs开发web站点
 
【第一季第四期】JavaScript Optimization
【第一季第四期】JavaScript Optimization【第一季第四期】JavaScript Optimization
【第一季第四期】JavaScript Optimization
 
Make your web faster
Make your web fasterMake your web faster
Make your web faster
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非
 
由浅到深了解Java Script类
由浅到深了解Java Script类由浅到深了解Java Script类
由浅到深了解Java Script类
 
Kissy模块化实践
Kissy模块化实践Kissy模块化实践
Kissy模块化实践
 
iOS程序设计-数据持久化
iOS程序设计-数据持久化iOS程序设计-数据持久化
iOS程序设计-数据持久化
 
SeaJS - 前端模块化开发探索与网站性能优化实践
SeaJS - 前端模块化开发探索与网站性能优化实践SeaJS - 前端模块化开发探索与网站性能优化实践
SeaJS - 前端模块化开发探索与网站性能优化实践
 
J query
J queryJ query
J query
 
Spring入门纲要
Spring入门纲要Spring入门纲要
Spring入门纲要
 
Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程Struts+Spring+Hibernate整合教程
Struts+Spring+Hibernate整合教程
 
Dog svr
Dog svrDog svr
Dog svr
 
J Query基础教程
J Query基础教程J Query基础教程
J Query基础教程
 
常用数据库的链接方法
常用数据库的链接方法常用数据库的链接方法
常用数据库的链接方法
 
Mysql handlersocket
Mysql handlersocketMysql handlersocket
Mysql handlersocket
 
透過 Windows Azure Mobile Services 開發各平台 Apps
透過 Windows Azure Mobile Services 開發各平台 Apps透過 Windows Azure Mobile Services 開發各平台 Apps
透過 Windows Azure Mobile Services 開發各平台 Apps
 
Asp.net開發要注意的是?
Asp.net開發要注意的是?Asp.net開發要注意的是?
Asp.net開發要注意的是?
 
1.oracle 11g 用户管理新功能
1.oracle 11g 用户管理新功能1.oracle 11g 用户管理新功能
1.oracle 11g 用户管理新功能
 

Viewers also liked

True Wind Consulting Pitch For Linked In
True Wind Consulting Pitch For Linked InTrue Wind Consulting Pitch For Linked In
True Wind Consulting Pitch For Linked Inojacque
 
How to Create an Online Brand through Search
How to Create an Online Brand through SearchHow to Create an Online Brand through Search
How to Create an Online Brand through SearchSiteVisibility
 
12 Examples of How You Can Increase Conversions by Understanding Psychology
12 Examples of How You Can Increase Conversions by Understanding Psychology12 Examples of How You Can Increase Conversions by Understanding Psychology
12 Examples of How You Can Increase Conversions by Understanding PsychologySiteVisibility
 
True Wind Consulting Pitch For Linked In
True Wind Consulting Pitch For Linked InTrue Wind Consulting Pitch For Linked In
True Wind Consulting Pitch For Linked Inojacque
 

Viewers also liked (7)

True Wind Consulting Pitch For Linked In
True Wind Consulting Pitch For Linked InTrue Wind Consulting Pitch For Linked In
True Wind Consulting Pitch For Linked In
 
How to Create an Online Brand through Search
How to Create an Online Brand through SearchHow to Create an Online Brand through Search
How to Create an Online Brand through Search
 
Crossing Borders
Crossing BordersCrossing Borders
Crossing Borders
 
12 Examples of How You Can Increase Conversions by Understanding Psychology
12 Examples of How You Can Increase Conversions by Understanding Psychology12 Examples of How You Can Increase Conversions by Understanding Psychology
12 Examples of How You Can Increase Conversions by Understanding Psychology
 
True Wind Consulting Pitch For Linked In
True Wind Consulting Pitch For Linked InTrue Wind Consulting Pitch For Linked In
True Wind Consulting Pitch For Linked In
 
Tactical Social Media
Tactical Social MediaTactical Social Media
Tactical Social Media
 
IP Targeted Search
IP Targeted SearchIP Targeted Search
IP Targeted Search
 

Similar to 面向开发的前端性能优化

浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染Ailsa126
 
淘宝开放产品前端实践
淘宝开放产品前端实践淘宝开放产品前端实践
淘宝开放产品前端实践taobao.com
 
JavaScript Engine
JavaScript EngineJavaScript Engine
JavaScript Enginejay li
 
前端性能测试
前端性能测试前端性能测试
前端性能测试tbmallf2e
 
建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)Joseph Chiang
 
前端性能优化和自动化
前端性能优化和自动化前端性能优化和自动化
前端性能优化和自动化kaven yan
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发leneli
 
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctechKai Cui
 
前端MVVM框架安全
前端MVVM框架安全前端MVVM框架安全
前端MVVM框架安全Borg Han
 
Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)ziggear
 
不一樣的Web server... coServ
不一樣的Web server... coServ不一樣的Web server... coServ
不一樣的Web server... coServBen Lue
 
赶集团购开发总结4
赶集团购开发总结4赶集团购开发总结4
赶集团购开发总结4yangdj
 
Inside the browser
Inside the browserInside the browser
Inside the browserotakustay
 
【项目分享】赶集移动Web App开发总结
【项目分享】赶集移动Web App开发总结 【项目分享】赶集移动Web App开发总结
【项目分享】赶集移动Web App开发总结 yangdj
 
D2-ETao-show
D2-ETao-showD2-ETao-show
D2-ETao-showleneli
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐zhangsuoyong
 
淘宝网前端开发面试题
淘宝网前端开发面试题 淘宝网前端开发面试题
淘宝网前端开发面试题 Lumend
 

Similar to 面向开发的前端性能优化 (20)

浅析浏览器解析和渲染
浅析浏览器解析和渲染浅析浏览器解析和渲染
浅析浏览器解析和渲染
 
淘宝开放产品前端实践
淘宝开放产品前端实践淘宝开放产品前端实践
淘宝开放产品前端实践
 
JavaScript Engine
JavaScript EngineJavaScript Engine
JavaScript Engine
 
前端性能测试
前端性能测试前端性能测试
前端性能测试
 
建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)建立前端开发团队 (Front-end Development Environment)
建立前端开发团队 (Front-end Development Environment)
 
前端性能优化和自动化
前端性能优化和自动化前端性能优化和自动化
前端性能优化和自动化
 
OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发OPOA in Action -- 使用MagixJS简化WebAPP开发
OPOA in Action -- 使用MagixJS简化WebAPP开发
 
J Query Learn
J Query LearnJ Query Learn
J Query Learn
 
July.2011.w3ctech
July.2011.w3ctechJuly.2011.w3ctech
July.2011.w3ctech
 
Berserk js
Berserk jsBerserk js
Berserk js
 
前端MVVM框架安全
前端MVVM框架安全前端MVVM框架安全
前端MVVM框架安全
 
Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)Web设计 3 java_script初探(程序员与设计师的双重眼光)
Web设计 3 java_script初探(程序员与设计师的双重眼光)
 
不一樣的Web server... coServ
不一樣的Web server... coServ不一樣的Web server... coServ
不一樣的Web server... coServ
 
赶集团购开发总结4
赶集团购开发总结4赶集团购开发总结4
赶集团购开发总结4
 
Inside the browser
Inside the browserInside the browser
Inside the browser
 
【项目分享】赶集移动Web App开发总结
【项目分享】赶集移动Web App开发总结 【项目分享】赶集移动Web App开发总结
【项目分享】赶集移动Web App开发总结
 
D2-ETao-show
D2-ETao-showD2-ETao-show
D2-ETao-show
 
张所勇:前端开发工具推荐
张所勇:前端开发工具推荐张所勇:前端开发工具推荐
张所勇:前端开发工具推荐
 
淘宝网前端开发面试题
淘宝网前端开发面试题 淘宝网前端开发面试题
淘宝网前端开发面试题
 
Structs2簡介
Structs2簡介 Structs2簡介
Structs2簡介
 

面向开发的前端性能优化

Editor's Notes

  1. http://zzsvn.pcauto.com.cn/svn/liqiang/speed/example/jsbank/test/simpleTest.html