资讯专栏INFORMATION COLUMN

JS编程实践指导

niceforbear / 2454人阅读

摘要:避免双重求值构造函数。例如当你在代码中执行另一段代码时,每次调用都会创建一个新的解释器编译器实例,非常消耗性能,代码执行速度会慢许多。避免重复工作最常见的重复工作浏览器探测。因为每次的检查过程都是相同的,看看指定方法是否存在。

避免双重求值
eval()、Function()构造函数、setTimeout()、setInterval()。每个方法允许你传入一个javascript代码字符串并执行它。
例如:`setTimeout("sum=num1+num2",100);`
当你在javascript代码中执行另一段javascript代码时,每次调用都会创建一个新的解释器/编译器实例,非常消耗性能,代码执行速度会慢许多。
避免重复工作
最常见的重复工作:浏览器探测。
反例:
function addHandler(target,eventType,handler){
    if(target.addEventListerner){//DOM2 Events
        target.addEventListener(eventType,handler,false);
    }else{//IE9以下
        target.attachEvent("on"+eventType,handler);
    }
}
该例子乍一看似乎已经优化了,隐藏的性能问题在于每次函数调用时都做了重复工作。因为每次的检查过程都是相同的,看看指定方法是否存在。但是其实检查一次就够了。
解决方案:
1.延迟加载(Lazy Loading)
function addHandler(target,eventType,handler){
    if(targrt.addEventListerner){
        addHandler=function(target,eventType,handler){
            target.addEventListerner(eventType,handler,false);
        };
    }else{
        addHandler=function(target,eventType,handler){
            target.attachEvent("on"+eventType,handler);
        };
    }
}
//以上方法会在函数第一次调用时,检查并决定使用哪种方法去绑定事件处理器。然后原始函数被包含正确操作的新函数覆盖。
2.条件预加载(Conditional Advance Loading)
条件预加载会在脚本加载期间提前检测,而不会等到函数被调用时。
var addHandler=document.body.addEventListerner ? 
    function(target,eventType,handler){
        targrt.addEventListerner(eventType,handler,false);
    }:
    function(target,eventType,handler){
        target.attachEvent("on"+eventType,handler);
    };

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81512.html

相关文章

  • 【Node Hero】3. 理解异步编程

    摘要:异步编程在传统编程实践中,大多数操作都是同步发生的。中的异步编程异步是一种输入输出处理的形式,它允许在传输完成之前,其它处理能继续进行。 本文转载自:众成翻译译者:网络埋伏纪事链接:http://www.zcfy.cc/article/1759原文:https://blog.risingstack.com/node-hero-async-programming-in-node-js/ ...

    kevin 评论0 收藏0
  • 如何成为专业的PHP开发者

    摘要:如何才能成为一名专业的开发者资深开发者在其博客上分享了一些心得。要想成为一个专业的程序员,首先要成为一个中级程序员。永远不要低估陪伴的力量结论当你专注于实践上面所提到各种方法的时候,你就在成为专业开发者的路上。 如何才能成为一名专业的PHP开发者?资深Web开发者Bruno Skvorc在其博客上分享了一些心得。 showImg(http://segmentfault.com/img...

    617035918 评论0 收藏0
  • 假如时光倒流,我会这么学习Java

    摘要:看起来没有集合框架,线程,等那么耀眼,但它可是很多框架的基础啊回复反射查看相关文章,先把基础学会,后面的得用到它。 回头看看, 我进入Java 领域已经快15个年头了, 虽然学的也一般, 但是分享下我的心得,估计也能帮大家少走点弯路。[入门]我在2001年之前是C/C++阵营, 有C和面向对象的基础, 后来转到Java ,发现没有指针的Java真是好简单, 另外Java 的类库好用的让...

    bladefury 评论0 收藏0
  • 说说我的web前端之路,分享些前端的好书

    摘要:推荐高性能网站建设指南高性能网站建设进阶指南理由在读完前几本书之后我们对前端的性能和自己的代码的效率已经达到相当的高度了,然后我们在接触一些前端工程师的一些精髓。   WEB前端研发工程师,在国内算是一个朝阳职业,这个领域没有学校的正规教育,大多数人都是靠自己自学成才。本文主要介绍自己从事web开发以来(从大二至今)看过的书籍和自己的成长过程,目的是给想了解JavaScript或者是刚...

    PascalXie 评论0 收藏0

发表评论

0条评论

niceforbear

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<