0%

网易云音乐使用 next.js 框架优化体验开发记录

为什么要使用 next.js 呢?

因为使用 react 框架,开发出来的单页面富应用,是先从服务器请求下来 HTML、CSS、JS 文件,然后在客户端再进行解析。这样的话,会有一段时间的白屏,而且首屏加载速度很慢很慢,自己都受不了自己开发的项目速度这么慢了。本着要把事情做的更好的精神(其实就是受不了这么慢的加载速度),决定使用 next.js 框架对项目进行服务端渲染,加快访问速度。

使用客户端渲染时的性能分析:

从下图可以看出,在客户端渲染的情况下解析 HTML 和重新计算样式还有布局占用了很多的时间

阅读全文 »

this

为什么需要 this ?

来看一下下面两段代码

先看不使用 this 的

阅读全文 »

闭包

闭包一直是一个困扰初学者的一个问题,网上对闭包的各种定义和解释都大不相同,有的人说闭包很简单,也有的人说闭包很复杂,甚至在评论区 battle,这下可苦坏了初学者,该信哪个啊😢

其实我们可以看看《你不知道的 JavaScript》的作者对于闭包的理解:

阅读全文 »

hexo 主题切换样式问题及解决方法

在 hexo 不同主题直接切换的时候,上一个主题编译好的文件可能会影响到下一个主题的样式。原因就是因为使用了一个主题,这个主题的 css 样式会被引入到 public 的 css 文件夹中。

但是换了主题的时候,之前的主题编译的 css 还在 public 中,也就是说 hexo 只是更新了主题和重新编译了本地文件,并没有将重新编译的 public 文件更新到 github 的 page 页面上,所以造成了本地和线上的样式不一样。

阅读全文 »

手写 Promise/A+ 规范

所谓 Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。

想要写出 Promise/A+ 规范的 promsie,首先要熟读 Promise/A+ 的英文规范文档,建议先看几遍英文文档,了解一下规则。还有这篇中文文档翻译的也很到位 中文规范文档

阅读全文 »

作用域

编译原理

在传统编译语言的流程中,程序中的一段源代码在执行之前会经历三个步骤,统称为“编译”

  • 分词/词法分析(Tokening/Lexing)

    如var a = 2;。会被分解为:var、a、=、2 、;

  • 解析/语法分析 (Parsing)

    这个过程是将词法单元流(数组)转换成一个由元素逐级嵌套所组成的代表了程序语法结构的树。这个树被称为“抽象语法树” (Abstract Syntax Tree,AST)

阅读全文 »

从实际出发搞清楚react-router内部原理

[toc]

前言:最近在看 react-router 的工作原理网上看了一圈文章,发现很多都是介绍了 history 库的原理和 react-router 里面的 BrowserRouter 组件、Router 组件等等,看了原理是大概知道了,但是它的内部是怎么样的一个工作流程还是一脸懵逼,又在找了一圈资料,看完还是觉得具体流程理不太清。想到平时在 js 代码的调试中可以打断点观察各个变量的情况以及程序的流程,react 程序那应该也可以这样调试。

随后写了一个小 demo 测试一下:

阅读全文 »

使用 matery 主题搭建很好看的博客页面

因为最近看到一位腾讯大佬 一百个Chocolate 的个人博客,使用的也是 matery 主题,而且用了 中文文案排版指北 (简体中文版) 对博客文章进行排版,第一眼感觉非常惊艳,这样的博客看起来很舒服,所以自己也想向大佬看齐。

一下如无特别说明,以下配置文件都是 matery 主题下的 _config.yml

阅读全文 »

为hexo的next主题添加评论系统,就能在评论区和网友激情对线了[doge]

早就想为自己的博客添加一个评论系统了,能在评论区发表自己的所思所得,还能和网友激情对线,想想都刺激。

还要清楚的是,Valine 评论系统在 Next 主题高版本 (7.+) 以上已没有支持,且 Valine 已经很久没有更新维护了。不过,有大佬在 Valine 的基础之上开发了 Waline 。还有Gitment最新版next也不支持了。

这次,我们添加的是能够快速上手安装,配置更加人性化且带后端的 Waline 评论系统

阅读全文 »

深入源码探究memo、PureComponent

窥探PureComponent

今天学到了PureComponent,它可以起到在Component里面添加SCU的效果,虽然类组件以后会很少用,但是它的底层原理还是要了解一下,也能了解一下React不断进步背后的思想,PureComponent在React里面是怎么实现的呢,肘,跟我进源码(版本是16.3.1)。

这里安利一下vscode的Bookmarks插件,看源码是非常方便。

阅读全文 »

JavaScript: 手写 bind 和探索 bind 与 new 之间的关系

首先了解一下 bind 的定义

bind() 方法创建一个新的函数,在 bind() 被调用时,这个新函数的 this 被指定为 bind() 的第一个参数,而其余参数将作为新函数的参数,供调用时使用。

也就是说 bindapplycall 不一样,bind 是返回一个待执行函数,并且可以传入参数。来看一看 bind 的例子

阅读全文 »

JavaScript:call和apply的ES6和ES5实现

首先来看一下call和apply的定义和作用

**call() **方法使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数。

apply() 方法调用一个具有给定this值的函数,以及以一个数组(或类数组对象)的形式提供的参数。

总的来说,call和apply的区别就是参数的不同。

阅读全文 »