all
You must replace the baseURL in hugo.toml file when deploying, you can manage this announcement from the params.toml file.

计算机技术

Web 字体加载对 DOM 位置的影响

由于公司的业务会用到自己设计师定制的 Web 字体,所以一般在组件开发过程中会利用 CSS 引用该字体(@font-face),前段时间发现一个线上问题:在部分 iOS 机型上,DOM 元素的位置发生了错位。

了解更多

利用脚本执行 `tsc` 忽略类型检查错误

在发布 npm 包时添加对 TypeScript 类型定义文件的支持会让用户的使用体验增色不少,TypeScript 官方提供了 tsc --emitDeclarationOnly 命令用来生成类型定义文件(.d.ts)。但是,该命令会同时执行类型检查,遇到错误时会报错中断命令行进程,这就使其无法直接集成在 CI 环节在发布 npm 包时自动执行生成类型定义文件的操作。当然,一个解决办法就是解决掉代码中所有的类型检查错误即可,既然讨论到这个问题,必然不会花费额外精力去解决一些历史遗留问题。

了解更多

前端工程化:对于构建工具链的简单思考

前端工程化是在做与业务开发完全不同的事情,旨在解决软件工程领域与开发者密切相关的问题,通常会将其与基建开发、DevOps 放在一起讨论。前端开发是复杂的,其结合了 HTML/CSS/JavaScript 3 种语言,甚至还有很多其超集,没有开箱即用的工具链,不像 Java Web 开发、Android 开发等等有官方或者商业领域非常成熟的工具可以利用,一切都源于开源社区的从 0 开始构建。正因如此,前端工程化领域百花齐放,开放与创新展现的淋漓尽致,这也是前端开发者了解学习软件工程的机会。

了解更多

桥接模式:跨平台的事件机制设计

对于 Web 的图表组件库来说,一些功能比较强大的开源库,渲染层可以支持 DOM、SVG、Canvas、WebGL 等多个平台的环境,而图表库的很多功能的实现都和渲染层紧密相关。

了解更多

如何更好的维护开源项目

一直以来,开源精神被开发者所推崇,开源项目为开发者提供了不用付出除时间以外任何成本就可以学习前沿技术的最佳途径,另一方面,我们应该思考开源为何会成功,在全球开发者参与协作的情况下代码仓库为何能保持整洁、不出现大规模冲突而奔溃,上下游依赖如何管理,这背后有既定的规范进行强约束,也有一系列社区工具来完成复杂而有价值的工作。所以,从参与或者维护开源项目的角度来看,这些社区公认的最佳实践值得我们了解,学习这些东西也能在一定程度上提高我们管理项目的能力。

了解更多

TypeScript:扩展第三方库的类型定义

TypeScript 作为 JavaScript 的超集,为 Web 开发带来了强类型语言和类似代码智能提示这种良好的开发体验,而代码提示依赖于类型定义文件。类型定义文件的发展也经历了一个逐步演变的过程,从最初基于 JavaScript 编写的 npm 包,通过社区方案来引入类型定义包,再到目前多数模块基于 TypeScript 编写并在发布时带上类型定义文件这种最佳方案,开发者体验得到进一步的提升。

了解更多

解析基于 core-js 与 ESLint 的 Web 兼容方案

Web 网页为了保证在多个平台和低中高端设备上的体验稳定性和一致性,通常会做 Polyfill 以保证兼容性。

了解更多

Web 前端调试工具:SourceMap 文件

Web 前端项目出于加载性能优化和安全考虑,在生产环境部署的代码是经过混淆和压缩的,对于利用生产环境收集到的错误堆栈信息要进行调试是非常具有挑战性的。理想情况下,应该在生产环境收集错误堆栈信息,然后映射到源码进行调试。恰好,SourceMap 文件提供了这个机制,可以将编译(压缩)后的代码映射到源代码中。

了解更多

Web 应用:轻量级状态管理工具 zustand

基于 React.js 的 Web 应用如何完成状态管理?社区主流方案是 react-redux,其本质上基于 React 的 Context 特性实现,如果应用足够简单,实际上用 Context 手写一个简单的状态管理工具倒也并不难。不过,考虑到工具的完善性、项目的健壮性,通常采用较好的、成熟的社区方案。在移动端场景下,react-redux 略显臃肿,轻量级状态管理工具 zustand 倒是一个不错的替代方案。

了解更多

Web 前端性能优化:批量 DOM 操作 - FastDOM

利用 JS 开发的原生应用与依赖于 React.js/Vue 开发的框架/库应用,性能孰高孰低?这两者最显著的区别在于原生应用需要手动操作 DOM 完成业务,而框架/库应用是基于数据变化响应式的应用,后者只需要关注数据如何变化,至于体现在 DOM 上的变化皆由框架/库内部自动完成。所以,要搞清楚两者的性能优劣,可能批量的 DOM 操作是一个不可忽略的核心因素。从代码执行的角度分析,框架/库也是基于原生 API 进行的封装抽象,因此代码执行时的路径更长、堆栈更深,由此可见原生 API 的操作性能应该是最高的。但是,现实情况是业务通常来说是复杂的,代码实现中 DOM 操作的逻辑分散在各处,那么多个 DOM 操作之间是否会产生影响从而不利于性能?这个时候就要关注宿主浏览器的渲染机制是如何理解批量的 DOM 操作的,这里引入的概念就是关键渲染路径(Critical rendering path)

