mousemove 拖拽操作

  1. var count = 0;
  2. elem.onmousemove = function(){
  3. count++;
  4. // 当计数器为偶数的时候不执行mousemove
  5. if( count % 2 === 0 ){
  6. return;
  7. }
  8.  
  9. // 实现拖拽功能的代码...
  10. };

高频事件的简单处理

  1. var throldHold = 200; //两次scroll事件触发之间最小的事件间隔
  2. window.onscroll = function () {
  3. if (arguments.callee.timer) {
  4. clearTimeout(arguments.callee.timer);
  5. }
  6. arguments.callee.timer = setTimeout(isDivScroll, throldHold);
  7. }
  8. //isDivScroll滚动执行的方法

针对高频事件,我们封装一下

  1. //函数节流(throttle)与函数去抖(debounce)
  2. var throttle = function( fn, timeout ){
  3. var timer;
  4. return function(){
  5. var self = this,
  6. args = arguments;
  7. clearTimeout( timer );
  8. timer = setTimeout(function(){
  9. fn.apply( self, args );
  10. }, timeout );
  11. };
  12.  
  13. };

mousewheel 滚轮操作

  1. window.onmousewheel = throttle(function(){
  2. // 滚轮滚动时的操作代码..
  3. }, 200 );

resize  窗口操作  ie每次比其他浏览是多重复触发一次

  1. window.onresize = throttle(function(){ //普通绑定
  2. // 自适应布局的代码...
  3. }, 200 );
  4.  
  5. window.addEventListener("resize", throttle(function(){ //监听绑定
  6. console.log('重置');
  7. },200),false);

参考别的框架的代码  UnderscoreJS 框架

  1. function debounce(func, wait, immediate) {
  2.  
  3. var timeout;
  4. return function() {
  5. var context = this, args = arguments;
  6. var later = function() {
  7. timeout = null;
  8. if (!immediate) func.apply(context, args);
  9. };
  10. var callNow = immediate && !timeout;
  11. clearTimeout(timeout);
  12. timeout = setTimeout(later, wait);
  13. if (callNow) func.apply(context, args);
  14. };
  15. }
  16.  
  17. // 添加resize的回调函数,但是只允许它每300毫秒执行一次
  18. window.addEventListener('resize', debounce(function(event) {
  19. // 这里写resize过程
  20. },300));

  

------------------------------------------------------------------------------------

阻止mouseover和mouseout的反复触发

  1. function contains(parentNode, childNode) {
  2. if (parentNode.contains) {
  3. return parentNode != childNode && parentNode.contains(childNode);
  4. } else {
  5. return !!(parentNode.compareDocumentPosition(childNode) & 16);
  6. }
  7. }
  8. function checkHover(e,target){
  9. if (getEvent(e).type=="mouseover") {
  10. return !contains(target,getEvent(e).relatedTarget||getEvent(e).fromElement) && !((getEvent(e).relatedTarget||getEvent(e).fromElement)===target);
  11. } else {
  12. return !contains(target,getEvent(e).relatedTarget||getEvent(e).toElement) && !((getEvent(e).relatedTarget||getEvent(e).toElement)===target);
  13. }
  14. }
  15.  
  16. function getEvent(e){
  17. return e||window.event;
  18. }
  19.  
  20. document.getElementById("element").addEventListener("mouseover",function(e){
  21. if(checkHover(e,this)){
  22. console.log('鼠标进去一次');
  23. }
  24. },false);

  

  1.  

