请访问wangEditor官网:www.wangEditor.com

---------------------------------------------------------------------

1. 为什么要做富文本框?

  一说到web富文本编辑器,很多人的印象就是网上一搜一大把,恨不得扔个砖头都能砸一片。不错,确实一搜一大把,但是真让你说一下名字,你能说出几个来?——估计没多少吧?国外的就不用说了,文档看不懂,更新不更新还不知道,有bug也不好调试。国内做的比较好的我知道有百度的UEditor和kindEditor。

  但是这两个也有它的缺点:界面过于复杂、不够简洁、UI设计也比较落后、不够轻量化……

  因此,我要做一个最简单易用的富文本编辑器。于是乎在2014年11月,我推出了开源富文本编辑器——wangEditor

  1. 下载地址:https://github.com/wangfupeng1988/wangEditor
  2. demo演示:http://www.libre-free.com/interface/wangEditor-master/demo.html (借用好心网友的服务器,感谢他的支持)

  

2. 产品如何定位?

  一个产品推向市场,势必会面临着用户和竞争对手,如何让用户使用自己的产品而不用竞争对手的产品,这是必须要考虑的问题。

  我们先说一个我在日常工作中常挂嘴边的一个词——2/8原则。大家应该都听说过这个东东,2/8原则符合这个社会的任何环境:国家20%的人拥有80%的财富、公司20%的人创造80%的业绩、软件20%的功能满足80%的需求……

  同理,对于富文本编辑器来说,也是20%的功能满足80%的需求,剩下的80%的功能只是为了那20%的需求。我要做的就是这20%的功能,去满足大家80%的需求。如果你想要大而全富尔美,那么wangEditor满足不了你(这会让你付出很多代价);如果你想用最快的方式满足你最主要的需求,那就请使用wangEditor。

  因此,wangEditor的定位是做最简单、易用、快捷、轻量化的富文本编辑器我要把这20%的功能做精致,把UI设计的更加简洁漂亮,让你一看就很舒服。

  wangEditor使用教程如下:https://github.com/wangfupeng1988/wangEditor#1-%E4%BB%8B%E7%BB%8D,应用非常简洁,大家可以去看看。

  不要以为做简单了就没人用。大家对Visual Studio、Eclipse有需求,但是editplus这种轻量级的软件,你就不用了吗?

3. 一次被喷

  我为wangEditor创建了一个QQ群(群号:164999061,欢迎大家加入),现在里面只有40多个人。我本身也不大喜欢聊天,上班时候工作,下了班就看书、写代码、写博客,也没有到处去推广该群,因此人少了些。

  去年,忘记什么时候了,反正是wangEditor还是第一版(还依赖于bootstrap2.0)的时候,有一个哥们在QQ联系我说要和我通过github合作开发,然后我很高兴的同意了。结果他看了我的源码,说我的代码写的不够优雅(对,就是“优雅”这个词),说这种小儿科的东西高手分分钟就可以做出来,要给我重构。我说你要给我重构,你自己做一个不就完了吗?后来俩人胡扯乱扯的扯了好多。最后他在群里丢下两句很鄙视我的话,就退群而去了。

  我今天在群里翻看了好一会儿,想找到当时他说的啥,截个图给大家看看。可是沉底儿好久了,我期间也换了手机,找不到了。大体意思就是:这个产品也就是写着玩玩,这种代码小儿科根本上部的厅堂,根本不能用……

  当时我也没有生气。因为这个东西毕竟是面向用户的,一个用户一个口味,任何一个产品都不可能得到所有人的赞同。如果有10000个人喜欢你,至少也得有2000个人在骂你。后来群里有好心人安慰我:不要理喷子,继续努力……

  的确,我没有理会他,而是继续优化代码、重构、再重构。我承认我第一版的代码写的很不咋的,毕竟第一次做,jQuery最初也是经历了几次重构才稳定下来的。但是经过这两次重构之后,如果之前喷我的那哥们再来看看我的源码,他绝对不会说不够优雅。

  下面继续说产品的两次重构经历。

