在过去的一年里,我在从头开始开发我的第一个重要的Web应用。经验教会了很多以前不知道的东西,特别是在安全性和用户体验方面。

值得一提的是,我上一次尝试构建的任何合理复杂性是在2005年。所以,在安全防御方面,我还有很多东西需要去补充。

即使在那些我已经知道或已经遇到过的东西之外,下面这个清单的细节在开发Web应用时也非常容易忘记,尤其是你才刚刚起步的时候。

这个清单可能在某些方面不尽详细,如果你是一位经验丰富的开发者,我怀疑这里将不会有什么东西会让你感到惊奇。但是,我希望它对那些可能遗落了一些东西的人有帮助。

安全性

确认电子邮件:当用户注册时,你应该发一个带有确认链接的电子邮寄给他们,然后用户必须点击链接来确认。如果用户在某个时候改变他们的电子邮箱地址,应该触发同样的操作流程。

身份管理:在存储密码时,先用广泛使用的加密库将密码加密。如果你能不管理密码,那么身份管理转由Facebook/Github/Twitter来管理,只要使用一个认证接口。

加密:对Web的所有证书问题,没有比SSL更好的技术了,使用它吧,或者使用 HSTS也可以。

证书:永远不要Check任何形式的服务器证书(API密钥、数据块密码)到源码控制库中。

工程:动画

对于这一切是圣洁的爱,别将你的app上所有的元素都做成动画,因为大部分CSS动画都会触发布局重绘。你最好限制一下,尽可能用变换和 opacity。

避免懒过渡计算,如果你一定要使用它,必须确保使用特定的属性(如:”transition: opacity 250ms ease-in” 而不是 “transition: all 250ms ease-in”)。

用户体验

表单:当提交表单时,用户应该得到一些有关提交的反馈信息。如果提交后页面没跳转到其它页面,那么就应该有一个弹出类型的提醒来让用户知道他们是提交成功了还是失败了。

登陆重定向:如果一个用户正想访问你网址上的某个页面,但是他并未登陆,那么用户应该首先被导向登陆页面,用户登陆之后又会跳转到他之前试着去访问的页面。 如果他们在登陆时输入了错误的密码,应该给以提示,提示他们如果忘记密码了可以选择重新设置新密。

电子邮件

订阅设置:你发送给每个用户的邮件,至少要包含一个链接到你的应用的一个页面,在这个页面上用户可以修改他们的邮箱设置;还应有一个单独链接供用户来取消订阅。 别让他们发邮件给你来取消订阅。

移动端

你并不一定要为你的应用开发移动客户端。但是,开发或不开发,你必须了解它是一个非常重要的决定。因为这将对开发你的应用的设计师和工程师产生重大影响。

以下假定你已经选择某特定移动端作为您的平台之一。我碰巧使用了Grunt来作为我的构建工具,所以,我已经拥有一些有关Grunt的插件可以用。但是,可能存在一些与你正在使用的JavaScript工具类似的东西。

工程

单页面应用:最近单页面应用(SPA)是主流,它的主要优势:SPA只需要更少的加载,只需要加载你所需要的资源,而且不需要重复一遍又一遍的加载。如果你正好准备做一个新的web应用,你应该选用SPA。

用户界面

分辨率:在你开发你的MVP时,你可能不需要确保你的UI能够在所有设备上优雅地工作,但是,但你应该确保它能适用于手机和平板电脑分辨率的基本范围。

用户体验:带宽

移动端的带宽比台式电脑的带宽更加宝贵,这也是移动应用的一大话题。因此,你应该寻找一切机会来减少请求的数量,尽可能使用异步,减小被请求资源的大小。

JS与CSS:你应该讲应用上特定的JavaScriptCSS集中放到一个文件中(一个存JS、一个存CSS),并尽量减小它们的大小。你的朋友在这里 Grunt-contrib-concatGrunt-contrib-cssmin和 Grunt-contrib-uglify 。

为所有资源–使用CDN:使用CDN主要有两个好处。第一个适用于所有托管的资源即是定位,CDN可以确保你的资源在某个区域,然后用户访问的时候可以就近访问资源,这样减少了资源加载时间。

第二个是应用于你的Web应用的依赖文件(比如:非特定于应用的样式和JS代码)。对web应用所依赖的文件使用CDN,可通过用户的缓存来极大地减小加载时间。举个例子,很多网站都依赖Angular.js,使用CDN来链接到核心角代码将会触发一个缓存命中,移动设备用户将会从缓存中接收它,而不是发起另一个HTTP请求。

CSS-减小脚本大小:大部分开发者刚开始的时候可能会使用某种UI框架(如Bootstrap、Foundation等)。这些框架可能非常大,通常在大部分CDN上都可用它们的精简版样式,你也不可能需要使用它们所包含的全部样式。通常,像类似uncss的工具(通常与类似 processhtml 的工具搭配)在帮你移除那些用不着的样式有难以置信的意义。

需要重视的是,uncss解析器无法辨析动态样式。所以你在检测的时候,必须谨慎,确保别删错了那些实际上被使用在你的应用中的样式。

CSS-将关键的代码放置到head:在应用加载完之前,关键样式应该已经可用,它们应该放到Head中。次要的样式可用稍后再加载。

JS-减小脚本大小:由于在你的产品中JavaScript代码不需要任何内部变量对人们易理解,将变量user.email重命名为u.e可能会有助于减小你的脚本文件。幸运的是,有个工具可以帮你做这个工作-前面提到的 uglify,它可以将你的JS代码变得难以读懂,但是JS文件会更小。