js 性能优化整理之 高频优化的更多相关文章

  1. js性能优化-事件委托

    js性能优化-事件委托 考虑一个列表,在li的数量非常少的时候,为每一个li添加事件侦听当然不会存在太多性能方面的问题,但是当列表非常的长,长到上百上千甚至上万的时候(当然只是一个解释,实际工作中很少 ...

  2. 客户端JS性能的一些优化的小技巧

    下面是一些关于客户端JS性能的一些优化的小技巧:1.[顶]关于JS的循环,循环是一种常用的流程控制.JS提供了三种循环:for(;;). while().for(in).在这三种循环中 for(in) ...

  3. JavaScript是如何工作的: CSS 和 JS 动画底层原理及如何优化它们的性能

    摘要: 理解浏览器渲染. 原文:JavaScript是如何工作的: CSS 和 JS 动画底层原理及如何优化它们的性能 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这是专门探索 J ...

  4. 你不知道的Node.js性能优化,读了之后水平直线上升

    本文由云+社区发表 "当我第一次知道要这篇文章的时候,其实我是拒绝的,因为我觉得,你不能叫我写马上就写,我要有干货才行,写一些老生常谈的然后加上好多特技,那个 Node.js 性能啊好像 D ...

  5. js 性能优化利器:prepack

    1. js 性能优化 js 本身是没有像 python 一样的预编译功能,更没有像 java 一样的编译功能,所以,这里所说的 js 代码预编译 只是通过工具实现的类似功能而已. 这就要提到 prep ...

  6. js 性能优化 篇一

    JS性能优化 摘自:http://www.china125.com/design/js/3631.htm  首先,由于JS是一种解释型语言,执行速度要比编译型语言慢得多.(注:,Chrome是第一款内 ...

  7. js性能优化文章集锦

    总结的js性能优化方面的小知识http://www.it165.net/pro/html/201503/35336.html 如何优化你的JS代码http://www.php100.com/html/ ...

  8. [经验] Win7减肥攻略(删文件不删功能、简化优化系统不简优化性能)

    [经验] Win7减肥攻略(删文件不删功能.简化优化系统不简优化性能) ☆心梦无痕☆ 发表于 2014-1-24 11:15:04 https://www.itsk.com/thread-316471 ...

  9. 根据网站所做的SEO优化整理的一份文档

    今日给合作公司讲解本公司网站SEO优化整理的一份简单文档 架构 ########################################## 1.尽量避免Javascript和flash导航. ...

随机推荐

  1. Setup Git Server in CentOS 6.3

    0. Environment: Server machine: CentOS 6.3 x86 Client machine: Windows 10 Pro x86_64 1. Install ssh ...

  2. 面向服务的体系架构SOA

    面向服务的体系架构SOA 序言 在.Net的世界中,一提及SOA,大家想到的应该是Web Service,WCF,还有人或许也会在.NET MVC中的Web API上做上标记,然后泛泛其谈! 的确,微 ...

  3. 解决wordpress发表文章,照片不能居中的问题

    最近,随着一个年轻漂亮的女人的帮助(简直美极了.图相当火爆,性格非常好.大家闺秀型,照片给大家看看下一个突发.哈哈)获取她的个人博客,地址似乎是www.okaaok.com遇到发表文章.照片不能反正水 ...

  4. UseCase事件描述叙事流规范

    文化/fasiondog 整理的用例需求编写规范.分享部分UseCase事件描述叙事流规范.其中.标准5~10.12来自哪里<编写有效用例>([美国] Alistair Cockburn ...

  5. Arduino 数码管LED驱动 数组法

    上个样例讲到驱动LED数码管,採用一种最直接的方案,对每一个LED进行高低电平的控制,这种长处是每一个LED都是受控可检的,避免了因为短路造成的假象,但对于数字变化来说,写起来就很冗余,因此这次尝试用 ...

  6. 【Leetcode】Pascal&#39;s Triangle II

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3 ...

  7. CentOS 6.3 安装 samba 共享(转)

    PHP环境在linux下,但是开发的时候用的是windows,于是我用了samba将linux的一个目录共享,然后在windows上做映射,这样就可以直接在windows下编辑linux上的文件了 首 ...

  8. CentOS7 已安装telnet维修

    今天搞下 Centos 7 以下升级 openssl 和 openssh ,顺便说下安装 telnet # 设备 telnet 避 ssh 无法登录 yum -y install xinetd tel ...

  9. linux文件打开模式

     文件打开 int open(const char *pathname, int flags, mode_t mode); 普通方式(Canonical mode) flags中没有设置O_SYN ...

  10. POJ 2586:Y2K Accounting Bug(贪心)

    Y2K Accounting Bug Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10024 Accepted: 4990 D ...