首页 文章 精选 留言 我的

精选列表

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

大前端领域哪些开源项目最受欢迎?

评选活动设置「最受欢迎项目」,以及特别策划的「优秀中国开源原生创企」和「神秘奖项」,本页面用于投票选出「最受欢迎项目」; 参与投票的候选项目被划分到「组织」或「个人」通道,最终选出 TOP 30 项目(组织:21 个,个人:9 个) 详细规则点此查看; 候选开源项目均由国人发起,评审委员会筛选出本页面的候选项目; 提名、修改项目信息等相关问题请私信 @OSCHINA编辑部。

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

foundation-sites 6.7.4 发布,响应式前端框架

foundation-sites 6.7.4发布了,Foundation 是一个易用、强大而且灵活的框架,用于构建基于任何设备上的 Web 应用,提供多种 Web 上的 UI 组件,如表单、按钮、Tabs 等等。 6.7.4 版本主要更新如下: 增强功能 当what-intent检测到正在使用触摸鼠标时,焦点上的轮廓将被删除。 当一个元素被设置为draggable=false 时,iOS上的标注和强制触摸也会被抑制。 新的可见类(黑夜模式、IE10+、sticky): show-for-dark-mode hide-for-dark-mode show-for-ie hide-for-ie show-for-sticky hide-for-sticky 现在 Slider 使用抓取的光标作为句柄。 bug 修复 运行构建时不再有 ESLint 和 SassLint 错误! 更新一些依赖项,以跟上 DEP 训练 修复了定制器构建问题 修复了文档站点上的错误链接。 标签上的匹配高度现在使用min-height 修复了Accordion菜单插入符号,有几率不通过 sass 变量定义大小的问题 删除了 console.log 的几个实例 changed.zf.mediaquery事件又回来了!当浏览器调整大小并越过定义的断点时,将触发此事件。始终可以通过以下方式访问当前命名的断点:Foundation.MediaQuery.current 为 Reveal、Off Canvas 和 Overflow 原型类添加了动态滚动支持 Slider不再在 init 上发出moved.zf.slider和changed.zf.slider事件 更新公告:https://github.com/foundation/foundation-sites/releases

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

前端通讯协议大比拼:WebSockets和HTTP

