首页 文章 精选 留言 我的

精选列表

搜索[前端性能],共10000篇文章
优秀的个人博客,低调大师

Pear Admin Layui 3.8.7 发布,基于 Layui 的前端框架

项目介绍 : 基于 Layui 的后台管理系统模板,扩展Layui原生UI样式,大量开源组件,提供便捷快速的开发方式,延续 LayuiAdmin 的设计风格。基于异步Ajax的菜单构建,多标签页,单标签页的共存,多主题,多布局切换。 项目地址 开源仓库:前往 官方网址:前往 更新内容 [新增] 新增 collapse 配置,支持默认侧边收缩 [新增] 新增 pear-text / pear-back 主题,用于自定义组件的主题色跟随 [修复] 修复 默认 collaspe 收缩状态下二级菜单悬浮事件失效 [修复] 多系统模式下,顶部菜单超出可视区域,增加滑动切换 [重要] [修复] 修复消息主题,layui-this 默认选中主题色 [修复] Menu 组件高度限制,theme 属性失效问题 [优化] Button 加载按钮禁用状态仍可点击的问题 [优化] Layout 布局栅格媒体查询条件调整 [依赖] 升级 layui 至 2.6.8 最新版本 [依赖] 更新 Dtree 2.5.8 版本 预览:

优秀的个人博客,低调大师

前端百题——数组中方法原理早知道

