本文由 伯乐在线 - 埃姆杰 翻译自 Ata Sasmaz。欢迎加入技术翻译小组。转载请参见文章末尾处的要求。

【伯乐在线导读】:想做一个高质量的Web应用,前前后后要做的事情非常多。国外开发者 Ata Sasmaz 为 Web 开发者制作分享了一份检查清单,包括应用开发、性能、安全、分析、可用性、可靠性、转换策略、竞争策略这些方面需要注意的事项。清单内容可能不全面,欢迎 大家在评论中补充。

开发

  • 记录UI错误日志

JavaScript 允许捕获异常。这些异常需要通过Ajax请求提交到日志服务,否则很难截获Web环境中的错误。

  • 可交换的数据层

数据层可分离,也可以与另一个遵从规范的数据层互换。

  • 部署过程自动化

部署过程应自动化。生产环境所用的项目文件应由部署服务器生成,并在无人工干预的情况下自动完成。

  • 使用版本控制系统

版本控制系统保存代码更改的历史,防止现有代码的丢失。同时,它还有助于协同开发。GitHub是这项服务最流行的提供商。除此以外,还有BitBucket。微软也有提供了额外协作特性的Team Foundation

  • 代码审阅

人总会有写错代码的时候,而代码审阅系统能保证开发者的高质量产出。同时,该系统还能让不止一位开发者熟悉代码。在某段代码的作者不在的时候,其他开发者可以顺利地做出修改。GitHubTeam Foundation都提供了相应的代码审阅功能。

  • 权限与角色系统

每个应用都需要设计实现权限和角色系统。设立系统管理员,用户管理员等角色需要一个灵活的全局角色系统。

  • 记录所有未处理的错误

所有错误应当记录下来,并用于未来的全面检查。也就是所有错误都应当提交给全局错误记录机制。

  • 测试过程自动化

每次部署前,测试服务器应当运行所有测试。代码测试通过时部署应用,没能通过时报告给系统管理员。

  • 业务层可以在不同环境上使用

业务层中的代码必须通用。即使代码本身面向Web环境,它也应当能在不要求改变代码的情况下使用于桌面环境,服务器环境,移动设备环境的不同用户界面,不同数据层上。

  • 制定编码规范

一份规定明确的编码规范在未来项目开发的过程中起到重要作用。方法前需要写上注释吗?命名规范是什么?示例代码应放置何处?

  • 开发者机器配置的指导方案

开发时最耗时的问题是不同的开发者之间的开发环境不同。需要让人们知道的是,他们应当安装什么软件,使用的是什么版本,同时需要安装什么组件,以及怎样安装这些组件。

性能

  • 使用CDN

Content Delivery Networks(内容分发网络)通过离访客最近的服务器,为你的服务提供图片,JSCSS等静态文件来提高访问速度,同时削减了带宽的用量。CloudFlareCDN服务的绝佳示例。

  • 压缩所有的JSCSS文件

JSCSS文件应当使用YUI compressor这样的压缩器来减少文件体积,并且使用gzip传输。把JS代码的引用放到最后也是不错的做法。

  • 记录加载较慢的页面

Web应用程序应当响应迅速。分析页面加载的系统有责任识别加载较慢的页面。运行迅速的页面可能会遇到一些用户读取特定数据时加载时间过长的问题。

  • 非关键数据使用NoSQL存储

NoSQL数据库(文档型数据库)在接收数据和存储数据时的速度很快,并且可以大规模扩展。由于这类数据库不能确保关系的完整性,所以应当为关键数据使用关系型数据库。在诸如用户通知和聊天记录等场合,NoSQL可以节约成本,安全地使用。

  • 选择附近的数据中心

数据中心的位址应当靠近绝大多数用户。处在与用户同一个国家的数据中心对页面访问速度大有影响。有必要的情况下,还可以建立多个数据中心。

  • 允许数据多来源

存储数据的成倍增加,带来的是应用程序性能降低。程序架构应做好处理多来源的大规模数据的准备。

安全

  • 隔离数据库中的关键信息

数据库用户在访问关键信息时应受到限制,比如取得哪怕是已经Hash过了的密码和所有用户的Email地址等信息。应当使用存储过程和视图作验证,或者作自定义数据。

  • 防止远程执行代码