在实时应用程序中,毋庸置疑,需要在信息可用时立即从服务器获取信息。而且,从根本上说,经典的 HTTP 请求/响应模式无法胜任这项工作。因为服务器将保持沉默,无论是否有新数据,除非或直到消费者请求更新。 随着开发人员试图使请求/响应模型适应更动态的实时Web的需求,这种限制导致了各种黑客和变通方法的出现(其中一些变得正式并被广泛采用)。 所有这些技术和方法,从 Comet 到 HTTP 长轮询,都有一个共同点:本质上,它们开始创造真正实时(事件驱动)数据交换/通信的错觉,所以当服务器有一些新数据时,它发送一个响应。 尽管 HTTP 不是事件驱动的协议,因此也不是真正的实时,但这些方法实际上在特定用例中非常有效,例如 Gmail 聊天。然而,在低延迟应用程序或大规模应用程序中会出现问题,主要是因为与 HTTP 相关的处理需求。 也就是说,对于 HTTP,必须不断请求更新(并获得响应),这是非常耗费资源的:客户端建立连接->请求更新->从服务器获得响应,然后关闭连接。想象一下,这个过程被成千上万的并发用户无休止地重复,这对服务器来说是非常繁重的压力。 正是这些问题最终促使开发人员 Michael Carter 和 Ian Hickson 开发 WebSockets ,本质上是一个构建在设备 TCP/IP 堆栈之上的薄传输层。其目的是为 Web 应用程序提供本质上是 TCP 通信层的东西,它尽可能接近原生,禁止一些抽象,以消除某些基于安全的复杂性和其他问题。 本文将着眼于一些用于绕过实时应用程序中 HTTP 请求/响应 模式的限制的技术,每个技术的一些相关问题,以及 WebSockets 如何帮助克服这些问题。 HTTP HTTP 本质上是客户端-服务器计算模型中的请求/响应协议,是万维网的主要通信方式。最初的版本由 Tim Berners-Lee 在 1989 年作为应用程序协议提出,非常有限,并迅速修改以支持更广泛的浏览器和服务器功能。 尽管 HTTP/1.0 不被视为正式规范或互联网标准,但这些修改最终在 1996 年被 HTTP 工作组记录为 HTTP/1.0(RFC 1945)。 HTTP/1.1 HTTP/1.1 是 Web 浏览器和服务器中最广泛支持的版本,它的到来是向前迈出的一大步,因为它实现了一些非常重要的优化和增强,从持久和管道连接到新的请求/响应头字段。其中最主要的是两个标头,它们是许多改进的基础,这些改进有助于实现更动态的实时WEB: Keep-Alive 标头:用于设置主机之间的持久通信。意味着连接可以被重复用于多个请求,这显着减少了请求延迟,这样客户端就不需要在发送第一个请求后重新协商 TCP握手(3次握手)连接。另一个积极的副作用是,由于 TCP 的慢启动机制,连接会随着时间的推移而变得更快。在 HTTP/1.1 之前,必须为每个请求/响应对打开一个新连接。 Upgrade 头:用于将连接升级到增强协议模式(如 WebSockets)。 HTTP 轮询 HTTP 轮询代表了经典请求/响应机制的进步,尽管轮询有多种版本,但只有长轮询在任何情况下都适用于实时 WEB 程序。 例如,HTTP 短轮询使用基于 AJAX 的计时器来确保客户端设备以固定时间间隔发送服务器请求。但是,服务器仍会立即响应每个请求,在关闭连接之前,要么提供新数据,要么在没有新数据的情况下发送“空”响应。因此,当客户端需要在新数据可用时立即响应时,这在实时应用程序中真的没有多大用处。 正是这种限制导致了 HTTP 长轮询的发展,它本质上是一种旨在模拟服务器推送功能的技术。 本质上长轮询是一种技术,其中服务器选择将客户端的连接保持尽可能长的时间(通常为 20 秒),仅在任一数据之后传递响应变为可用或达到超时阈值。 长轮询的主要优点是,理论上,只要新信息可用,就会立即将其发送给客户端。然而,不足之处是处理 HTTP 请求带来的额外开销。 HTTP 流媒体 HTTP 流是一种推送式数据传输技术,它允许 Web 服务器通过无限期保持打开的单个 HTTP 连接向客户端连续发送数据。本质上,客户端发出一个 HTTP 请求,服务器推出一个不确定长度的响应。 然而,虽然 HTTP 流传输性能良好、易于使用并且可以替代 WebSockets,但它存在有局限性。从实时角度来看,主要问题是中介可以中断连接(无论是通过超时还是仅仅因为它以“循环方式”服务多个请求),因此并不总是能够保证实时性。 HTTP/2.0 HTTP/2.0 由 Google 于 2009 年最初宣布的实验性协议 SPDY 演变而来。到 2015 年,HTTP 工作组发布了 HTTP/2.0 作为建议标准,并以 SPDY 规范为起点。 它本质上是一个旨在提高 Web 通信速度的性能更新,主要有以下两个实用功能: 多路复用:不是以明文格式传输数据,而是将数据编码为二进制并封装在帧内,这些帧可以沿着称为流的双向通道进行多路复用,全部通过单个 TCP 连接。这就允许同时发生许多并行的请求/响应 服务器推送:服务器推送是一种性能特性,它允许服务器在客户端请求响应之前向符合 HTTP/2 的客户端发送响应。当服务器知道客户端需要“推送”响应来完全处理原始请求时,此功能很有用。 尽管有这些进步,如今由于移动设备的大量使用,互联网流量的爆炸式增长使得 HTTP/2.0 难以提供流畅、透明的网页浏览体验,特别是在实时应用程序及其用户需求日益增长的情况下。 优点 通过安装 SSL 证书,所有浏览器都支持基于 HTTPS 的 HTTP/2 协议。 HTTP/2 允许客户端通过单个 TCP 连接并发发送所有请求,理论上,客户端可以更快地加载资源。 TCP 是一种可靠、稳定的连接协议。 缺点 并发请求会增加服务器的负载。HTTP/2 服务器可以大批量接收请求,这可能会导致请求超时。服务器负载峰值的问题可以通过使用负载均衡器或代理服务器来解决,限制转发请求。 服务器对 HTTP/2 优先级的支持还不成熟。软件支持仍在不断发展,某些 CDN 或负载均衡器可能无法正确支持优先级。 HTTP/2 推送功能可能很难正确实现。 HTTP/2 解决了 HTTP 首尾阻塞问题,但 TCP 级别的阻塞仍然会导致问题。 HTTP/3.0 HTTP/3.0 是 HTTP 的新迭代,自 2018 年以来一直在开发中,尽管它仍然是标准草案,但一些浏览器已经支持它了,如 Chrome。 HTTP/3 的目标是通过解决 HTTP/2 与传输相关的问题,在所有形式的设备上提供快速、可靠和安全的 Web 连接。为此,它使用称为 QUIC 的不同传输层网络协议,该协议运行在用户数据报协议 (UDP) 上,而不像其他早期版本那样使用 TCP。 不过 HTTP/3 已经开始出现一些潜在的问题,例如: 传输层的影响:过渡到 HTTP/3 不仅涉及应用层的变化,还涉及底层传输层的变化。因此,与其前身相比,采用 HTTP/3 更具挑战性。 可靠性和数据完整性问题:UDP 一般适用于可以接受丢包的应用,那是因为 UDP 不保证数据包会按顺序到达。事实上,它并不能保证数据包一定会到达,因此,如果数据完整性对应用实例很重要并且使用的是 HTTP/3,则将必须构建相应的机制来确保消息排序和完整的到达。 优点 引入运行在 UDP 上的新(不同)传输协议 QUIC 意味着理论上和目前实验上的延迟减少。 由于 UDP 不在协议栈中执行错误检查和纠正,因此它适用于不需要这些或在应用程序中执行这些的应用场景。UDP 通常用于时间敏感的应用程序,例如实时系统,它不能等待数据包重新传输,因此可以容忍一些丢弃的数据包。 缺点 传输层的影响:过渡到 HTTP/3 不仅涉及应用层的变化,还涉及底层传输层的变化。因此,与其前身相比,采用 HTTP/3 更具挑战性。 可靠性问题:UDP 应用程序往往缺乏可靠性,必须承认会有一定程度的数据包丢失、重新排序、错误或重复。由最终用户应用程序提供任何必要的握手,例如已收到消息的实时确认。 HTTP/3 还没有完全标准化。 WebSockets 关于WebSockets 的详细介绍,可以参阅《深入学习WebSockets概念和实践》。 WebSockets 允许服务器和客户端随时推送消息,而与之前的请求没有任何关系。使用 WebSockets 的一个显着优势是,几乎每个浏览器都支持 WebSockets。 WebSocket 解决了一些 HTTP 问题: 双向协议:客户端/服务器可以向对方发送消息(在 HTTP 中,请求总是由客户端发起,响应由服务器处理) 全双工通信:客户端和服务器可以同时独立地相互通信。 单个 TCP 连接: 一开始升级 HTTP 连接后,客户端和服务器在 WebSocket 连接的整个生命周期都通过相同的 TCP 连接(持久连接)进行通信,很好的节省服务器资源和带宽。 优点 WebSocket 是一种事件驱动的协议,这意味着可以将其用于真正的实时通信。与 HTTP 不同(必须不断地请求更新),而使用 websockets,更新在可用时就会立即发送。 WebSockets 保持单个持久连接打开,同时消除基于 HTTP 请求/响应的方法出现的延迟问题。 WebSockets 通常不使用 XMLHttpRequest,因此,每次需要从服务器获取更多信息时,都不会发送标头。这反过来又减少了发送到服务器的数据负载。 缺点 当连接终止时,WebSockets 不会自动恢复,这是应用开发中需要自己实现的机制,也是存在许多客户端开源库的原因之一。 早于 2011 年的浏览器无法支持 WebSocket 连接,这个现在可以忽略不计。 总结 通常,在实时、持续通信的上下文中,WebSockets 将是更好的选择。 基于 HTTP 的技术往往在服务器上占用更多资源,而 WebSockets 在服务器上的占用空间非常小。同时,像长轮询这样的方法也需要在服务器和设备之间进行多次跳转,并且这些网关通常对允许连接保持打开状态的时间有不同的限制。 如果项目中有长连接、不断更新、实时数据交互的需求,应该首选 WebSockets 来构建。

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

