Atom 开发团队如何提升性能?
本文介绍了 Atom 开发者如何提升这款编辑器的性能,相当于 Atom 团队写的一篇 2017 的年终总结。
- Atom 使用 JS 编写,求快求更强大的扩展,但相对的也更容易遇到性能问题。他们使用了 V8 引擎的新特性:custom startup snapshots,它可以让一些 Atom 的启动时间转换到编译时,其中最重要的提升可能是堆中的对象依赖图也能在编译时就构建好。相应的,这项改进引入了一些规约,例如启动时不能搞 DOM 操作,所以他们重构了不少代码。
- 打字延迟不能忍啊。他们的做法是引入跟 React 有点像的库 etch:搞 DOM 操作的时候渲染依然没啥问题。另外,对批量文字变更做优化。
- 用 C++ 写扩展做大文件的缓存加载,数据结构选用 Piece Table。
衍生思考:性能优化万变不离其宗:用空间换时间 …
read more学习 Linux 的一些有用的资源
本文列出了学习 Linux 的一些非常有用的资源。
- Linux 发行版的 Wiki: Red Hat Enterprise Linux, CentOS wiki, Arch Wiki, Gentoo Linux Wiki, Ubuntu Wiki, IBM Developer Works, FreeBSD Document & Handbook
- 文档: Bash Hackers Wiki, Bash FAQ, OpenBSD FAQ, Howtoforge, Slackware Book Project, The Linux Documentation Project(TLDP), Catonmat
- 书: Advanced Linux Programming, Linux Sea …
找不到 Bug 什么时候引入的肿么办?git bisect 来拯救!
git-bisect
一个用二分法帮你找到 bug 的 git 内置工具。它的基本原理是标记提交日志的两头一边好,一边坏,它帮你跳到正中间的提交,让你来标记是好的还是坏的,如此往复直到找到那个点,这个流程正是二分法。它的使用方法如下:
git bisect start
: 开始git bisect bad
: 标记当前是引入了 bug 的提交git bisect good v0.1.0
: 标记 v0.1.0 标签对应的提交还没有引入 bug- 这时候 git-bisect 会自动跳转到 v0.1.0 ... HEAD 正中间的那个提交
git bisect bad
: 继续标记,直到找到拐点git …
Unix 文档风格为什么是这样子?
Unix 文档使用 Markup 语言编写,并编译为最终的格式。它不同于 WYSIWYG 风格的文档。
- 原因
- WYSIWYG 风格的编辑器在业界早期不多,大家都用 Markup 语言写文档。
- 屏幕上看到的其实往往和打印出来的还是有区别,也算是无法解决的硬伤。
- 再往深了说,GUI 下面藏着的其实还是 Markup 语言标记的文档,但又把这些细节藏起来。
- 早期的 Unix 文档标记其实没有人分得清什么是 展示性的标签,什么是 结构性的标签。区别在于一个搞样式,一个搞内容组织。
- Markup 语言如果提供了宏机制,让你可以封装功能性的需求,那么你就越来越可以专注于内容。
衍生思考:时代在进步, WYSIWYG 编辑器也在不断改良,但它的核心依然是 Markup 语言这个没有改变。大量程序员们写技术文档依然更偏爱 Markup。
read morePython py_compile 文档阅读
py_compile
是 Python 的一个标准库,它用于编译源代码为 byte-code。粗看起来似乎没什么场景,但其实,总是会有使用场景的:Python 源代码需要转为 pyc 文件被执行,若是终端用户没有文件系统的写权限,酱紫就写不粗来 pyc 文件,也就运行不了代码了。
这个模块最重要的方法是 py_compile.compile(file)
,它编译源代码,并输出到 pyc 文件去。例如 /path/to/my_vanilla.py
会被编出 /path/to/__pycache__/my_vanilla.cpython-36.pyc
酱紫的文件。
py_compile.main()
也可直接在命令行被调用:
$ python3 -mpy_compile ./my_vanilla.py
$ ls ./__pycache__.py …