WordPress 背后的故事竟然是这样
原文链接:The Story Behind the New WordPress.com
译者:杰微刊-Leo Xu
一年半以前,我们对使用 WordPress 构建网站所需要采用的技术和开发流程进行大范围的重新思考。
现有的代码库和工作流程我们已经玩儿得很转了,但是10多年的历史遗留已经开始严重阻碍我们着手去构建用户所期望拥有的现代、快速并且对移动端友好的体验。看起来似乎开发者和设计师之间的协作还没有发挥出全部的潜力。所以我们曾经这样问自己:
“如果现在来构建它,那 WordPress.com 将会是什么样子的呢?”
新的开始:原型和迭代
我们以前问过自己这个问题,而且公正的分享了对那些并没有产生什么有用改变的举措的意见。回首过往,我们能指出自己最大的一些错误:一开始我们的视野就是一片泥泞,还要尝试去解决一个并没有定义好的问题。这些想法确实帮助了我们改变做法。

Calypso 最开始的原型界面之一,列出了你所有的 WordPress 站点。
Calypso,它是新的 WordPress 管理员界面项目的代号,它有一个同以往不一样的起步。为了呈现一个清晰的视觉效果,我们构架了颇具抱负性的 HTML/CSS 设计原型——它所基于的是定义清晰的产品目标——使我们可以想象得到新的 WordPress.com 在完成时看起来会是什么样子。我们已经向用户推出过一部分东西了,所以知道它应该会随着时间而发生些改变,但其视觉效果已经提供了所有 Automatic 旨在实现的东西,并且为此感到兴奋。
Calypso 设计原型一就位,开发伊始的那几天就都是要做一些诸如使用哪一种编程语言、要不要使用某种框架,还有就是会怎样去扩展API这样的艰难决定。Automattic刚刚已经收购了Cloudup,它是使用 JavaScript 构建的一个API驱动的文件共享工具。Cloudup 的团队向我们展示了一条坚实、可维护、可扩展的道路,这条道路将使 WordPress.com 完全基于 JavaScript 并且由 API 驱动。
由于 WordPress 是一个由 PHP 驱动的应用程序,所以我们在公司层面的开发技术设定历来都是重 PHP,还有一些高级的 JavaScript 技术。那时的这种现状使得 Calypso 在其开发的最开始的六个月令公司其他的工程师和设计师有点望而生畏——我们正在构建的是一个很少有人一开始就可以摸清门道的东西。
即使是 Calypso 项目核心的团队成员也得克服一些我们令其产生的畏难心理。因为我们谁都不是强大的 JavaScript 开发者。不过随着时间一天天的过去,经验会慢慢积累,我们犯下了错误就会审查这些错误,然后修复它们,并且得到了教训。我们一把这个项目玩儿转起来了,就可以更好的给其它的工程师做示范,并且在全公司分享我们所学到的知识。
其中一个很大的变化发生于我们在构建一个早期的设计原型时:我们使用 GitHub 改善了协作能力。Calypso 设计原型的工作是由 GitHub 上一小撮设计师之间的分工协作来完成的。尽管我们中的许多人都长期在个人项目中使用过 GitHub,但对于内部项目而言它相对还是新的事物,因为在内部项目中历来是将 Trac 用于大部分的项目管理和 Bug 跟踪工作。GitHub 的使用让我们发现内部的分工协作可以如何变得更加容易,还有就是如何让个人的工作在完成时能有更强的意见反馈。
同行代码审查没有显示任何放缓的迹象,而且现在已经被广泛的接受。
鉴于 GitHub 在原型设计阶段的表现如此出色,所以我们在 Calypso 所有的开发工作中都采用了它,这使我们能利用其Pull Request(PR)系统来进行同行代码审查,并且建立起我们自己定制的基于 GitHub 的工作流程。代码申请对于许多开发者来说是新事物——Automattic 的传统中,在VIP团队的客户端网站日常代码审查之外,我们是没有系统性的同行代码审查系统的。代码审查,即使它在最开始助长了在 Calypso 的开始阶段人们的畏难情绪,但它还是极大的提升了我们的代码库的质量,并且帮助了每个人提高他们的 JavaScript 技术水平。
一个7人的团队在 Calypso 上所做的初始工作迅速地扩大到了10个人的团队,然后是14个人,接着就有 20 个Automattic 员工积极地为 Calypso 代码库工作。在第一个由 Calypso 驱动的功能特性在 WordPress.com 上推出的两个月之后,我们就有了来自于5个不同团队的40位贡献者工作于 Calypso 项目。我们在“尽早发布、常发布”的 Automattic 思维模式下将项目迭代到了下一年,在 WordPress.com 上推出了40个由 Calypso 驱动的各种功能特性,个人贡献者超过了100个人。
到了2015年中期, Calypso 的代码库的形态好到足够能被应用到浏览器之外的领域。因为 Calypso 完完全全就是一些 JavaScript、HTML还有CSS,所以利用一种轻量级的 node.js 服务端设置就能在终端设备上本地运行。利用一种被叫做 Electron 技术,我们构建了原生的桌面客户端,在它上面运行的是捆绑到应用程序中的相同的代码。我们开始了打造首个运行在原生 Mac 上的桌面应用的工作,目前已经可以使用了,而且接下来就继续着手即将要推出的 Windows 和 Linux 应用的工作。看到这些应用的一起到来,并且能在内部将它们利用起来,才真正证明了一切我们所花在构建 Calypso 代码库上的辛勤工作。
开放源代码的 Calypso, WordPress.com 背后的驱动力
一个目前在建的我们的 Calypso 开发者的好去处,还有就是 IO 团队,是他们构建了 Calypso 编辑器,这是他们在10月份全公司大聚会上的合影。
在过去的一年半时间中,Calypso 已经历经从一个想法变成有抱负性的一个原型设计,再成为一个功能完整的产品构建,反复迭代,并且为数以百万计的 WordPress.com 用户所使用。 在内部,这段时间已经成为了一个发生过重大变革和成长的时期。我们已经借助 GitHub拥抱了跨团队的协作方式,并且通过 PR 审查系统实现了同行代码审查,摆脱了只有几个不错的 JavaScript 开发者在公司的现状,并且在日常中看到了设计师和开发者之间展开令人难以置信的协作。
方便向你展示老的和新版 WordPress.com 之间差异的表格。
对于能将所有投入的辛勤工作开放源代码,我们感到很荣幸,并且会继续以开放的方式在产品上进行构建。你可以在我们的CEO Matt Mullenweg 的网站上了解到更多有关于开放 Calypso 的开发工作的东西。
在接下来的几个月内,我们将发布更多深入探讨 Calypso 背后所采用的技术和工作流程的帖子: 我们是如何管理自己独立的 GitHub 工作流程的,我们如何利用其它的像React 这样的流行的开源库,以及像 Flux 这样的概念,还有就是我们捆绑和推出原生应用客户端的相关经验。同时你也可以检出我们的这个活跃的 Calypso 库,因为我们将会继续在它上面进行迭代。
WordPress 背后的故事竟然是这样的更多相关文章
- printf背后的故事
printf背后的故事 说起编程语言,C语言大家再熟悉不过.说起最简单的代码,Helloworld更是众所周知.一条简单的printf语句便可以完成这个简单的功能,可是printf背后到底做了什么事情 ...
- Flappy Bird背后的故事
更多有价值的互联网文章:晓煦分享(http://www.ihuxu.com/share) 由越南游戏工程师阮哈东(Nguyen Ha Dong)开发的Flappy Bird这款游戏,画面不算精致且看起 ...
- 更好的 java 重试框架 sisyphus 背后的故事
sisyphus 综合了 spring-retry 和 gauva-retrying 的优势,使用起来也非常灵活. 今天,让我们一起看一下西西弗斯背后的故事. 情景导入 简单的需求 产品经理:实现一个 ...
- 背后的故事之 - 快乐的Lambda表达式(一)
快乐的Lambda表达式(二) 自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜.它优雅,对开发者更友好,能提高开发效率,天啊!它还有可能 ...
- 背后的故事之 - 快乐的Lambda表达式(二)
快乐的Lambda表达式 上一篇 背后的故事之 - 快乐的Lambda表达式(一)我们由浅入深的分析了一下Lambda表达式.知道了它和委托以及普通方法的区别,并且通过测试对比他们之间的性能,然后我们 ...
- ASP.NET Web API自身对CORS的支持: EnableCorsAttribute特性背后的故事
从编程的角度来讲,ASP.NET Web API针对CORS的实现仅仅涉及到HttpConfiguration的扩展方法EnableCors和EnableCorsAttribute特性.但是整个COR ...
- DbUtility v3 背后的故事
DbUtility v3 背后的故事 时间 DbUtility v3构思了差不多大半年,真正开发到第一个版本发布到NuGet却只花了50天.中途大量时间在完善 Jumony 3,只有三周来开发DbUt ...
- using关键字背后的故事!
using关键字的作用: 1:可以引入命名空间2:可以释放资源 *****不能使用using语句完全替换掉(try-catch-finally)语句(无法进行异常处理) 在出了using语句的{}后, ...
- Mac OS X 背后的故事
Mac OS X 背后的故事 作者: 王越 来源: <程序员> 发布时间: 2013-01-22 10:55 阅读: 25840 次 推荐: 49 原文链接 [收藏] ...
随机推荐
- MySQL导出数据时提示文件损坏
使用Navicat工具,优先将整个数据库的表和数据导出. 如果遇到文件损坏错误可以在表实例界面选中所有表,然后将表转储为SQL文件(结构和数据). 在目标数据库执行导出的SQL文件,导入结构和数据. ...
- Are You Ready……Go?
Are You Ready……Go? 2019-11-01 12:03:10 Problem 你……到底有没有想好要干什么? 又是期中考试,又是CSP,怎么抉择? 未来太渺茫? 我不知道我到底想要什么 ...
- input清空和重置select下拉框
背景 一般页面搜索条件都会有input输入框和select选择框,同时页面上都会有重置reset按钮,这时就需要清空input和重置select 实现 清空input 清空单个input: $(&qu ...
- 深度优先搜索DFS---全球变暖
内心OS:这道题是去年准备HD复试时,我用来练习DFS的.现在再做这道题,感触颇深,唉,时光蹉跎,物是人非啊~~ 题目: 你有一张某海域NxN像素的照片,”.”表示海洋.”#”表示陆地,如下所示: … ...
- 01、模拟ATM机界面程序
一.概述 设计一个简单的模拟自动取款机ATM界面的程序,实现用户登录及取款等功能. 二.需求分析 (1)模拟自动取款机ATM界面,有常用功能. (2)主要功能包括;用户输入密码登录主界面.取款功能.取 ...
- 小白的java学习之路 “ 二重循环”
二重循环: 1.什么是二重循环: 一个循环体内又包含另一个完整的循环结构 语法: while(循环条件1) { //循环操作1 while(循环条件2) { //循环操作2 } } do { //循环 ...
- 3个N加上各种运算符号结果等于6(纯属娱乐)C#
网上的题目: 题有点难 但都有解 2 2 2 = 6 3 3 3 = 6 4 4 4 = 6 5 5 5 = 6 6 6 ...
- C语言->关于文件数据的录入和输出调用的函数总结
数据输入输出对象之间的关系图: 函数使用说明: 1.一个字符的输入\输出,对象是键盘(缓存和屏幕) 1.1.getchar(a),putchar(a); 1.2.scanf(“%d”,&i), ...
- javascript 权威指南1
JavaScript是面向web的编程语言 web(World Wide Web)即全球广域网,也称为万维网,它是一种基于超文本和HTTP的.全球性的.动态交互的.跨平台的分布式图形信息系统.是建立在 ...
- 洛谷 P4708 画画
题意 在所以置换下,本质不同的各个极大连通子图均含有欧拉闭迹的\(n\)阶图个数 做法 务必先做完这题再看此题解,因为会省略大部分分析了 仍是从边入手,隔外限制:各个点度数是偶数 某个因子内\((m= ...