前端 JavaScript 中 JSON.stringify() 的基本用法

前言 在开发工作中,我们可能会碰到这样的需求:需要将某个对象内容弹窗显示或者保存在文件中,这时候如果你直接弹窗的话,很可能就是下面这样的: 因为很多接口它对参数有要求,比如只能是字符串之类的。 这时候,就需要我们将对象转换为字符串进行输出,JSON.stringify() 方法就可以帮我们实现将对象转为字符串的过程。 方法描述 JSON.stringify() 方法将一个 JavaScript 对象或值转换为 JSON 字符串,如果指定了一个 replacer 函数,则可以选择性地替换值,或者指定的 replacer 是数组,则可选择性地仅包含数组指定的属性。 语法 JSON.stringify(value[, replacer [, space]]) 参数说明: value 将要序列化成 一个 JSON 字符串的值。 replacer(可选) 如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理; 如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中; 如果该参数为 null 或者未提供,则对象所有的属性都会被序列化。 space(可选) 指定缩进用的空白字符串,用于美化输出(pretty-print);如果参数是个数字,它代表有多少的空格;上限为10。 如果省略space,则将生成返回值文本,而没有任何额外空格。 如果 space是一个数字,则返回值文本在每个级别缩进指定数目的空格。 如果 space 大于 10,则文本缩进 10 个空格。 如果 space是一个非空字符串(例如“\t”),则返回值文本在每个级别中缩进字符串中的字符。 如果 space 是长度大于 10个字符的字符串,则使用前 10 个字符。 返回值 一个表示给定值的JSON字符串。 常规用法 console.log(JSON.stringify({name: "obj"})) // '{"name": "obj"}' repalacer 参数 replacer 参数可以是一个函数或者一个数组。作为函数,它有两个参数,键(key)和值(value),它们都会被序列化。 在开始时, replacer 函数会被传入一个空字符串作为 key 值,代表着要被 stringify 的这个对象。随后每个对象或数组上的属性会被依次传入。 函数应当返回JSON字符串中的value, 如下所示: 如果返回一个 Number,转换成相应的字符串作为属性值被添加入 JSON 字符串。 如果返回一个 String,该字符串作为属性值被添加入 JSON 字符串。 如果返回一个 Boolean, "true" 或者 "false" 作为属性值被添加入 JSON 字符串。 如果返回任何其他对象,该对象递归地序列化成 JSON 字符串,对每个属性调用 replacer 方法。除非该对象是一个函数,这种情况将不会被序列化成 JSON 字符串。 如果返回 undefined,该属性值不会在 JSON 字符串中输出。 有以下对象: const data = [ { name: "person1", sex: 0, age: 18, isStudent: true }, { name: "person2", sex: 1, age: 25, isStudent: false }, { name: "person3", sex: 0, age: 15, isStudent: true } ] 接下来我们针对这个对象做各种需求实现。 只输出姓名和性别 const res = JSON.stringify(data, ["name", "sex"]) console.log(res); // `[{"name":"person1","sex":0},{"name":"person2","sex":1},{"name":"person3","sex":0}]` JSON.stringify() 提供了分离出自己需要的那部分数据。 将性别转为中文字符 const res = JSON.stringify(data, (key, value) => { if (key == 'sex') { return ["女", '男'][value]; } return value; }) console.log(res); // `[{"name":"person1","sex":"女","age":18,"isStudent":true},{"name":"person2","sex":"男","age":25,"isStudent":false},{"name":"person3","sex":"女","age":15,"isStudent":true}]` JSON.stringify() 提供了回调函数做一个映射关系。 space 参数 const res = JSON.stringify(data, ["name", "sex"],4) console.log(res); 输出如下: 这里使用了 4 个空格作为层级缩进。 注意:使用 “\t” 得到的结果和使用 4 个空格得到的结果看起来很像,但实际不是一回事。 总结 JSON.stringify() 方法可以通过参数控制输出的数据和格式,灵活应用它会大大提高我们的工作效率。 学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂! 我是〖编程三昧〗的作者 隐逸王,我的公众号是『编程三昧』,欢迎关注,希望大家多多指教! 你来,怀揣期望,我有墨香相迎! 你归,无论得失,唯以余韵相赠! 知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!

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

