导读:想作一个高质量的Web应用,前先后后要作的事情很是多。国外开发者 Ata Sasmaz 为 Web 开发者制做分享了一份检查清单,包括应用开发、性能、安全、分析、可用性、可靠性、转换策略、竞争策略这些方面须要注意的事项。清单内容可能不全面,欢迎你们在评论中补充。web
记录UI错误日志
JavaScript 容许捕获异常。这些异常须要经过Ajax请求提交到日志服务,不然很难截获Web环境中的错误。数据库
可交换的数据层
数据层可分离,也能够与另外一个听从规范的数据层互换。浏览器
部署过程自动化
部署过程应自动化。生产环境所用的项目文件应由部署服务器生成,并在无人工干预的状况下自动完成。安全
使用版本控制系统
版本控制系统保存代码更改的历史,防止现有代码的丢失。同时,它还有助于协同开发。GitHub是这项服务最流行的提供商。除此之外,还有BitBucket。微软也有提供了额外协做特性的Team Foundation。服务器
代码审阅
人总会有写错代码的时候,而代码审阅系统能保证开发者的高质量产出。同时,该系统还能让不止一位开发者熟悉代码。在某段代码的做者不在的时候,其余开发者能够顺利地作出修改。GitHub和Team Foundation都提供了相应的代码审阅功能。网络
权限与角色系统
每一个应用都须要设计实现权限和角色系统。设立系统管理员,用户管理员等角色须要一个灵活的全局角色系统。架构
记录全部未处理的错误
全部错误应当记录下来,并用于将来的全面检查。也就是全部错误都应当提交给全局错误记录机制。app
测试过程自动化
每次部署前,测试服务器应当运行全部测试。代码测试经过时部署应用,没能经过时报告给系统管理员。框架
业务层能够在不一样环境上使用
业务层中的代码必须通用。即便代码自己面向Web环境,它也应当能在不要求改变代码的状况下使用于桌面环境,服务器环境,移动设备环境的不一样用户界面,不一样数据层上。webapp
制定编码规范
一份规定明确的编码规范在将来项目开发的过程当中起到重要做用。方法前须要写上注释吗?命名规范是什么?示例代码应放置何处?
开发者机器配置的指导方案
开发时最耗时的问题是不一样的开发者之间的开发环境不一样。须要让人们知道的是,他们应当安装什么软件,使用的是什么版本,同时须要安装什么组件,以及怎样安装这些组件。
使用CDN
Content Delivery Networks(内容分发网络)经过离访客最近的服务器,为你的服务提供图片,JS和CSS等静态文件来提升访问速度,同时削减了带宽的用量。CloudFlare是CDN服务的绝佳示例。
压缩全部的JS和CSS文件
JS和CSS文件应当使用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传输。不然中间人极可能有做为HTTPS到HTTP传输的转换者,让用户使用HTTP发出请求以分析数据。
在全部应用中使用HTTPS
HTTPS是世界范围的加密标准,在第一次链接握手以后没有额外的开销。全部的页面和资源都应当使用HTTPS传输。使用HTTPS的时候,推荐的信息来源也要是HTTPS。不然浏览器就会以安全缘由不予显示。
验证会话的浏览器和位置信息
会话和Cookies均可以被劫持。浏览器报头信息和用户最后的IP地址的位置信息均可以和原来的用户会话对比。一个积极防范的办法是将会话与用户IP绑定,可是可能会在动态地址和移动设备的状况下形成问题。
尽量保留数据
每项数据、每条请求、每一个事件都应当记录在“大数据”的存储中。这些数据未来会颇有用处,数据挖掘技术将会呈现出有用的分析报告。
观察用户意向
对于将来计划而言,找出用户使用应用程序与否背后的缘由十分重要。
容许用户灵活获取分析报告
现现在数据分析很是关键。分析报告揭示了将来业务的走向何方。优秀的应用程序不只能便利用户,并且能让用户按需生成报表。
分发请求并作到100%上线率
应用服务器直接接受链接,不如在内部搭建一个分发请求的反向代理服务器。这样在有部分服务器当机的状况下也能由仍然运转的服务器提供服务。
自动备份数据
数据应当至少天天备份,而更多的备份任务应当取决于特定存储和应用服务器,必要时还须要作好数据中心的灾备方案。
100% 覆盖业务层和数据层的测试
测试应当覆盖业务层和数据层的全部代码。搅乱用户数据,计算出错误的结果,提供错误数据,以及存储发生错误将会形成用户流失和金钱损失。
检测服务器在线时长
目前有许多检测服务器在线时长的第三方服务。他们同时也提供按指定时间间隔,检查服务器状态的定制服务。
减小页面刷新
与Ajax技术相比,刷新页面更慢,同时也在页面跳转时使用户流失。单页应用(相似Gmail)用户体验良好,同时也更难开发,更容易出bug。资源(人力)足够,则能够选择开发单页应用,不然更应该采用Ajax技术。
隐藏生产环境中的详细错误信息
详细的错误提示页面输出了与错误有关的任何信息,是每位开发者都须要的。生产环境中的应用程序仍然可以记录这些信息日志,那么就有必要隐藏这些信息。
简化用户界面
“学习使用程序”的时代已通过去。在用户熟悉以前,程序要足够简单。在用户熟悉以后,高级操做就会显现出来。复杂的界面会使用户望而却步。
全局搜索系统
使用搜索的倾向已在近年来逐渐上升。Google、Facebook、Twitter都有搜索功能。全部的软件巨头都会提供能对搜索结果筛选的全局搜索系统。要让用户们在你的应用上也能有一致的功能。
发生情况时引导用户
发生错误或者输入密码以后,须要向用户指明他们的来向和去向,请记住这一点。
移动端优先的UI
UI设计的一般作法是首先考虑桌面端,而后适配移动端设备。这种作法在适配时开销巨大。UI应当首先考虑移动设备,再适配桌面端。
全局反馈系统
开发者和测试者不能预测问题的情况时有发生。最好的解决办法就是每一个页面上都设置能让用户访问到的反馈机制。
一致的UI行为
用户有可能使用着Windows、Mac、Linux、移动设备或者某个不知名的设备。而在这些环境中,UI的行为必须一致。实现这一点的方法就是遵循标准,而且不使用不标准的组件。同时,使用Bootstrap或者Foundation这样的框架也有帮助。
使用友好的URL
虽然Web应用并非针对有组织的访客(来自搜索引擎),人们在Email或者IM中分享地址的时候老是想要了解到点击之后出现的内容。人们一般对此解释较少,因此分享的时候URL自己至少能提供相关的信息。
邀请码系统
邀请注册是得到新用户最古老也是最有效的转化策略。成功的邀请系统不只奖励邀请人,被邀请人也会受益。
支持系统
用户总会有问题,而每一个应用都须要支持系统。缺乏支持系统会让用户望而却步。这里是一些外部方案:ZenDesk、Desk、Freshdesk、Zoho Support……
消息通知和定时发送Email
让用户回头使用软件很重要。用户经常不记得软件,遗忘了便再也不回来。定时发送带有消息通知的Email能留住用户。不要忘了保留这类选项的开关,否则那将会成为垃圾邮件。
总作得更好
不论拥有多少用户,哪怕1个,甚至成千上万,老是要作得更好。这么作将会掩盖每一个软件都会有的瑕疵。
整合社交+激励
访客,哪怕是付费用户,都很难有机会在社交网络上分享你的应用。应该为此设立相应的激励机制。这要求使用Facebook、Twitter等社交网络API散播相关信息。
邮件列表
让用户保持更新十分重要。用户使用软件时,他们会很高兴地得知你会为此作出支持,并作到更好。建立邮件列表,让用户知道每个月的改进是负责任的态度。
了解潜在的客户
不要期望用户天然而来,你得为之奋斗。虽然有不少优质的广告方案,更好的作法是在互联网上花少许钱甚至免费提供相应的价值,而后将其引导到相应的产品上来。
不要让用户流走
知道用户离开的缘由十分重要。好的系统会在用户离开的时候发出一封邮件,提供优惠折扣,而且征求反馈。
研究用户产品需求
软件产品的需求历来就不是凭空产生的。需求分析让开发者与产品经理有据可依。尝试着经过分析用户最常使用的部分来理解客户的真实需求。
了解竞争对手
没有产品是生来完美的。一家公司开发,其余公司改进;最初的那一家于是获得进步。这是每一个行业都会有的开发流程。每项产品都会有其竞争对手。