了解更多

Web 前端性能优化:案例分析 1

能在真实业务场景中落地 Web 性能优化方案的机会鲜有,大多数时候业务是较为简单而且要求不高的,前段时间恰好有一个比较核心的业务,对稳定性和性能有一定的要求,在这个过程中也算是做了很多尝试和实践,在此作为案例记录一下分析的过程和最终解决的方案。

了解更多

使用 Jest 和 Puppeteer 构建 Web 自动化测试平台

测试为软件的稳定和完善提供了必要的支持,Web 前端开发领域相比于做单元测试,端到端测试更有意义和价值。谷歌发布的 Puppeteer 工具和脸书发布的 Jest 测试工具为 Web 端到端测试提供了极大的便利,这里记录了如何使用它们构建一个 Web 自动化测试平台。

了解更多

Web 前端性能优化:核心概念与指标

说到 Web 的性能优化,可能很多时候我们采取了一些措施,看到了肉眼可见的改进,如果我们可以对其进行测量,确定我们改进的效率(百分比)是不是会更有意义?换句话说,如果我们了解性能瓶颈可能发生的位置,衡量用户体验好坏的指标,做到实时追踪性能变化,我们是不是可以更迅速的采取优化措施?在应用上线前,我们就可以做一些低成本而有高收益的优化工作,进一步提升用户体验。

了解更多

理解编程语言的设计与实现

编程语言本质上是给开发者使用的工具,不同的业务领域使用不同的编程语言去实现具体的业务,是基于语言本身的设计理念与实现方式来做选择,那么作为开发者应该了解一下编程语言是如何被发明的,且其设计理念是什么。

了解更多

Web 前端性能优化:解析函数节流与防抖的实现

前端开发中,有一个使用较为普遍的性能优化技巧,即函数节流(Throttle)和防抖(Debounce),其主要作用是根据时间对函数调用做以限制。最常见的业务场景是监听页面的 scroll 事件,浏览器可以在 1s 内触发该事件数次(甚至达数十次),如果事件处理程序在这 1s 内多次执行,必然会造成一定的性能问题,影响用户体验。

了解更多

IDE:VS Code 配置同步

利用一款插件来同步 VS Code 的配置到 GitHub 的 gist 上,实现多个设备间共享一套配置。

了解更多

Web 前端架构设计

让 Web 前端开发可持续化、可扩展,关注四个核心代码流程测试文档

了解更多

Web 应用:单页面应用与路由

现在,Web 技术不仅仅是局限于页面的开发技术,在应用的开发方面也是一种潮流,B/S 架构的技术是一种趋势。而像一般的管理型 Web 应用,不注重 SEO,非常适合单页面应用(SPA)的实现方式,而路由功能则是单页面应用的核心技术。

了解更多

单元测试工具:Junit

通常一个项目的代码量是比较大的,而且其中逻辑也较为复杂,在开发完成后再进行项目测试其实是比较耗费时间和精力的,因此边开发边测试是个很好的选择,而 JUnit 则为我们提供了这样的便利。

了解更多

JavaScript 异步编程

JavaScript 作为一门在 Web 开发中的主流语言,常常涉及到交互事件方面的应用,这不可避免的用到了异步编程的方法,而它本身则是单线程运行的。在以往的开发中,异步编程正变得越来越难管理,新的 Promise 标准 API 将使得异步编程更加方便、安全。

了解更多

使用 Git

Git 是一个分布式的版本控制工具,类似的版本控制工具还有 SVN ;由于 GitHub 平台的盛行,也使得 git 更加受欢迎,在 Windows 平台使用 git 也是非常方便的。

了解更多

Web 前端性能优化:工具与技巧

Web 前端的性能优化是非常迫切的,客户端的资源非常有限,而且层次不齐,很容易造成一些性能问题从而影响到最终给用户所呈现的数据信息结构的不完整。为了增强用户体验,我们必须在各个方面进行优化,同时也可以节省服务器成本。

了解更多

Web 前端跨域访问

为了用户的安全,浏览器通常都会限制跨域(Cross-domain)访问,也就是默认不允许不同域名下页面之间进行资源的传递和信息交互,但很多时候我们又有跨域请求资源的需求。

了解更多

块级格式化上下文(BFC)

在进行页面布局时,通常有流式布局、定位布局、浮动布局这三种形式。而在布局过程中,各元素之间的影响却是一个很关键的问题。

了解更多

HTTP 协议

