在 Vim 中进行文件目录操作

Vim-Practice Vim 剪切板 寄存器 快捷键

很多时候我们希望在Vim中可以操作文件和目录,例如备份当前文件、 重命名当前文件、创建和删除旧文件、创建和删除目录等。 这些操作在Bash中当然可以很好地完成,但退出Vim会丢失光标位置、Buffer等信息, Harttle当然希望在Vim中完成这些操作。

本文介绍文件和目录的增删改查,同时编辑多个文件请参考这几篇文章:

编写浏览器和Node.js通用的JavaScript模块

浏览器 AMD CommonJS JavaScript Node.js 模块化

长期以来JavaScript语言本身不提供模块化的支持, ES6中终于给出了from, import等关键字来进行模块化的代码组织。 但CommonJS、AMD等规范已经被广为使用,如果希望你的JavaScript同时支持浏览器和Node.js, 现在只有这几种方式:

browserify几乎可以保证Node.js下测试通过的代码在浏览器中仍然能够正常使用。 但缺点也很显然:很容易产生冗余代码并生成一个巨大的JavaScript库。 对于微型的JavaScript工具,小心地编码再合适不过了!见下文。

JS实现无限划动的图片全屏浏览

Android jQuery 事件 滑动窗口 全屏

本文意在解释如何使用jQuery实现一个全屏的图片浏览, 并解释其中的加载策略,兼容问题,以及性能相关问题。 如果你需要在生产代码中使用,请直接搜索并使用既有的全屏浏览插件。

本文只探讨如何加载和划动全屏的图片,关于图片如何打开至全屏请参考: 全屏预览图片的动画和自适应布局

无限加载策略

既然是无限划动,就不能获取所有图片同时加载; 因为要有划动效果,因此当前图片的左右两张需要预加载。 所以可以用三张图片作为一个窗口,使用轮换策略来实现一个无限划动的列表。

<div class="lightbox">
  <div class="container">
    <div class="lightbox-item prev"></div>
    <div class="lightbox-item current"></div>
    <div class="lightbox-item next"></div>
  </div>
</div>

谨慎使用代码注释

封装 接口 算法 注释 重构

最令程序员头痛的事情莫过于阅读别人的代码,但其实时间一久阅读自己的代码也会很痛苦。 问题不是出在『自己或别人』,而是在代码本身。 必要的注释可以阐明实现细节和设计意图,以此节约自己和别人的时间。 然而很多时候注释起的作用却适得其反,比如自动生成的过多的注释分散阅读者的注意力, 而过期的失效的注释更是误导阅读者。

Express.js 性能优化

Express.js Chrome HTTP 缓存 性能

本文讨论如何提高Express在生产环境的性能,包括HTTP响应的压缩与缓存, 视图与样式的缓存,以及调试信息优化。

静态文件缓存

可通过缓存静态文件来提高页面载入速度,同时也减轻了服务器负载。 比如设置缓存时间为一天:

var app = express();
app.use(express.static('./assets', {
    maxAge: 864000  // one day
}));

常用MongoDB命令

JavaScript MongoDB 数据库

MongoDB与JavaScript天然的兼容性使得在Node.js下使用MongoDB及其舒服。 我们通常会使用类似mongoose的ORM工具来操作MongoDB。 然而手动查看数据库在很多场景下仍然很有用,例如Debug模型间关系,清空用户表,重置数据库。

本文列举了这些常用的MongoDB命令。MongoDB文档:https://docs.mongodb.com/

Mongoose 中实现虚拟字段查询

MongoDB mongoose Schema

mongoose为数据模型提供了虚拟属性, 借此可以更加一致地、方便地读写模型属性,类似于C#或Java中的访问器。 我们知道虚拟属性在Query阶段一定是查不到的,因为事实上MongoDB并没有存储这些属性。 但是否可以通过一个拦截器来实现虚拟属性的查询呢?

这个问题很有趣,而且在很多场景下都相当方便。例如:

  • 实现一个暴力的全文检索时,需要对多个字段匹配统一查询词,该查询词可抽象为虚拟属性;
  • 多处都需要进行同一个复杂条件的查询时,可以用虚拟属性封装该查询条件。

事实上,虚拟属性查询和虚拟属性读写都是为了代码复用。

上一页 下一页