JerryQu 的小站

Welcome to JerryQu 的小站

Latest articles

如何为 ThinkJS 3 网站优化 TTFB 时间

今年早些时候,奇舞团开源的 Node.js 框架 ── ThinkJS 迎来了她的 3.0 版本。尽管今年我很少更新博客,但「每次 ThinkJS 发布大版本,我都要更新博客程序」的老传统还是不能丢。所以,你现在看到的这个博客,已经是基于 ThinkJS 3 全面重构后的新版。 ThinkJS 3 基于 Koa 2.x 开发,内核实现得非常小巧,框架通过 Middleware(兼容 Koa)、Adapter、Extend 等机制来扩展出强大而丰富的功能。按照惯例,ThinkJS 大版本之间无法平滑进行,但这次升级带来的工作量不算太大,本站的升级工作花了一下午全部完成。 基于 ThinkJS 开发的网站普遍都很快,这篇文章我打算聊聊如何为 ThinkJS 3 网站优化 TTFB 时间,使之变得更快。...

本博客开始支持 TLS 1.3

几个月前,我在升级本博客所用 Nginx 时,顺手加上了对 TLS 1.3 的支持,本文贴出详细的步骤和注意事项。有关 TLS 1.3 的介绍可以看 CloudFlare 的这篇文章:An overview of TLS 1.3 and Q&A。需要注意目前 Chrome 和 Firefox 支持的是 TLS 1.3 draft 18,暂时不要用在生产环境。 安装依赖 我的 VPS 系统是 Ubuntu 16.04.3 LTS,如果你使用其它发行版,与包管理有关的命令请自行调整。 首先安装依赖库和编译要用到的工具: sudo apt-get install build-essential libpcre3 libpcre3-dev zlib1g-dev unzip git...

HTTPS 常见部署问题及解决方案

在最近几年里,我写了很多有关 HTTPS 和 HTTP/2 的文章,涵盖了证书申请、Nginx 编译及配置、性能优化等方方面面。在这些文章的评论中,不少读者提出了各种各样的问题,我的邮箱也经常收到类似的邮件。本文用来罗列其中有代表性、且我知道解决方案的问题。 为了控制篇幅,本文尽量只给出结论和引用链接,不展开讨论,如有疑问或不同意见,欢迎留言讨论。本文会持续更新,欢迎大家贡献自己遇到的问题和解决方案。 实际上,遇到任何有关部署 HTTPS 或 HTTP/2 的问题,都推荐先用 Qualys SSL Labs's SSL Server Test 跑个测试,大部分问题都能被诊断出来。 申请 Let's Encrypt 证书时,一直无法验证通过 这类问题一般是因为 Let's Encrypt...

开始使用 VeryNginx

VeryNginx 是一个功能强大而对人类友好的 Nginx 扩展程序,这是作者的原话。很久之前我就看到过这个项目,直到最近我才在本站试用了一把,确实好用,于是想通过本文把它介绍给更多人。 VeryNginx 主要由两部分组成:基于 lua-nginx-module 开发的 Lua 脚本,以及基于 HTML/CSS/JS 开发的 Web 控制面板 —— 用于生成和管理 Lua 脚本所需配置。 lua-nginx-module 能让 Lua 脚本直接跑在 Nginx 内部,比用 C 语言开发 Nginx 模块更容易上手,同时还能充分利用 Nginx 的非阻塞 I/O 模型,非常适合开发功能复杂、性能优异的 Web 应用。它也是大家熟知的 OpenResty 套件中一个最核心的模块。 VeryNginx...

iOS 10 Safari 视频播放新政策

随着 iOS 10 的正式发布,Safari 也迎来了大量更新,例如新增了对 ES6、CSP2.0、Shadow DOM 等功能和特性的支持。本文为大家介绍 iOS10 自带 Safari 浏览器在视频播放政策上的最新变化。首先划出重点:1)iOS 10 Safari 支持特定视频自动播放;2)iOS 10 Safari 支持视频内联播放。想了解更多细节的同学请接着往下看。 之前的政策? 在 iPhoneOS 3(没错,当时 iOS 还不叫 iOS)Safari 开始支持 <video> 标签时,苹果人为设置了很多限制,例如视频无法自动播放 —— 甚至连 Meta 信息预加载都被禁用。显然,这是为了避免给用户造成高额流量费用为作出的妥协,同时也能节省用户手机电量。 随着视频的普及,在...

开始使用 ECC 证书