4. 两次代码重构

  这里只说js代码的重构,UI设计的重构下文会提到。

  第一版js代码(原版)

  说实话,第一版js的代码,我现在全部忘记了。就像我高考时候,数学考试刚刚结束,出来之后竟然忘记最后一道大题是什么。但印象中第一版的js就像一个流水线一样,页面上需要什么,我就用写什么。数据结构、面向对象、设计原则等等这些完全都没有考虑——怪不得人家说我的代码不够优雅!

  大家先不要笑话我。根据我的经历来看,不是我不想做好设计,而是富文本编辑器这个东西,看着很简单,其实做起来还是蛮复杂的。毕竟第一次做,有些东西想不到,缝缝补补是难免的。

  再者,产品是一版一版发布迭代的,好的软件是重构出来的、不是一下子设计出来的。你不要期望花10个月的时间一下子设计一个好软件,但是你可以一个月升级一版,通过10次升版做出一个好软件。

  第二版js代码(第一次重构)

  这次重构我的目的是两个字——“扩展”——这说明我开始思考设计了。设计原则的一个最高要求就是开放封闭原则——要求系统通过扩展来应对需求变化。因此我就思考:如何让开发者使用wangEditor通过二次开发扩展自己的菜单按钮和自定义的功能。

  想到了就做!光写完程序还不行,还得配上完善的用户手册。于是我又花了很大精力去写二次开发手册,还发布到博客园上。但是后来证明我的这个想法是失败的。不是因为我做的功能不行,而是因为不满足用户需求——用户不会耐烦去做二次开发的,他们就想拿来就用,谁耐烦给你二次开发?

  虽然我这次想多了,但是这次重构也是有意义的。经过这次重构,我可以关闭对外扩展的API,但是内部扩展功能还是有好处的。因此,经过这一次重构,系统代码彻底就走出了“蛮荒时代”,开始进入“文明社会”了。

  但是,再次重构的时候要想想:不要求全面、但要求精致,做什么事情都要围绕着目标和定位而行。

  第三版js代码(第二次重构)

  这一次重构的想法是今年春节,放假在家买了一本《基于MVC的JavaScript Web富应用开发》,花了几天时间看了看。也许是因为我走马观花的看的不仔细,这本书我没看出多少道道(现在计划重新再看一遍)。但是看书期间我突然想到了:wangEditor的代码是不是面向对象的?对象、变量是不是都结构化了?——这样一想,还真不是。

  于是回来之后,我经过一段时间的思考和准备,我又大胆的做了第二次重构。前前后后经过了两周的时间,才整理完成,发布到Github上。经过这次重构,使得wangEditor代码真正进入面向对象的世界,而且代码还模仿了jquery的设计思路,我觉得挺有意思。

  接下来的重构

  就在第二次重构刚刚完成时,我脑子里又突然想到了一点——是否需要MVC?能想到这一点非常好,但是不要急于去修改。重构不能太频繁,要不然系统不容易稳定。而且,是否用MVC、如何用MVC还是要经过一段时间的考虑。也许在几个月之后,我会再为了MVC重构一次。但是谁知道呢?

5. 五次UI升级

  初版

  这是基于bootstrap2.0实现的第一版界面,按钮还没有扁平化,布局也比较简陋。

  

  UI升级1

  后来将升级为基于bootstrap3.0,按钮扁平化,菜单栏和编辑区整合到一个容器中。感觉比以前美观了许多。

  

  UI升级2

  后来摆脱了bootstrap的依赖,自己实现了菜单栏的样式,去掉了按钮的边框,使得UI更加简洁。但是这些菜单按钮是基于fontAwesome字体库的。

  

  

  UI升级3

  fontAwesome是一个很完善的字体库,里面有400多个icon图标,导致字体文件很大,影响加载速度。这400多个字体库中,我能用到的也就是20个左右,因此根本没必要在继续依赖fontAwesome。因此,我通过www.fontello.com自定义封装了自己的字体库,用多少就封装多少,字体文件的大小变为原来的7.74%,加载速度快了很多。而且,不用再告诉使用者“首先你必须要引用fontAwesome.css……”大大降低学习成本(因此好多人根本不知道什么是fontAwesome)。

  

  UI升级4

  整天看IT互联网的新闻,看到office2016的曝光界面,因此有了重新设计UI的想法,于是就做了如下界面。(如果不喜欢,想回到传统风格,也是可以配置的。Github中有说明)。而且,界面的色调都是可配的,虽然默认的是深灰色色调,但是你可以通过简单的调整几个颜色值,来实现你想要的任何色调,github中有说明。

  

  UI升级5

  这是近期修改的,是一次小改动。以前菜单栏的分组用一个竖线“|”,而本次真正的分开了。相比上一个界面,本次使得菜单分组更加清晰,一目了然。

  

6. 下一步的计划

  接下来,近期不会对代码做太大的调整,以完善和优化为主。近期也不会增加复杂功能,但是会把当前的功能继续优化,优化UI界面、用户体验等等。

  总之我觉得做产品要有一个工匠的心,每时每刻都要反复琢磨,如何才能让产品最优。只要自己做个有心人,多去观察多去参考,产品肯定做的越来越好。

  一个重要工作,接下来我要把wangEditor.com网站搭建起来,域名和空间都注册了,只是一直没来及备案和绑定。

7. 交流&建议

交流QQ群:164999061 
二次开发联系:wangfupeng1988#163.com#->@

-------------------------------------------------------------------------------------------------------------

欢迎关注我的教程:从设计到模式深入理解javascript原型和闭包系列》《css知多少》《微软petshop4.0源码解读视频》《json2.js源码解读视频

也欢迎关注我的开源项目——wangEditor,轻量化web富文本编辑器

-------------------------------------------------------------------------------------------------------------