用户体验:表单

确保你的表单和工作流程简单,总体上而言这是一个很好的建议。如果你还选择了针对移动端进行部署,那么这一点尤其重要,没有人愿意在他们的手机上填写具有5个页面的表单。

我希望这个列表能够对那些正准备开发你的第一个web app、或是那些已经着手在开发、或对前端设计优化技巧并不熟悉的朋友有帮助。如果你着手开发之后发现了一些其它被遗落的技术或技巧,请记下来并告诉我,我会考虑把它添加在这个列表中。

原文地址:http://codecloud.net/2015-web-app-4932.html

原文地址(英文):http://blog.venanti.us/web-app-2015/

在2015年 开发一个 Web App 必须了解的那些事的更多相关文章

  1. 开发一个 Web App 必须了解的那些事

    在过去的一年里,我在从头开始开发我的第一个重要的Web应用.经验教会了很多以前不知道的东西,特别是在安全性和用户体验方面. 值得一提的是,我上一次尝试构建的任何合理复杂性是在2005年.所以,在安全防 ...

  2. 微信公众平台开发:Web App开发入门

    WebApp与Native App有何区别呢?Native App:1.开发成本非常大.一般使用的开发语言为JAVA.C++.Objective-C.2.更新体验较差.同时也比较麻烦.每一次发布新的版 ...

  3. 如何设计和实现一个web app

    web app简介 web app其实不算是什么新鲜的东西,相比于传统的web和传统的app,web app这种web和app相结合的产物有的优点如下: 1. 开发上web app更有便捷性,ios开 ...

  4. 从零开始, 开发一个 Web Office 套件 (2): 富文本编辑器

    书接前文: 从零开始, 开发一个 Web Office 套件 (1): 富文本编辑器 这是一个系列博客, 最终目的是要做一个基于HTML Canvas 的, 类似于微软 Office 的 Web Of ...

  5. 从零开始,开发一个 Web Office 套件(10):捕获键盘事件,输入文字

    这是一个系列博客,最终目的是要做一个基于 HTML Canvas 的.类似于微软 Office 的 Web Office 套件(包括:文档.表格.幻灯片--等等). 博客园:<从零开始, 开发一 ...

  6. Python之路,Day18 - 开发一个WEB聊天来撩妹吧

    Python之路,Day18 - 开发一个WEB聊天来撩妹吧   本节内容: 项目实战:开发一个WEB聊天室 功能需求: 用户可以与好友一对一聊天 可以搜索.添加某人为好友 用户可以搜索和添加群 每个 ...

  7. Anaconda+django写出第一个web app(一)

    在安装好Anaconda和django之后,我们就可以开始创建自己的第一个Web app,那么首先创建一个空文件夹,之后创建的文件都在这个文件夹内. 启动命令行进入此文件夹内,可以先通过如下命令查看一 ...

  8. Python开发一个WEB聊天室

    项目实战:开发一个WEB聊天室 功能需求: 用户可以与好友一对一聊天 可以搜索.添加某人为好友 用户可以搜索和添加群 每个群有管理员可以审批用户的加群请求,群管理员可以用多个,群管理员可以删除.添加. ...

  9. 手把手教你用Vue2+webpack+node开发一个H5 app

    手把手教你用Vue2+webpack+node开发一个H5 app ​前一篇vue2 + webpack + node 开发一个小demo说到了用vue的一些基本用法,这一篇就讲一个复杂一点的更完整的 ...

随机推荐

  1. 使用Navicat连接MySQL出现1251错误

    问题:navicat连接mysql时报错:1251-Client does not support authentication protocol requested by server; consi ...

  2. JAVA 集合JGL

    集合 Java提供了四种类型的“集合类”:Vector(矢量).BitSet(位集).Stack(堆栈)以及Hashtable(散列表).与拥有集合功能的其他语言相比,尽管这儿的数量显得相当少,但仍然 ...

  3. 【旧文章搬运】Windbg+Vmware驱动调试入门(一)---Windbg的设置

    原文发表于百度空间,2009-01-08========================================================================== Windb ...

  4. 关于spring boot打出的jar包在Linux中运行

    众所周知, spring boot打出的jar包可以通过 "java -jar xxx.jar"的方式来运行 但是在Linux中, 通过这个命令运行的话会占用该窗口, 当我们 Ct ...

  5. View Programming Guide for iOS ---- iOS 视图编程指南(二)---View and Window Architecture

    View and Window Architecture 视图和窗口架构 Views and windows present your application’s user interface and ...

  6. E20180404-ts

    aero  adj. 航空的,飞行的,飞机的; wheel   n. 轮子; 旋转; Wheels 汽车; 有…轮子的汽车(或自行车等); vi. 转动,旋转; 突然转变方向; foil n. 箔,金 ...

  7. 洛谷 - P2444 - 病毒 - AC自动机

    https://www.luogu.org/problemnew/show/P2444 有点恶心,不太明白fail的意义. #include<bits/stdc++.h> using na ...

  8. iOS Button选中与取消

    /** * 是否点击 */ @property (nonatomic ,assign) BOOL selected; /** *  button 点击事件选中取消选中 */ - (void)handl ...

  9. 786. K-th Smallest Prime Fraction

    A sorted list A contains 1, plus some number of primes.  Then, for every p < q in the list, we co ...

  10. poj 1988 Cube Stacking【带权并查集】

    设s[x]为x所在栈里的个数,c[x]表示x下面有几个,合并的时候直接合并s,然后路径压缩的时候更新c即可 #include<iostream> #include<cstdio> ...