js的Array对象可以调用很多方法,每一个方法都有其特殊的用途,但是很多情况下我们仅仅会使用这么高级方法,多于其实现过程知之甚少,本节就数组中的常用方法map、filter、reduce进行实现,帮助了解其原理。 19.1 map 19.1.1 基础 map() 方法创建一个新数组,其结果是该数组中的每个元素是调用一次提供的函数后的返回值。 map方法的用法如下所示: const new_array = arr.map(function callback(currentValue[, index[, array]]) { // …… }[, thisArg]) 复制代码 小试牛刀 const arr = [1, 2, 3, 4]; const newArr = arr.map(value => value * 3); console.log(arr); // [ 1, 2, 3, 4 ] 原数组不变 console.log(newArr); // [ 3, 6, 9, 12 ] 复制代码 19.1.2 实现 map做的事情很单纯,就是处理每个元素然后返回一个新的数组,下面就来看看怎样实现自己的map函数。实现步骤如下所示: 判断输入的第一个参数是不是函数 获取需要处理的数组内容 新建一个新数组用于装载新的内容 对数组中每个值进行处理(注意改变this指向) 返回结果 Array.prototype.myMap = function(fn) { // 判断输入的第一个参数是不是函数 if (typeof fn !== 'function') { throw new TypeError(fn + 'is not a function'); } // 获取需要处理的数组内容 const arr = this; const len = arr.length; // 新建一个空数组用于装载新的内容 const temp = new Array(len); // 对数组中每个值进行处理 for (let i = 0; i < len; i++) { // 获取第二个参数,改变this指向 let result = fn.call(arguments[1], arr[i], i, arr); temp[i] = result; } // 返回新的结果 return temp; } const arr = [1, 2, 3, 4]; const newArr = arr.myMap(value => value * 3); console.log(arr); // [ 1, 2, 3, 4 ] 原数组不变 console.log(newArr); // [ 3, 6, 9, 12 ] 复制代码 上述就是map的实现流程,并且经过验证与原生的map方法的结果一致。 19.2 filter 19.2.1 基础 filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。 filter方法的用法如下所示: const newArray = arr.filter(callback(element[, index[, array]])[, thisArg]) 复制代码 小试牛刀 const arr = [1, 2, 3, 4]; const newArr = arr.filter(value => value > 2); console.log(arr); // [ 1, 2, 3, 4 ] console.log(newArr); // [ 3, 4 ] 复制代码 19.2.2 实现 filter函数做的事情就是过滤出符合条件的元素,对于filter的实现步骤和map的基本一致,不同之处在于其在数组中处理每个值的时候稍有区别。 Array.prototype.myFilter = function (fn) { if (typeof fn !== 'function') { throw new TypeError(`${fn} is not a function`); } // 获取该数组 const arr = this; // 获取该数组长度 const len = this.length >>> 0; // 新建一个新的数组用于放置该内容 const temp = []; // 对数组中每个值进行处理 for (let i = 0; i < len; i++) { // 处理时注意this指向 const result = fn.call(arguments[1], arr[i], i, arr); result && temp.push(arr[i]); } return temp; } const arr = [1, 2, 3, 4]; const newArr = arr.myFilter(value => value > 2); console.log(arr); // [ 1, 2, 3, 4 ] console.log(newArr); // [ 3, 4 ] 复制代码 19.3 reduce 19.3.1 基础 reduce() 方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。 reduce方法的用法如下所示: const result = arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue]) 复制代码 小试牛刀 const arr = [1, 2, 3, 4]; const result = arr.reduce((accumulator, value) => accumulator + value); console.log(result); // 10 复制代码 19.3.2 实现 reduce为数组中的每一个元素依次执行callback函数,下面就来看看怎样实现自己的filter函数。实现步骤如下所示: 判断输入的第一个参数是不是函数 获取需要处理的数组内容 获取初始值 依次处理后续数组中的元素 返回累加器处理的结果 Array.prototype.myReduce = function(fn) { if (typeof fn !== 'function') { throw new TypeError(`${fn} is not a function`); } const arr = this; const len = arr.length >>> 0; let value;// 最终返回的值 let k = 0;// 当前索引 if (arguments.length >= 2) { value = arguments[1]; } else { // 当数组为稀疏数组时,判断数组当前是否有元素,如果没有索引加一 while (k < len && !( k in arr)) { k++; } // 如果数组为空且初始值不存在则报错 if (k >= len) { throw new TypeError('Reduce of empty array with no initial value'); } value = arr[k++]; } while (k < len) { if (k in arr) { value = fn(value, arr[k], k, arr); } k++; } return value; } const arr = [1, 2, 3, 4]; const result = arr.myReduce((accumulator, value) => accumulator + value); console.log(result); // 10 复制代码 1.如果觉得这篇文章还不错,来个分享、点赞吧,让更多的人也看到 如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点star: http://github.crmeb.net/u/defu 不胜感激 ! 来自 “开源世界 ” ,链接: https://ym.baisou.ltd/post/735.html ,如需转载,请注明出处,否则将追究法律责任。 ​​​​​​

优秀的个人博客,低调大师

戏说前端 JavaScript 之『防抖节流』基础知识

往事不堪回首 犹记在很久之前的某次面试中,和那技术大哥谈的正欢呢,冷不防他来了句:谈一谈防抖和节流吧。 抹了把凉汗,我用颤抖的、不自信的语气回答道:呃,防抖就是应该是防止抖动的意思,节流大概是节省流量吧…… 当时,我的心理活动是这样的: 当年心理素质是真的差,这个坎没翻过去,最后的结果就是: 知耻而后勇 以我不服输的性格,这场子必须找回来! 经过这几年的勤学苦练,我现在自信简直爆棚,如果,时光能够倒流,我相信我可以做到这样: 今天,我要跟「防抖节流」来做个了断,以证明现在的我已不是过去的我,用一个成语来形容,那就是——今非昔比! 知己知彼,方能百战百胜 古老的法则告诉我们:欲要消灭敌人,必须先要了解敌人。 防抖(debounce) 从字面意思来看,防抖就是防止抖动的意思。 举个例子:比如说你对象要你帮她拍美照, 结果因为你加班太多身体虚,手抖的厉害,拍出来的照片模糊不清,为免受雷霆之怒,你就需要想想办法。首先,分析一下照片模糊的原因: 手抖的厉害(1s 十几次!!??) 导致相机不能完美的捕捉画面 所以照片模糊。 看来,「手抖」才是罪魁祸首啊,那想个办法解决手抖的问题就好了:找一个支架,让它代替手来支撑相机,这样就不「抖」了! 这操作,让我不得不对你竖起大拇指: 想想看上面这个例子本质上是解决了什么问题? 我觉得应该是解决了**「抖动频率」**的问题——手拿着,一秒会抖好多次;可支架撑着,好长时间都未必会抖一次。可谓是「人不如架」啊! 支架起的就是防抖的作用。 回到我们今天的正题上,来看一下防抖的常规解释:当函数被连续调用时,该函数并不执行,只有当其全部停止调用超过一定时间后才执行1次。 节流(throttle) 现在回头看看我当年的回答,还是摸到了一点门槛(手动缓解尴尬,嘿嘿)。 再来个例子:家里的水龙头,即使你开的再大,它在单位时间里能流出的水就那么多,因为水龙头的规格限制了它单位时间里的流量。 水龙头起到的就是节流的作用。 节流的常规解释:规定一个单位时间,在这个单位时间内,只能有一次触发事件的回调函数执行,如果在同一个单位时间内某事件被触发多次,只有一次能生效。 常用场景 防抖节流一般用于以下场景: 浏览器窗口的缩放,页面的滑动触发的 resize ,scroll 鼠标事件 onmousemove ,onmousedown, onmouseup 输入框录入触发的 keyup ,keydown…… 原理 防抖是维护一个计时器,规定在 delay 时间后触发函数,但是在 delay 时间内再次触发的话,都会清除当前的 timer 然后重新设置超时调用,即重新计时。这样一来,只有最后一次操作能被触发。 节流是通过判断是否到达一定时间来触发函数,若没到规定时间则使用计时器延后,而下一次事件则会重新设定计时器。 区别 函数防抖是某一段时间内只执行一次,而函数节流是间隔时间执行,不管事件触发有多频繁,都会保证在规定时间内一定会执行一次真正的事件处理函数。 总结 今天就先来了解一下「防抖」和「节流」的基础知识,详细代码实现待后续。 ~ ~ ~ 未完待续 学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂! 大家好!我是〖编程三昧〗的作者 隐逸王,我的公众号是『编程三昧』,欢迎关注,希望大家多多指教! 知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册