我为什么要做富文本编辑器【wangEditor5个月总结】的更多相关文章

  1. 放弃WebView,使用Crosswalk做富文本编辑器

    版权声明: 欢迎转载,但请保留文章原始出处 作者:GavinCT 出处:http://www.cnblogs.com/ct2011/p/4100132.html 为什么放弃WebView Androi ...

  2. django的admin或者应用中使用KindEditor富文本编辑器

    由于django后台管理没有富文本编辑器,看着好丑,展示出来的页面不美观,无法做到所见即所得的编辑方式,所以我们需要引入第三方富文本编辑器. 之前找了好多文档已经博客才把这个功能做出来,有些博客虽然写 ...

  3. 基于ABP做一个简单的系统——实战篇:4.基于富文本编辑器,Razor模板引擎生成内容并导出Word 填坑记录

    起因 需求是这样的,有一种协议需要生成,协议的模板是可配置的,在生成过程中,模板中的内容可以根据约定的标记进行替换(就像mvc的razor模板一样).生成后的内容还需要导出成word或pdf. 常见的 ...

  4. 富文本编辑器Simditor的简易使用

    最近打算自己做一个博客系统,并不打算使用帝国cms或者wordpress之类的做后台管理!自己处于学习阶段也就想把从前台到后台一起谢了.好了,废话不多说了,先来看看富文本编辑器SimDitor,这里是 ...

  5. 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范

    昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...

  6. 富文本编辑器防止xss注入javascript版

    富文本编辑器:ueditor 其实富文本编辑器已经有防止xss注入功能,但是你服务端程序在接收的时候在做一次转义,否则有可能然后前端验证直接提交数据导致被xss攻击. 为了节省后端程序开销则在前端 显 ...

  7. 更加简洁易用——wangEditor富文本编辑器新版本发布

    1. 前言 wangEditor富文本编辑器(www.wangEditor.com)从去年11月份发布,至今已经有将近10各月了.它就像一个襁褓中的小婴儿,在我的努力以及众多使用者的支持下不断摸索.成 ...

  8. 轻量级富文本编辑器wangEditor源码结构介绍

    1. 引言 wangEditor——一款轻量级html富文本编辑器(开源软件) 网站:http://www.wangeditor.com/ demo演示:http://www.wangeditor.c ...

  9. 重构wangEditor(web富文本编辑器),欢迎指正!

    提示:最新版wangEditor请参见:wangEditor.github.io 或者 https://github.com/wangfupeng1988/wangEditor 1. 前言 (下载源码 ...

随机推荐

  1. 关于STM32 CAN回环可用,正常不可用情况分析

    1.回环下应该与GPIO无关 2.GPIO是否初始化正确,时钟启用 3.是否复用,AFIO时钟是否启用 4.回环下是否有CAN_Tx应该有输出 5.终端电阻是否有 6.CAN收发器电路电压是否正常 7 ...

  2. iOS开发之应用内检测手机锁屏,解锁状态

    iPhone的锁屏监测分为两种方式监听: 1. 程序在前台,这种比较简单.直接使用Darwin层的通知就可以了: #import <notify.h> #define Notificati ...

  3. ffmpeg 中 swscale 的用法

    http://www.guguclock.com/2009/12/ffmpeg-swscale.html 如果想將某個PixelFormat轉換至另一個PixelFormat,例如,將YUV420P轉 ...

  4. struts2整合CKEditor和CKFinder实现上传

    上一篇文章给大家分享了CKEditor+CKFinder+JSP实现了在线编辑器上传图片的功能,这里在给大家分享一下如何在前面的基础上在struts2下实现这样的功能. 实现与Struts2的整合,整 ...

  5. [原]如何用Android NDK编译FFmpeg

    我们知道在Ubuntu下直接编译FFmpeg是很简单的,主要是先执行./configure,接着执行make命令来编译,完了紧接着执行make install执行安装.那么如何使用Android的ND ...

  6. net组件转化成COM组件

    第一步:生成秘钥文件 强名称工具 (Sn.exe) 有助于使用强名称对程序集进行签名.Sn.exe 提供了用于密钥管理.签名生成和签名验证的选项. 1.使用Visual Studio 命令 Visua ...

  7. ruby -- 问题解决(五)页面返回跳转

    今天在做页面跳转的时候,google了下页面跳转的方法, 跳转到上一个页面:redirect_to :back <%= link_to "返回" ,:back %> 这 ...

  8. 转 iOS Core Animation 动画 入门学习(一)基础

    iOS Core Animation 动画 入门学习(一)基础 reference:https://developer.apple.com/library/ios/documentation/Coco ...

  9. Web离线存储的几种方式

    随着HTML5的正式定稿,我们也可以大量使用HTML离线网络应用程序的特性. #1.Application Cache Application Cache 可以很简单让我们的WebApp具有离线的能力 ...

  10. Android性能优化之运算篇

    下面是运算篇章的学习笔记,部分内容与前面的性能优化典范有重合,欢迎大家一起学习交流! 1)Intro to Compute and Memory Problems Android中的Java代码会需要 ...