前端 JavaScript 之『防抖』的简单代码实现

## 前戏 经过上一篇文章的总结,我们知道:短时间内高频率地触发事件,可能会导致不良后果。 具体到我们开发界来说,如果数据一致处于一种高频率更新的状态,那么可能会引发的问题如下: - 前后端数据交互频率过高,导致流量浪费。 - 界面高频率渲染更新,引发页面延迟、卡顿或假死等状况,影响体验。 在进入正题之前,我们先来看下面这个例子: ```html 名称 输入 ``` ```javascript window.onload = () => { const inputEle = document.querySelector("#name"); const resEle = document.querySelector("#res"); inputEle.addEventListener("input", function (event) { console.log(this.value); resEle.value += `\n${ this.value }` }); } ``` ![频繁触发](https://gitee.com/yinyiwang/blogImages/raw/master/images/20210617%20/18-04-32-ppAL3g.gif) 在输入框的 input 事件中,将该输入框的当前值输出在多行文本框中。可以看到,每输入一个拼音字母,都会有一条输出记录,触发频率取决于人的打字速度。 ## 新需求 假如,现在有这么一个新需求,要我们在 input 事件中加入新的逻辑:将输入框的当前值发往后台进行存储。 可以想象,这种情况下的前后端交互频率该有多高,其中很多数据都是没有必要即刻发送保存的,纯属浪费流量。 我们可以考虑对这个需求进行一下优化,只要控制一下交互频率就好,主要有以下两个方向: - 每隔几秒发送一次数据 —— 节流 - 每当用户停止输入之后,开始计时,一定时间后发送一次数据 —— 防抖 ## 实现防抖 首先,我们从防抖的方向进行实现:只有当用户停止输入一段时间后,才会将输入内容输出在多行文本框中。 ```javascript window.onload = () => { const resEle = document.querySelector("#res"); function changeOutputVal(value) { resEle.value += `\n${ value }`; } function debounce(fn, delay = 1000) { let timer = null; return function (...args) { console.log(args); if (timer) { clearTimeout(timer); timer = null; } timer = setTimeout(() => { fn.apply(this, args); }, delay); } } const outputRes = debounce(changeOutputVal, 1000); const inputEle = document.querySelector("#name"); inputEle.addEventListener("input", (eve) => { outputRes(eve.target.value); }); } ``` 代码说明: 1. 每一次事件被触发,都会清除当前的 timer 然后重新设置超时调用,即重新计时。 这就会导致每一次高频事件都会取消前一次的超时调用,导致事件处理程序不能被触发; 2. 只有当高频事件停止,最后一次事件触发的超时调用才能在delay时间后执行。 运行效果如下: ![](https://gitee.com/yinyiwang/blogImages/raw/master/images/20210617%20/20-29-25-R4l3jg.gif) 可以看到,在加入防抖代码之后,input 事件并不会每次输入都会输出在多行文本,而是会在用户停止输入 delay 时间之后触发输出,频率确实低了很多。从某种程度上来说,的确优化了页面显示效果,给人的视觉感受比较舒服。 ## 总结 巧用防抖函数的,既可以优化性能,又能优化显示效果,一举两得。 ~ ~ 代码比较粗糙,也比较基础,后面会逐步向着复杂的方向迭代,望各位看官海涵 ~ ~ ~ 本文完 > 学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂! > > 大家好!我是〖编程三昧〗的作者 **隐逸王**,我的公众号是『编程三昧』,欢迎关注,希望大家多多指教! > > 知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬! ![mianshi](https://gitee.com/yinyiwang/blogImages/raw/master/images/20210616%20/20-45-17-6ya6Kf.jpg)

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

