重新阅读Vue源码

发表于 | 分类于 源码分析/Vue

最近一直在折腾React源码,后来发现有必要重新阅读Vue的源码,从设计思想和底层实现上了解两种框架的差异,因此有了这一篇文章。

实现一个简易的React

发表于 | 分类于 技术原理

前两周一直在学习React源码,发现通过断点观察代码运行流程来理解React源码并不是一个很好的方法:

  • 由于需要支持ReactDOM、SSR、React Native等,React源码抽象程度比较高,分支较多,且函数调用栈也很深
  • React引入的Fiber Reconciler优化diff流程,内部使用了很多状态码和全局变量
  • 我的React开发经验有限,有些API并不是十分熟悉

虽然艰难地将大概看了一些源码,却觉得收获较少,因此决定整理React内相关概念,并手动实现一个简易的React框架,从而更深入地学习React。

webpack折腾记(四):性能优化

发表于 | 分类于 前端/前端工程

之前接手的一个旧项目,使用的是roadhog + dva + antd等技术,里面大概有上百个路由文件,其他model、组件等文件也不少,导致整个项目的模块文件非常多,热更新和打包都速度都比较慢,输出代码体积也很大。基于这个问题,本文整理webpack常用的一些优化手段。

如何绕开referrer防盗链

发表于 | 分类于 前端/前端业务

最近处理了一个与referer有关的需求,发现里面还是有一点门道的。因此在本篇文章整理了referer相关知识点,主要涉及图片防盗链与如何绕开防盗链限制。

Preact技术栈:router和redux

发表于 | 分类于 源码分析/Preact

上篇文章中对Preact源码进行了分析,了解了Componentrenderdiff等核心方法,以及页面渲染的大致流程。在这一篇文章中,将分析preact-router的源码实现,并了解在Preact项目中使用react-redux的方法,构建一个完整的web应用。

Preact源码分析

发表于 | 分类于 源码分析/Preact

最近打算学习React源码,发现了一个简易版的框架Preact,且与React的API比较相似,因此决定先看看它的代码。

基本的数据结构

发表于 | 分类于 数据结构和算法

最近一直在letcode上刷数据结构和算法题,因此博客更新比较慢。本文主要整理这段时间学习到的基本数据结构,和一些常见的问题解法。

前端大文件上传

发表于 | 分类于 前端/前端业务

最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现。

实现一个简单的编译器

发表于 | 分类于 技术原理

在前端开发中也会或多或少接触到一些与编译相关的内容,常见的有

  • 将ES6、7代码编译成ES5的代码
  • 将SCSS、LESS代码转换成浏览器支持的CSS代码
  • 通过uglifyjs、uglifycss等工具压缩代码
  • 将TypeScript代码转换成JavaScript代码
  • Vue模板语法转换成render函数、JSX语法转换成JS代码

尽管社区的工具如bable*-loader已经帮我们完成了上面的所有工作,我们不用关心编译的过程,甚至也很少有人关注输出的代码,但是了解编译原理还是很有必要的,这篇文章主要用来记录我在学习编译原理时整理的一些笔记。

在开发环境下使用nginx重写uri及代理功能

发表于 | 分类于 网络

这篇文章整理了在前端开发中,在开发环境下使用nginx重写uri及代理功能的方法。

学习Typescript

发表于 | 分类于 编程语言/TypeScript

最近用TypeScript写了一个游戏,顺道把博客的后端项目也改成了ts版本,下面整理在学习TypeScript时遇见的的问题。

如何让网站加载速度变快

发表于 | 分类于 前端/前端工程

从刚学前端开始就开始折腾博客,一直在尝试如何让博客访问变快,本文总结了一些从前端的角度让站点打开速度变快的方案。

封装Vue组件的一些技巧

发表于 | 分类于 前端/Vue

写Vue有很长一段时间了,除了常规的业务开发之外,也应该思考和反思一下封装组件的正确方式。以弹窗组件为例,一种实现是在需要模板中引入需要弹窗展示的组件,然后通过一个flag变量来控制弹窗的组件,在业务代码里面会充斥着冗余的弹窗组件逻辑,十分不优雅。

本文整理了开发Vue组件的一些技巧,包含大量代码示例。

HTTPS原理

发表于 | 分类于 网络

HTTP使用明文发送报文,本身不具备加密的功能。这在危机四伏的互联网中是十分危险的。

在阅读了《图解HTTP》第七章之后,整理了一些关于HTTPS的内容,主要内容就是理解HTTPS的原理和工作机制。

Flutter基础知识

发表于 | 分类于 客户端/Flutter

最近准备为组里面的小伙伴分享flutter相关的知识,因此对flutter进行了一些整理,主要包括widget、路由、状态管理,以及一些常见的需求处理方案。

《React设计模式与最佳实践》读书笔记

发表于 | 分类于 读书笔记

《React设计模式与最佳实践》这本书是去年双11的时候在图灵社区入手的了,趁着周末看了一遍,对于了解React基础知识,以及编写React组件,还是能学到一些东西的,下面是整理的随书笔记。

Dart基础知识

发表于 | 分类于 编程语言/Dart

写了挺长一段时间的flutter,却没有系统地学习dart,因此这里整理一下dart语言的基础知识。

理解数据状态管理

发表于 | 分类于 技术原理

在传统的web应用中,用户和数据的状态更多地放在服务端,每一个页面的状态都在路由切换后重新从服务端拉取即可,前端并不需要过多地考虑数据状态的管理。随着单页应用的逐渐发展,前端需要管理越来越多的数据:数据的更新会导致UI的变化,UI的交互会触发数据的更新,多个页面之间可能会共享相同的数据,随着应用的的规模增大,维护起来会十分麻烦。

这篇文章主要整理下几种管理前端数据状态的方案,以及进一步思考其背后的实现和意义。

如何在代码中打日志

发表于 | 分类于 编程技术

之前对于代码中的console.log一直是比较嫌弃的,以致于提交代码前一般会通过eslint检测是否包含了log输出。

最近一直在处理一个chrome插件的需求,需要打开某个url标签页,然后根据预先设定的操作行为,在页面上进行一些列操作(点击选项卡、选择日期、输入参数等),然后等待页面生成报表,实现自动下载的流程。整个过程较为繁琐,很不方便调试,在开发中使用了大量的console追踪页面的状态和操作行为的结果,逐渐认识到:日志应该是开发和调试中很重要的一环。因此在这里整理一下“如何在代码中打日志”的问题。

关于移动端跨平台框架的了解与思考

发表于 | 分类于 客户端

之前移动端是Web、Android和iOS三分天下,后来微信小程序加入战场,再后来又出了快应用支付宝小程序头条小程序等平台。前端跨端貌似成为了越来越主流的开发方案。

在之前的项目和学习中,也或多或少使用过一些跨端框架,这里整理一下我对于目前几种跨端开发方案的了解及思考。