应用程序包含了对安全性较差代码的依赖时,会使攻击者在远程执行相应的攻击代码。

  • 防止洪水攻击和垃圾邮件攻击

认证用户发起的洪水攻击和垃圾邮件攻击都是可能的。要注意随时跟踪他们最后发起的不明操作,避免制造大量请求。

  • 对密码散列处理时使用唯一salt

所有密码都应当使用salt值散列处理,并且每个用户的salt值都是唯一的。人们容易在不同的服务上使用相同的密码,应用程序有责任保护用户的密码。

  • 全局的跨站脚本攻击(XSS)保护

XSS攻击的全称是Cross Site Scripting跨站脚本攻击,是让用户执行远程恶意脚本的Web漏洞。

  • 防止SQL注入漏洞

SQL注入是常见的漏洞。攻击者通过构造字符串,可以执行有害的SQL命令。使用ORM是一种防范的好方法。

  • 防止跨站请求伪造(CSRF

Cross-Site Request Forgery跨站请求伪造是一种常见的Web漏洞,攻击者在他们的网站上放置一个iframe框架,该框架从程序中请求页面,而用户并不处于应用程序中。GET请求不应该修改数据,这是硬性要求,防止从应用程序域名之外发出POST请求,同时,也可以保护程序不受攻击。相比之下,更好的做法则是在每个表单里提供接收请求后验证的token

  • 修改关键信息之前验证密码

即使用户信息在电脑上有所记录,甚至用户几分钟前成功登录了系统,在访问或者修改如密码,Email或者数据备份等关键信息时总是需要验证密码。

  • HTTP的严格安全传输

如果用HTTPS传输数据,就应该只使用HTTPS传输。否则中间人很可能有作为HTTPSHTTP传输的转换者,让用户使用HTTP发出请求以分析数据。

  • 在所有应用中使用HTTPS

HTTPS是世界范围的加密标准,在第一次连接握手之后没有额外的开销。所有的页面和资源都应当使用HTTPS传输。使用HTTPS的时候,推荐的信息来源也要是HTTPS。否则浏览器就会以安全原因不予显示。

  • 验证会话的浏览器和位置信息

会话和Cookies都可以被劫持。浏览器报头信息和用户最后的IP地址的位置信息都可以和原来的用户会话对比。一个积极防范的办法是将会话与用户IP绑定,但是可能会在动态地址和移动设备的情况下造成问题。

分析

  • 尽可能保留数据

每项数据、每条请求、每个事件都应当记录在大数据的存储中。这些数据将来会很有用处,数据挖掘技术将会呈现出有用的分析报告。

  • 观察用户意向

对于未来计划而言,找出用户使用应用程序与否背后的原因十分重要。

  • 允许用户灵活获取分析报告

现如今数据分析非常关键。分析报告揭示了未来业务的走向何方。优秀的应用程序不仅能便利用户,而且能让用户按需生成报表。

可靠性

  • 分发请求并做到100%上线率

应用服务器直接接受连接,不如在内部搭建一个分发请求的反向代理服务器。这样在有部分服务器当机的情况下也能由仍然运转的服务器提供服务。

  • 自动备份数据

数据应当至少每天备份,而更多的备份任务应当取决于特定存储和应用服务器,必要时还需要做好数据中心的灾备方案。

  • 100% 覆盖业务层和数据层的测试

测试应当覆盖业务层和数据层的所有代码。搅乱用户数据,计算出错误的结果,提供错误数据,以及存储发生错误将会造成用户流失和金钱损失。

  • 检测服务器在线时长

目前有许多检测服务器在线时长的第三方服务。他们同时也提供按指定时间间隔,检查服务器状态的定制服务。

可用性

  • 减少页面刷新

Ajax技术相比,刷新页面更慢,同时也在页面跳转时使用户流失。单页应用(类似Gmail)用户体验良好,同时也更难开发,更容易出bug。资源(人力)足够,则可以选择开发单页应用,否则更应该采用Ajax技术。

  • 隐藏生产环境中的详细错误信息

详细的错误提示页面输出了与错误有关的任何信息,是每位开发者都需要的。生产环境中的应用程序仍然能够记录这些信息日志,那么就有必要隐藏这些信息。

  • 简化用户界面

学习使用程序”的时代已经过去。在用户熟悉之前,程序要足够简单。在用户熟悉之后,高级操作就会显现出来。复杂的界面会使用户望而却步。

  • 全局搜索系统

使用搜索的倾向已在近年来逐渐上升。GoogleFacebookTwitter都有搜索功能。所有的软件巨头都会提供能对搜索结果筛选的全局搜索系统。要让用户们在你的应用上也能有一致的功能。

  • 发生状况时引导用户

发生错误或者输入密码之后,需要向用户指明他们的来向和去向,请记住这一点。

  • 移动端优先的UI

UI设计的通常做法是首先考虑桌面端,然后适配移动端设备。这种做法在适配时开销巨大。UI应当首先考虑移动设备,再适配桌面端。

  • 全局反馈系统

开发者和测试者不能预测问题的状况时有发生。最好的解决办法就是每个页面上都设置能让用户访问到的反馈机制。

  • 一致的UI行为

用户有可能使用着WindowsMacLinux、移动设备或者某个不知名的设备。而在这些环境中,UI的行为必须一致。实现这一点的方法就是遵循标准,并且不使用不标准的组件。同时,使用Bootstrap或者Foundation这样的框架也有帮助。

  • 使用友好的URL

虽然Web应用并不是针对有组织的访客(来自搜索引擎),人们在Email或者IM中分享地址的时候总是想要了解到点击以后出现的内容。人们通常对此解释较少,所以分享的时候URL本身至少能提供相关的信息。

转化策略

  • 邀请码系统

邀请注册是获得新用户最古老也是最有效的转化策略。成功的邀请系统不仅奖励邀请人,被邀请人也会受益。

  • 支持系统

用户总会有问题,而每个应用都需要支持系统。缺少支持系统会让用户望而却步。这里是一些外部方案:ZenDeskDeskFreshdeskZoho Support……

  • 消息通知和定时发送Email

让用户回头使用软件很重要。用户常常不记得软件,遗忘了便不再回来。定时发送带有消息通知的Email能留住用户。不要忘了保留这类选项的开关,不然那将会成为垃圾邮件。

  • 总做得更好

不论拥有多少用户,哪怕1个,甚至成千上万,总是要做得更好。这么做将会掩盖每个软件都会有的瑕疵。

  • 整合社交+激励

访客,哪怕是付费用户,都很难有机会在社交网络上分享你的应用。应该为此设立相应的激励机制。这要求使用FacebookTwitter等社交网络API散播相关信息。

  • 邮件列表

让用户保持更新十分重要。用户使用软件时,他们会很高兴地得知你会为此做出支持,并做到更好。创建邮件列表,让用户知道每月的改进是负责任的态度。

  • 了解潜在的客户

不要指望用户自然而来,你得为之奋斗。虽然有很多优质的广告方案,更好的做法是在互联网上花少量钱甚至免费提供相应的价值,然后将其引导到相应的产品上来。

  • 不要让用户流走

知道用户离开的原因十分重要。好的系统会在用户离开的时候发出一封邮件,提供优惠折扣,并且征求反馈。

竞争策略

  • 研究用户产品需求

软件产品的需求从来就不是凭空产生的。需求分析让开发者与产品经理有据可依。尝试着通过分析用户最常使用的部分来理解客户的真实需求。

  • 了解竞争对手

没有产品是生来完美的。一家公司开发,其他公司改进;最初的那一家因而得到进步。这是每个行业都会有的开发流程。每项产品都会有其竞争对手。

原文链接: Ata Sasmaz   翻译: 伯乐在线 - 埃姆杰
译文链接: http://blog.jobbole.com/55582/

Web开发者必备:Web应用检查清单相关推荐

  1. 九个Web开发者必备的软技能

    对于一份工作,你可能专注于修炼自己的内功,会在不自觉中忽视软技能.硬技能决定你是否能得到工作,而软技能能够表明你是否适合这份工作和适应工作环境等.所有的公司都有属于自己的文化,并努力将这些文化传承下去 ...

  2. [转]WEB开发者必备的7个JavaScript函数

    我记得数年前,只要我们编写JavaScript,都必须用到几个常用的函数,比如,addEventListener 和 attachEvent,并不是为了很超前的技术和功能,只是一些基本的任务,原因是各 ...

  3. Web开发者必备的12款超赞jQuery插件

    jQuery插件能够增强网站的可用性,有效地改善用户体验,还可以大大减少创建一个新站点的开发时间.现在的jQuery插件很多,尽可以根据您的项目要求来选择,不过也有一些插件很好用,几乎各种项目都能够用 ...

  4. WEB开发者应该有哪些必备的技能?

    WEB开发者应该有哪些必备的技能? WEB开发本身涵盖了许多领域的许多技术,那么,有哪些是WEB开发者必备的技能呢?这是一个 Quora 上用户提出的问题,其中Ellyse Taylor的回答获得了1 ...

  5. Web开发经验谈之F12开发者工具/Web调试[利刃篇]

    引语:如今的整个Web开发行业甚至说整个软件开发行业,已经相当成熟,基本上已经很少找不到没有前人做过的东西了,或者换句话说,你想要实现的功能,你总能在某个地方搜索到答案,关键是你有没有这个时间精力去搜 ...

  6. 网页开发工具有哪些?——开发者必备的15个Web开发工具

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8" ...

  7. 开发者必备的15 个Web开发工具

    Web开发不是一件轻松的任务,开发者需要做很多的事情来确保网站运行正常.高效- 本文介绍15个非常优秀的每个web开发者都应该拥有的工具,列表如下: 1. Firebug Firebug是Firefo ...

  8. 5年后端WEB开发者的开机必备软件

    ## 5年后端WEB开发者的开机必备软件 @category 碎碎念 @title 5年后端开发者的开机必备软件 @author 胡梦旭 @desc WEB开发,开机软件,开发工具,画图软件,辅助软件 ...

  9. 5年后端WEB开发者的开机必备软件(md版本)

    5年后端WEB开发者的开机必备软件 原文:https://www.humengxu.com/article/122 @category 碎碎念 @title 5年后端开发者的开机必备软件 @autho ...

最新文章

  1. 解决IDEA中进行maven install报:系统资源不足的问题
  2. python线程只能启动一次_python多线程只能运行一个线程的问题
  3. JVM系列之:从汇编角度分析Volatile
  4. 极光推送收费标准_刚刚,安卓统一推送又有进展了!华为率先...
  5. ES6(一)——字面量的增强、解构、let/const、块级作用域、暂时性死区
  6. 安卓逆向_21 --- Java层和so层的反调试( IDA 动态调试 JNI_OnLoad、init_array下断)
  7. 35 SD配置-销售凭证设置-定义项目类别组
  8. 【Java】使用Switch语句实现成绩等级判断
  9. 信息提示无法建立数据连接服务器,FileZilla 链接FTP服务器无法建立数据连接: ECONNREFUSED...
  10. python requests.get无法取出网页_Python requests获取网页常用方法解析
  11. Oracle 12C -- temporal validity
  12. HCIE理论-IPV6
  13. 制造业生产规划与排程的福音—APS系统
  14. EXCEL 图表-双坐标轴
  15. PS学习笔记(88天和我一起学会PS)(8/88)
  16. LA 4490 Help Bubu
  17. 台式计算机打印机共享,电脑不能共享打印机怎么办 电脑设置共享打印机详细教程...
  18. 串口中断处理 m=SBUF; SBUF=m;自收发
  19. 外卖cps 赚钱小程序源码
  20. element card样式无边框

热门文章

  1. 输出亲朋字符串(信息学奥赛一本通-T1133)
  2. 信息学奥赛C++语言:百钱买百鸡
  3. php mysql 日期查找_PHP / MySQL存储和搜索日期
  4. Docker创建自己的镜像库
  5. transformer中patch与token?
  6. [UE4] Load Class Assest 返回 Null 的解决方法:在资产路径后面加 _C
  7. phpcms前台注入导致任意文件读取漏洞
  8. php 取前一天时间戳,php获取时间今日明天昨天时间戳
  9. python智能光环板_学而思编程推出全新智能学习系统,搭配多种硬件
  10. 恋爱记v1.0源码-在线生成表白页