前端 CSS 变量简介及基本使用方法

背景 复杂的网站都会有大量的CSS代码,通常也会有许多重复的值。 举个例子,同样一个颜色值可能在成千上百个地方被使用到,如果这个值发生了变化,需要全局搜索并且一个一个替换,效率不高且容易出错。 自定义属性在某个地方存储一个值,然后在其他许多地方引用它。另一个好处是语义化的标识。比如,--main-text-color 会比 #00ff00 更易理解,尤其是这个颜色值在其他上下文中也被使用到。 概念 自定义属性(有时候也被称作CSS变量或者级联变量)是由CSS作者定义的,它包含的值可以在整个文档中重复使用。 由自定义属性标记设定值(比如: --main-color: black;),由 var() 函数来获取值(比如: color: **var(--main-color)**;)。 优势 在构建大型站点时,作者通常会面对可维护性的挑战。在这些网页中,所使用的CSS 的数量是非常庞大的,并且在许多场合大量的信息会重复使用。 例如,在网页中维护一个配色方案,意味着一些颜色在 CSS 文件中多次出现,并被重复使用。当你修改配色方案时,不论是调整某个颜色或完全修改整个配色,都会成为一个复杂的问题,不容出错,而单纯查找替换是远远不够的。 如果使用了CSS 框架,这种情况会变得尤其糟糕,此时如果要修改颜色,则需要对框架本身进行修改。 在这些场合使用 LESS 或 Sass 类似的预处理器是非常有帮助的,但是这种通过添加额外步骤的方式,可能会增加系统的复杂性。 CSS变量为我们带来一些预处理器的便利,并且不需要额外的编译。 这些变量的第二个优势就是名称本身就包含了语义的信息。CSS 文件变得易读和理解。main-text-color比文档中的#00ff00更容易理解,特别是同样的颜色出现在不同的文件中的时候。 用法 下面是 CSS 变量的使用方法和步骤。 CSS 中声明变量 我们都知道,在 JS 中要使用一个变量前,必须声明这个表变量。在 CSS 中也是一样的道理。 声明一个自定义属性,属性名需要以两个减号(--)开始,属性值则可以是任何有效的CSS值。和其他属性一样,自定义属性也是写在规则集之内的,如下: body { --bg-color: #7F583F; --color: #F7EFD2; } 上面代码中,body选择器里面声明了两个变量:--bg-color和--color。 它们与color、font-size等正式属性没有什么不同,只是没有默认含义。所以 CSS 变量(CSS variable)又叫做**"CSS 自定义属性"**(CSS custom properties)。 规则集所指定的选择器定义了自定义属性的可见作用域。通常的最佳实践是定义在根伪类 :root下,这样就可以在HTML文档的任何地方访问到它了: :root { --main-bg-color: #eee; } 自定义属性名是大小写敏感的,--my-color 和 --My-color 会被认为是两个不同的自定义属性。 CSS 中使用变量 通过var()函数来读取变量。语法如下: var(custom-property-name, value) name (必需) 变量名(以两条破折号开头)。 value (可选) 表示变量的默认值。如果该变量不存在,就会使用这个默认值。 变量名称必须以两个破折号(--)开头,且区分大小写! 使用方法: element { background-color: var(--main-bg-color); } 变量也可以使用在变量声明中: :root { --primary-color: #eee; --primary-bg-color: var(--main-bg-color); } 变量值只能用作属性值,不能用作属性名。 JS 操作 CSS 变量 在 JS 代码中,我们可能需要读取 CSS 变量的值,其方法如下: const root = document.querySelector(":root"); // 设置 CSS 变量 root.style.setProperty("--main-bg-color", "red"); // 读取 CSS 变量 const computedStyle = getComputedStyle(root); const mainBgColor = computedStyle.getPropertyValue("--main-bg-color"); console.log(mainBgColor); // 删除 CSS 变量 root.style.removeProperty("--main-bg-color"); 总结 以上就是关于 CSS 变量的一些基本概念及使用方法,更多详情待后续! 灵活使用 CSS 变量,不仅可以提高生产力,也能够提高代码的可阅读性和维护性。 ~ ~ ~ 本文完 学习有趣的知识,结识有趣的朋友,塑造有趣的灵魂! 大家好!我是〖编程三昧〗的作者 隐逸王,我的公众号是『编程三昧』,欢迎关注,希望大家多多指教! 知识与技能并重,内力和外功兼修,理论和实践两手都要抓、两手都要硬!

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

