hero image

Carson's blog

积跬步以至千里

electron + vite 脚手架介绍

GitHub - umbrella22/electron-vite-template - vue3 + Vite + electron项目模板

启动

配置 npm 及 electron 镜像,避免下载依赖因网络问题失败。

registry=https://registry.npmmirror.com/
# electron
ELECTRON_MIRROR=https://cdn.npmmirror.com/binaries/electron/
ELECTRON_BUILDER_BINARIES_MIRROR=https://npmmirror.com/mirrors/electron-builder-binaries/

大约 13 分钟electronelectronvite
滑动窗口算法及应用

算法简介

滑动窗口算法(Sliding Window Algorithm)是一种常见的算法,用于解决数组或字符串的子问题。它通过维护一个大小可变的窗口,对数据进行处理。这个窗口的左右两端方向一致的向前滑动(右端固定,左端滑动;左端固定,右端滑动)。在处理数据时,窗口会向右移动,直到处理完整个数据集。

该算法常用于求解子数组或子字符串的问题,例如最大子数组和、最小子数组和、最长连续递增子序列等等。其时间复杂度通常为O(n),是一种高效的算法。


大约 5 分钟算法
mitt 源码阅读笔记

mitt 是一个轻量级的 JavaScript 事件总线库,可以用于处理事件和消息传递。mitt 提供了一个简单而强大的 API,用于在程序中实现组件之间的松散耦合通信。

本文将探索 mitt 的源码,了解其实现原理。

了解 Event Emitter / Pub/Sub

在 JavaScript 中,事件发射器(Event Emitter)和发布-订阅(Pub/Sub)模式都属于行为型设计模式。

这两种模式都是用于在程序中实现组件之间的松散耦合,以便它们可以相互通信而不需要直接依赖彼此。这种松散耦合可以提高代码的可维护性和可扩展性。例如,Node.js 中的 EventEmitter 类是一个事件发射器的实现,而 RxJS 库提供了一个强大的发布-订阅模式的实现。


大约 16 分钟读源码event-bus
权衡的艺术

当设计一个框架时,其各模块间是相互关联和制约的。框架设计者需对框架的定位和方向拥有全局的把控,以便后续的模块设计和拆分。而作为学习者,学习框架时需要全局认知,否则会被细节困住。

设计框架时需要考虑的多个方面,包括范式的选择(命令式或声明式)、运行时和编译时的选择(纯运行时、纯编译时或运行时+编译时)以及权衡不同选择带来的优缺点。

命令式和声明式

从范式上看,视图层框架通常分为命令式和声明式,它们各有优缺点。框架设计者应该了解两种范式并尝试将它们结合起来,以做出正确的选择。

命令式框架一大特点就是关注过程(如 jQuery 是典型的命令式框架)。即自然语言描述能够与代码产生一一对应的关系,代码本身描述的是“做事的过程”,符合逻辑直觉。


大约 5 分钟Vue读书笔记
TypeScript 概述

TypeScript 能让代码更好地弹性伸缩,它开发的程序更安全(类型安全)。

类型安全:借助类型避免程序做无效的事情。

TypeScript 除了消除与类型有关的一整类问题之外,还彻底改变了编写代码的方式,先在类型层面规划整个程序,再深入到值层面。 在设计过程中考虑边缘情况,使程序更简单、运行更快,且更易于理解和维护。

编译器

程序由一些文件构成,并由编译器解析,转换成抽象句法树(abstract syntax tree,AST)。编译器把 AST 转换成一种称为字节码(bytecode)的低层表示。


大约 4 分钟TypeScript读书笔记
前端框架原理概览

始识前端框架

确定两个问题:

  1. React 是库(library)还是框架(framework)?
  2. Vue 号称是“构建用户界面的渐进式框架”,怎么样理解“渐进式”?

React 和 Vue 的核心:构建UI的库。由两部分组成:

  1. 基于状态的声明式渲染
  2. 组件化的层次结构

除此之外,还有其它功能:

  • 状态管理方案:应对复杂应用的状态管理(如 Redux、Pinia)
  • 客户端路由方案:SPA(如 React-Router、Vue-Router)
  • SSR:首屏渲染提速、SEO 优化

大约 15 分钟React读书笔记
pnpm 特性及基本使用

什么是 pnpm?

performant npm ,意味“高性能的 npm”。 快速的,节省磁盘空间的包管理工具。

特性概览

  1. 速度快

非扁平的包结构,没有 npm3+/yarn 复杂的扁平算法,且只更新变化的文件

  1. 高效利用磁盘空间

pnpm 内部使用基于内容寻址的文件系统来存储磁盘上所有的文件:


大约 10 分钟工程化pnpm
前端缓存与技术方案(上)

前言

缓存的合理使用可提升网页性能

什么是缓存(cache)?

缓存是计算机系统中的一种技术,用于临时存储经常访问的数据,以加快数据访问速度。缓存通常位于数据访问路径的中间,可以在数据访问时快速提供数据,而无需每次都从原始数据源获取数据。缓存可以是硬件或软件实现的,可以在多个层次上实现,例如浏览器缓存、操作系统缓存、CPU 缓存等。缓存的使用可以显著提高系统性能,减少对原始数据源的访问次数,从而减少系统资源的占用和延迟。

可以看出,缓存的重点在于访问速度快、性能高


大约 17 分钟基础缓存
前端缓存与技术方案(下)

HTTP 缓存方案

前端应用中的 HTTP 缓存方案

当访问单页应用(SPA)的首页时,浏览器率先加载的是 HTML 文件,后续再按需加载其它公共资源。刷新页面,可观察 HTML 资源是走的协商缓存,其它大部分资源都命中了强缓存。

因为像 JS、CSS 等资源经过像 webpack 这样的打包工具打包后可以自动生成 hash 文件名,资源变化会导致 hash 名更新。而 HTML 的文件名不会改变。

但我们期望浏览器每次加载时都应该向服务器询问是否更新。否则会出现新版本发布后,浏览器读取缓存 HTML 文件,会导致页面空白报错(旧资源被删除)或应用没有更新(读取了旧资源)的问题。


大约 20 分钟基础缓存
前端脚手架 CLI 方案探索

介绍

脚手架是工程化中的重要环节,用于新项目的启动和搭建,能帮助开发者提升效率和开发体验。

使用场景

脚手架自动生成项目的使用场景非常广泛,特别是在需要频繁创建新项目的情况下。以下是一些常见的使用场景:

  1. 新项目启动:当需要启动一个新项目时,可以使用脚手架自动生成项目的基础结构,包括目录结构、配置文件、依赖项等,从而加快项目启动的速度。

  2. 快速原型开发:快速创建一个原型,从而节省时间和精力。

  3. 统一项目结构:统一多个项目的结构和规范时,从而确保项目结构和规范的一致性。

  4. 项目模板定制:为不同的项目创建不同的模板,并根据不同的需求进行定制化,从而提高项目的可维护性和可扩展性。


大约 16 分钟工程化cli脚手架