随着 Internet 的发展,使用 Web 浏览器获取网络数据信息已经成为一种习惯标准,而 HTTP 协议也因此成为了网络体系中最重要的应用层协议。

了解更多

IP 协议

作为 TCP/IP 协议栈中最核心的协议,IP 协议为网络数据传输和网络互联提供最基本的服务。IP 协议有 IPv4 和 IPv6 两个版本,我们只讨论 TPv4 版本的 IP 协议。

了解更多

TCP 与 UDP 协议

传输层是网络分层模型中举足轻重的层,它是底层通信子网与高层资源子网的接口与桥梁,提供了面向连接的传输控制协议(Transmission Control Protocol,TCP)和无连接的用户数据报协议(User Datagram Protocol,UDP),负责提供端到端的数据传输服务。

了解更多

局域网(LAN)与广域网(WAN)

TCP/IP 的网络接口层包括物理层和数据链路层,既是局域网(LAN)技术起作用的分层,又是广域网(WAN)技术和连接管理协议发挥作用的层次。

了解更多

网络通信关键概念

计算机网络是通过通信设备与线路将地理上分散并且具有独立功能的计算机系统连接在一起,并由功能完善的软件来控制,进而实现资源共享的系统。从物理组成上来看,计算机网络包括硬件、软件和协议三大部分。计算机网络中结点间相互通信是由控制信息传送的网络协议及其他相应的网络软件共同实现的。在计算机网络通信中,有部分关键性概念需要理解透彻,在此做一总结。

了解更多

OSI 与 TCP/IP 参考模型

目前流行的两大网络体系结构是 OSI/RM 和 TCP/IP 参考模型,他们均是分层结构。分层是为了简化问题,降低网络设计复杂性,而且各层次结构相互独立,实现的功能也相对独立。层与层之间只在层间接口处关联,层间耦合最小。

了解更多

Web 本地存储

为了达到某些需求,我们通常需要在本地存储一些数据,方便我们进行用户个性化定制服务。

了解更多

DOM-加载 JavaScript

页面的动态交互离不开 Javascript,将 js 脚本引入页面时会阻塞页面加载,在某些时候我们则可以选择异步加载 js 脚本。

了解更多

DOM-文本节点

文本(Text)节点虽然很多时候我们直接用 innerHTML 去赋值替换,但当我们进行一些细微的修改时,了解一下 DOM 操作还是非常有用的。

了解更多

DOM-文档片段

DOM 操作是非常消耗性能的,如果要进行大量的 DOM 操作,我们可以选择在内存中先构建一个文档片段然后一次性插入 DOM 树。

了解更多

DOM-事件

JavaScript 的作用就是让 html 静态页面具备动态效果,而这些基本都是利用 DOM 事件来实现的。

了解更多

DOM-元素节点属性

元素节点上具有很多属性,这些属性我们通常可以很方便的获取,并进行简单的操作。

了解更多

CSS 清除浮动

在浮动布局中,有时候会因为父元素没有设置高度而子元素浮动导致父元素坍塌,我们就需要清除浮动撑起父元素的高度,在这里总结一下常用方法。

了解更多

DOM-元素节点几何量

当我们在查看 HTML 文档时,每个元素节点被解析后,都画成了可视形状。我们可以获取每个元素节点的几何量(宽、高、偏移量)以及页面滚动距离。

了解更多

编辑器:Sublime Text 常用插件

Sumblime Text 是一个具有漂亮的界面和强大功能的文本编辑器,而且也支持许多丰富的插件。它是一个收费软件,但是允许开发人员无限期的免费试用。这篇文章介绍一下常用的插件。

了解更多

编辑器:Sublime Text - Vim 插件

Sumblime Text 是一个具有漂亮的界面和强大功能的文本编辑器,而且也支持许多丰富的插件。它是一个收费软件,但是允许开发人员无限期的免费试用。

了解更多

DOM-节点集合

当从文档树中选取成组的节点或者使用预定义的节点集合时,这些节点都是放在 NodeList 或者一个 HTMLCollecton 之中,而不是一个数组(Array)中。

了解更多

DOM-选取元素节点

DOM 操作都是通过对文档树中节点的访问来实现的,如何选取特定的元素节点是关键,进而才能访问该元素节点实现修改、查看、移除、替换等操作。

了解更多

DOM-元素节点

可以说,元素节点是 DOM 树中的核心部分,我们进行文档的操作通常都是建立在元素节点上的。

了解更多

文档对象模型(DOM)

在网页设计中,有一个很重要的角色需要我们了解,DOM 帮助我们对页面元素进行增、删、改等全方位的操作,而且让 JavaScript 在客户端修改 HTML 文档成为一个很简单的事情,可以说 DOM 为我们操作 HTML 文档提供了强大的编程接口。

了解更多

浏览器对象模型(BOM)

在网页开发中,我们通常专注于内容的设计,而有些时候我们需要进行不同窗口之间的交互,这时候我们就需要学习如何运用 BOM 中的许多核心对象,及其属性、方法。

了解更多