layui 2.6.8 发布,原生态前端 UI 框架

更新日志: # 2.6.8 [重写] sort 方法,以便对数字、非数字及混合类等所有内容的排序进行支持 [新增] dropdown 组件的 align 参数,用于控制下拉菜单水平对齐方式(支持 left、center、right) [新增] table 组件的 escape 参数,用于是否开启 xss 字符过滤(默认 false) [加强] table 组件的自定义模板功能,返回 LAY_COL 字段,可得到当前列的表头配置信息 [加强] form 组件对验证不通过的表单项自动定位到可视区域,不再是只对输入框自动获焦定位 #I3O5TC [加强] form 组件对 url 的验证 [修复] form 相关 css 的 layui-checkbox-disabled 书写错误(之前为 disbaled) #I1NGDC [修复] form 组件的 select option 内容出现换行时的样式异常问题 #I3T5ZC [修复] colorpicker 颜色选择组件在 Firefox 下选择颜色时的若干兼容问题 #I3POP2 [加强] colorpicker 组件的坐标定位计算方式 [修复] 低版本 ie 若干报错问题 该版本是 2.6.x的一个收尾版,基本很稳定,推荐官网下载升级(www.layui.com)。 那么下一个版本 2.7也将会开启另外一个篇章

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

Angular 12.0.0-rc.2 发布,Web 前端框架