我之前的文章多次提到 ECC 证书,但一直没有专门介绍 ECC 证书的文章,今天补上。本文包含三部分内容:1)简单介绍 ECC 证书是什么;2)介绍如何申请 ECC 证书;3)以 Nginx 为例介绍如何使用 ECC 证书。顺便说下,本站已经用上了 ECC 证书。本站主要用到的技术及主要支持的特性,请点击查看。 简单介绍 HTTPS 通过 TLS 层和证书机制提供了内容加密、身份认证和数据完整性三大功能,可以有效防止数据被监听或篡改,还能抵御 MITM(中间人)攻击。TLS 在实施加密过程中,需要用到非对称密钥交换和对称内容加密两大算法。 对称内容加密强度非常高,加解密速度也很快,只是无法安全地生成和保管密钥。在 TLS 协议中,应用数据都是经过对称加密后传输的,传输中所使用的对称密钥,则是在握手阶段通过非对称密钥交换而来。常见的...

HTTP Alternative Services 介绍

HTTP Alternative Services(HTTP 替代服务)是今年上半年由 IESG 通过的一项与 HTTP 有关的新协议。估计很少有人能从名字上猜出它是用来干嘛的,本文从解决了什么问题、如何使用以及真实场景下的应用三方面来介绍这份协议。 顺便说一下,HTTP 各种协议除了可以在 tools.ietf.org 找到,还可以前往 httpwg.org 查看。后者格式更丰富,阅读体验更好,例如本文介绍的 HTTP Alternative Services 协议也可以通过这个地址查看。 解决什么问题 在 Web 系统中,我们经常有把用户导向不同服务器的需求,例如让不同地域的用户访问离自己最近的服务器。记得我刚上网那会儿,很多网站都会提供电信 / 网通等不同二级域名,供不同运营商用户选择,这无疑增加了使用成本。当前,一般网站都使用...

谈谈 Nginx 的 HTTP/2 POST Bug

大概在三个月前,我发现在某些情况下,使用 Safari 无法登录我的博客后台。当时研究了一下,发现是 Nginx 处理 HTTP/2 POST 请求的一个 Bug。随后发布的 Nginx 1.11.0 解决了这个 Bug,我就没有持续再关注。直到今天看到 v2ex 这个帖子,我才发现 Nginx 并不打算把这部分代码合并到当前稳定版中。如果你在使用 Nginx 1.10.x 部署 HTTP/2 服务,请务必看完本文。 Bug 复现 复现这个 Bug 需要同时满足以下几个条件: 使用 Nginx 最新稳定版(当前为 1.10.1)部署 HTTP/2 服务; 使用特定的 HTTP/2 客户端,例如 OSX/iOS Safari、iOS 客户端、OkHttp 等(Chrome 没问题,MS...

开始使用 Docker

一年前,我在《开始使用 Vagrant》一文中写到:使用虚拟化软件安装 Linux,有着「统一线下线上环境、不受升级宿主系统的影响、容易备份和恢复」等几大优点,非常适用于搭建 WEB 开发环境。 但 Vagrant 这种依赖 VirtualBox/VMWare/Parallels Desktop 等软件虚拟完整操作系统的方案有几个硬伤,例如占用大量系统资源、新建或启动虚拟机不够迅速等。Docker 是操作系统级虚拟化,它虚拟出来的环境一般被称为 Docker 容器,而不是虚拟机。Docker 容器直接运行在宿主系统的操作系统内核之上,启动一个新的 Docker 容器能在一秒内完成。 由于 Docker 的轻量、快速和高效,除了搭建开发环境,Docker 容器也非常适合用来部署线上服务。最近我将本博客程序...

移动 WEB 通用优化策略介绍(二)

算起来已经足足两个半月没有更新文章,这段时间过得比较忙:夜间跑步计划、卖房买房以及工作上各种事情都凑到一块了。实际上,最近也并没有忙到完全抽不出时间写博客这种地步,根本原因可能还是变懒了,这样不好。 几个月前,我决定开始写一系列有关「移动 WEB 通用优化」的文章,介绍「面向所有主流移动端浏览器(包括各种 APP 嵌入的通用 Webview)」的前端优化策略,本文是这个系列第二篇。 先来回顾下上篇文章最后的结论: 重要的 CSS、JS、JSON 数据直接内联在 HTML 中,头部禁止出现任何外链资源。同时,尽可能减少页面传输体积。 采用了这个策略的页面,理应能让用户在很短时间内看到主体内容,因为头部 CSS 和 JS 都内联了,浏览器在渲染 HTML 时不会被阻塞。在我们的认识里,浏览器会异步加载页面用到的图片,加载图片不会阻塞页面渲染,更不会阻塞...

Discover, share and read the best on the web

Subscribe to RSS Feeds, Blogs, Podcasts, Twitter searches, Facebook pages, even Email Newsletters! Get unfiltered news feeds or filter them to your liking.

Get Inoreader
Inoreader - Subscribe to RSS Feeds, Blogs, Podcasts, Twitter searches, Facebook pages, even Email Newsletters!