js 性能优化整理之 高频优化
mousemove 拖拽操作
- var count = 0;
- elem.onmousemove = function(){
- count++;
- // 当计数器为偶数的时候不执行mousemove
- if( count % 2 === 0 ){
- return;
- }
- // 实现拖拽功能的代码...
- };
高频事件的简单处理
- var throldHold = 200; //两次scroll事件触发之间最小的事件间隔
- window.onscroll = function () {
- if (arguments.callee.timer) {
- clearTimeout(arguments.callee.timer);
- }
- arguments.callee.timer = setTimeout(isDivScroll, throldHold);
- }
- //isDivScroll滚动执行的方法
针对高频事件,我们封装一下
- //函数节流(throttle)与函数去抖(debounce)
- var throttle = function( fn, timeout ){
- var timer;
- return function(){
- var self = this,
- args = arguments;
- clearTimeout( timer );
- timer = setTimeout(function(){
- fn.apply( self, args );
- }, timeout );
- };
- };
mousewheel 滚轮操作
- window.onmousewheel = throttle(function(){
- // 滚轮滚动时的操作代码..
- }, 200 );
resize 窗口操作 ie每次比其他浏览是多重复触发一次
- window.onresize = throttle(function(){ //普通绑定
- // 自适应布局的代码...
- }, 200 );
- window.addEventListener("resize", throttle(function(){ //监听绑定
- console.log('重置');
- },200),false);
参考别的框架的代码 UnderscoreJS 框架
- function debounce(func, wait, immediate) {
- var timeout;
- return function() {
- var context = this, args = arguments;
- var later = function() {
- timeout = null;
- if (!immediate) func.apply(context, args);
- };
- var callNow = immediate && !timeout;
- clearTimeout(timeout);
- timeout = setTimeout(later, wait);
- if (callNow) func.apply(context, args);
- };
- }
- // 添加resize的回调函数,但是只允许它每300毫秒执行一次
- window.addEventListener('resize', debounce(function(event) {
- // 这里写resize过程
- },300));
------------------------------------------------------------------------------------
阻止mouseover和mouseout的反复触发
- function contains(parentNode, childNode) {
- if (parentNode.contains) {
- return parentNode != childNode && parentNode.contains(childNode);
- } else {
- return !!(parentNode.compareDocumentPosition(childNode) & 16);
- }
- }
- function checkHover(e,target){
- if (getEvent(e).type=="mouseover") {
- return !contains(target,getEvent(e).relatedTarget||getEvent(e).fromElement) && !((getEvent(e).relatedTarget||getEvent(e).fromElement)===target);
- } else {
- return !contains(target,getEvent(e).relatedTarget||getEvent(e).toElement) && !((getEvent(e).relatedTarget||getEvent(e).toElement)===target);
- }
- }
- function getEvent(e){
- return e||window.event;
- }
- document.getElementById("element").addEventListener("mouseover",function(e){
- if(checkHover(e,this)){
- console.log('鼠标进去一次');
- }
- },false);
js 性能优化整理之 高频优化的更多相关文章
- js性能优化-事件委托
js性能优化-事件委托 考虑一个列表,在li的数量非常少的时候,为每一个li添加事件侦听当然不会存在太多性能方面的问题,但是当列表非常的长,长到上百上千甚至上万的时候(当然只是一个解释,实际工作中很少 ...
- 客户端JS性能的一些优化的小技巧
下面是一些关于客户端JS性能的一些优化的小技巧:1.[顶]关于JS的循环,循环是一种常用的流程控制.JS提供了三种循环:for(;;). while().for(in).在这三种循环中 for(in) ...
- JavaScript是如何工作的: CSS 和 JS 动画底层原理及如何优化它们的性能
摘要: 理解浏览器渲染. 原文:JavaScript是如何工作的: CSS 和 JS 动画底层原理及如何优化它们的性能 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这是专门探索 J ...
- 你不知道的Node.js性能优化,读了之后水平直线上升
本文由云+社区发表 "当我第一次知道要这篇文章的时候,其实我是拒绝的,因为我觉得,你不能叫我写马上就写,我要有干货才行,写一些老生常谈的然后加上好多特技,那个 Node.js 性能啊好像 D ...
- js 性能优化利器:prepack
1. js 性能优化 js 本身是没有像 python 一样的预编译功能,更没有像 java 一样的编译功能,所以,这里所说的 js 代码预编译 只是通过工具实现的类似功能而已. 这就要提到 prep ...
- js 性能优化 篇一
JS性能优化 摘自:http://www.china125.com/design/js/3631.htm 首先,由于JS是一种解释型语言,执行速度要比编译型语言慢得多.(注:,Chrome是第一款内 ...
- js性能优化文章集锦
总结的js性能优化方面的小知识http://www.it165.net/pro/html/201503/35336.html 如何优化你的JS代码http://www.php100.com/html/ ...
- [经验] Win7减肥攻略(删文件不删功能、简化优化系统不简优化性能)
[经验] Win7减肥攻略(删文件不删功能.简化优化系统不简优化性能) ☆心梦无痕☆ 发表于 2014-1-24 11:15:04 https://www.itsk.com/thread-316471 ...
- 根据网站所做的SEO优化整理的一份文档
今日给合作公司讲解本公司网站SEO优化整理的一份简单文档 架构 ########################################## 1.尽量避免Javascript和flash导航. ...
随机推荐
- 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 ...
- 面向服务的体系架构SOA
面向服务的体系架构SOA 序言 在.Net的世界中,一提及SOA,大家想到的应该是Web Service,WCF,还有人或许也会在.NET MVC中的Web API上做上标记,然后泛泛其谈! 的确,微 ...
- 解决wordpress发表文章,照片不能居中的问题
最近,随着一个年轻漂亮的女人的帮助(简直美极了.图相当火爆,性格非常好.大家闺秀型,照片给大家看看下一个突发.哈哈)获取她的个人博客,地址似乎是www.okaaok.com遇到发表文章.照片不能反正水 ...
- UseCase事件描述叙事流规范
文化/fasiondog 整理的用例需求编写规范.分享部分UseCase事件描述叙事流规范.其中.标准5~10.12来自哪里<编写有效用例>([美国] Alistair Cockburn ...
- Arduino 数码管LED驱动 数组法
上个样例讲到驱动LED数码管,採用一种最直接的方案,对每一个LED进行高低电平的控制,这种长处是每一个LED都是受控可检的,避免了因为短路造成的假象,但对于数字变化来说,写起来就很冗余,因此这次尝试用 ...
- 【Leetcode】Pascal's Triangle II
Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3, Return [1,3 ...
- CentOS 6.3 安装 samba 共享(转)
PHP环境在linux下,但是开发的时候用的是windows,于是我用了samba将linux的一个目录共享,然后在windows上做映射,这样就可以直接在windows下编辑linux上的文件了 首 ...
- CentOS7 已安装telnet维修
今天搞下 Centos 7 以下升级 openssl 和 openssh ,顺便说下安装 telnet # 设备 telnet 避 ssh 无法登录 yum -y install xinetd tel ...
- linux文件打开模式
文件打开 int open(const char *pathname, int flags, mode_t mode); 普通方式(Canonical mode) flags中没有设置O_SYN ...
- POJ 2586:Y2K Accounting Bug(贪心)
Y2K Accounting Bug Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10024 Accepted: 4990 D ...