Angular 12.0.0-rc.0现已发布,具体更新内容如下: Bug Fixes animations:确保过渡命名空间顺序一致(#19854)(01cc995) common:为具有 HttpClient request body 的布尔值添加正确的 ContentType(#38924)(#41885)(922a602) compiler-cli:将 linker作为 Babel 插件公开(#41918)(8fdac8f) compiler-cli:在 reference emitters 中更倾向于 non-aliased exports(#41866)(75bb931),closes#41443#41277 core:AsyncPipe 现在与 RxJS 7 兼容(#41590)(9759bca) core:使用表达式绑定处理多个 i18n 属性(#41882)(73c6c64),closes#41869 localize:将丢失目标的错误放宽为警告(#41944)(35ceed2),closes#21690 性能改进 core:对监听器指令的较小改进(#41807)(9346d61) 更新说明:https://github.com/angular/angular/blob/master/CHANGELOG.md

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

Angular 12.0.0-rc.0 发布,Web 前端框架

Angular 12.0.0-rc.0现已发布,具体更新内容如下: Bug Fixes animations:允许 shadow DOM 中的元素有动画(#40134)(dad42c8),closes#25672 common:viewport scroller 无法找到 shadow DOM 内的元素(#41644)(c0f5ba3),closes#41470 compiler:non-literal的内联模板在部分编译中处理不正确(#41583)(ab257b3) compiler:不为备用命名空间内的 ng-template 生成更新指令(#41669)(2bcbbda),closes#41308 compiler-cli:模板中的 autocomplete literal 类型(#41456)(#41645)(8b2b5ef) compiler-cli:如果组件没有内联样式,则在预置时不会出错(#41602)(a5fe8b9) router:只有当 reuse strategy表明它应该重新连接时,才会检索存储的路由(#30263)(a4ff071),closes#23162 router:递归合并空路径匹配(#41584)(1179dc8),closes#23162 性能改进 compiler:减少生成的安全访问和无效合并的代码量(#41563)(9a3b82f),closes#41437#41491 详情可查看:https://github.com/angular/angular/blob/master/CHANGELOG.md

资源下载

更多资源
Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

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

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

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

用户登录
用户注册