简介 将源自 Robert C. Martin 的 Clean Code 的软件工程原则适配到 JavaScript 。 这不是一个代码风格指南, 它是一个使用 JavaScript 来生产 可读的, 可重用的, 以及可重构的软件的指南。 这里的每一项原则都不是必须遵守的, 甚至只有更少的能够被广泛认可。 这些仅仅是指南而已, 但是却是 Clean Code 作者多年经验的结晶。 我们的软件工程行业只有短短的 50 年, 依然有很多要我们去学习。 当软件架构与建筑架构一样古老时, 也许我们将会有硬性的规则去遵守。 而现在, 让这些指南做为你和你的团队生产的 JavaScript... 阅读全文
Script 标记的 defer 和 async 属性可能会显著影响页面加载的性能, 总结说明一下。 没有标记 defer 或 async 时 浏览器立即停止 HTML 渲染,同步获取并执行脚本文件, 然后再继续渲染后续的 HTML 内容。 <header> <script src="app.js"></script> </header> 除非特殊情况, 一般不采取这种做法。 标记 defer 时 异步获取脚本, 不会停止 HTML 渲染, 在 DOM 事件 domInteractive 之后, 开始执行脚本,... 阅读全文
理解组件包含 包含组件就是指可以包含其它组件的组件, 以 Bootstrap 的卡片 (Card) 为例, 它包含页眉 (header) 、 主体 (body) 和 页脚 (footer) , 如下图所示: <div class="card text-center"> <div class="card-header"> Featured </div> <div class="card-body"> <h5 class="card-title">Special title treatment&l... 阅读全文
两年前, 写过一篇使用 rollup 来为生产环境编译 Angular 2 应用的文章, 因为当时还没有 angular-cli 项目。 而如今 Angular 已经到了 7.x 版本, 对应的工具也是非常的完善, 也就不在使用 rollup 来处理 angular 项目。 angular-cli 用起来虽然方便, 但是针对生产环境编译的话, 还是有一些地方要注意的, 接下来就介绍我在项目部署时的一些做法。 合理拆分功能模块, 按需加载 一个系统往往功能非常多, 因此就要根据项目的实际情况划分功能模块,一个功能模块对应一个 NgModule , 编译成一个独立的 js 文件, 再结... 阅读全文
Snow Flake ID 算法简介 Snow Flake 是 Twitter 开源的分布式 ID 生成算法,结果是一个 long 型的 ID。其核心思想是: 使用 41bit 作为毫秒时间戳; 10bit 作为机器的 ID ( 5 个 bit 是数据中心,5 个 bit 的机器 ID ); 12bit 作为毫秒内的流水号(意味着每个节点在每毫秒可以产生 4096 个 ID ); 最后还有一个符号位,永远是 0 。 如下图所示: Snow Flake ID 算法的优点是: 所有生成的 id 按时间趋势递增(时间戳), 方便排序; 整个系统内不会... 阅读全文
NHibernate 最近发布了 5.1.3 版本, 支持 .NET Standard 2.0 , 这意味着可以在 .NET Core 2.0 应用中使用, 本文就已 WebAPI 应用为例, 介绍一下如何在 .NET Core 应用中如何使用 NHibernate 。 1、 新建一个基于 .NET Core 的 Web API应用, 命令如下: mkir WebApiTest cd WebApiTest/ dotnet new webapi 2、 添加 NHibernate 包以及对应的数据库驱动程序(以 Npgsql 为例): dotnet add pakcage NHi... 阅读全文
关于 DataX DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。 如果想进一步了解 DataX ,请进一步查看 DataX 详细介绍 。 关于增量更新 DataX 支持多种数据库的读写, json 格式配置文件很容易编写, 同步性能很好, 通常可以达到每秒钟 1 万条记录或者更高, 可以说是相当优秀的产品, 但是缺乏对增量更新的内置... 阅读全文
ASP.NET Core 已经发布了 2.0 RC1 (Go Live) 版本, API 已经不在变化, 但是很多人期待的已久的在虚拟目录中部署的功能还是没有出现, 看来只能自己想办法解决这个问题了。 由于 ASP.NET Core 有自己的服务器进程 (kestrel) , 在部署时通常是采用反向代理转发的形式, 对于应用服务器的集成上, 不如传统的 ASP.NET 应用那么友好, 比如在应用服务器的虚拟目录中部署, 一直没有很好的方案。 ASP.NET Core 有一个 UsePathBase 扩展方法, 使用一个中间件向当前 http 请求中添加或者移除根路径 (Pathbas... 阅读全文
健康检查 (HEALTHCHECK) 指令简介 健康检查 (HEALTHCHECK) 指令告诉 Docker 如何检查容器是否仍在工作。 它能够监测类似一个服务器虽然服务进程仍在运行, 但是陷入了死循环, 不能响应新的请求的情况。 当一个容器有指定健康检查 (HEALTHCHECK) 时, 它除了普通状态之外, 还有健康状态 (health status) 。 健康状态的初始状态是正在启动 (starting) , 一旦通过了一个健康检查, 它将变成健康 (healthy) (不管之前的状态是什么), 经过一定数量的连续失败之后, 它将变成不健康 (unhealthy) 。 健康... 阅读全文
Ubuntu 17.10 发布已经有一段时间了, 终于下定决心全新安装, 安装系统容易, 下载 iso 直接安装即可, 安装之后要配置自己习惯的桌面环境确需要不少的时间。 下面是安装后基本的折腾记录。 如果电脑是 EFI 启动的, 只需要把 iso 的内容复制到 U 盘根目录即可启动, 不需要在费心的去格式化做什么启动盘了, 真是省心! 清理不用的软件 删除 firefox , 因为我用 Chrome : sudo apt remove --purge firefox 删除亚马逊链接, 不知道为什么, Ubuntu 的所有版本中都有这个, 还不如给老马家带个链接有... 阅读全文
微软发布 .NET Standard 2.0 已经有一段时间了, 根据 .NET Standard 2.0 支持版本的文档, Mono 5.4 是支持 .NET Standard 2.0 的, 对于 .NET Standard 2.0 应用的开发的介绍, 几乎全部都是在 Windows 系统下使用 Visual Studio 2017 进行的, 而在 Linux 或 macOS 系统下使用 Mono 的介绍缺却少之又少, 本文就一一个简单的控制台应用为例, 介绍一下如何在 Mono 下如何开发 .NET Standard 2.0 应用。 由于 Mono 下没有内置 .NET Sta... 阅读全文
在 Docker Entry Script 详解中介绍了如何在 shell 脚本中响应 Unix 信号量来实现 Docker 应用优雅的关闭退出, 本文介绍 C# 程序如何在 Docker 中响应 Unix 信号实现优雅的关闭退出。 因为用 Mono 编译出来的程序可以完美的在 Linux/Docker 下运行, 所本文以 Mono 5.4 做为开发环境, 对应的 .Net Framework 版本为 4.6.1 。 假设现在需要运行一个定时任务的程序, 每隔一定时间输出一个 hello, world! ,我们使用 Quartz.Net 来完成这个任务, 代码如下所示: 首先来定义... 阅读全文