干货:Web应用上线之前程序员应该了解的技术细节

【伯乐在线注】:《Web 应用上线前,程序员应考虑哪些技术细节呢?》这是 StackExchange 上面的一个经典问题贴。

最赞回复有 2200+ 顶,虽然大多数人可能都听过其中大部分内容,但应该会有你没有深入了解的内容。一起来看看。


问题

Web 应用上线前,程序员应考虑哪些技术细节呢? 如果 Jeff Atwood 忘记把 HttpOnly cookiessitemaps 和 cross-site request forgeries 放在同一个网站,那我会把什么重要的东西也会忘掉呢?

我以一个 Web 开发人员的角度思考这个问题,别人为网站进行美化设计并填充内容。因此,他们可能认为可用性和内容比平台更重要,程序员在这方面没多少发言权了。而你需要考虑到的是:你实现平台的稳定性、安全性和满足其它商业目的(如成本不要太高、耗时不要太长和网站排名)。

而以一位已经在相当可信的环境下,完成了几个企业内网应用程序项目的开发者角度思考,并在一个流行且权威网站上为整个糟糕的万维网打响第一枪。

另外,我希望能回答得更加具体一点,而不仅仅是一个“Web标准”这样模糊的答案。通过 HTTP 传输的 HTML、JavaScript、CSS 是必须要掌握的,特别是针对那些资深 Web 开发者。所以,超出上述范围,哪一个标准?在什么环境下,并且为什么这样?麻烦您提供一个跳转到该标准说明的链接。

最佳回复

下面列表里的大部分内容,我们大多数人都应该已经听过了。所以在这之前,你可能只有一到两个项目没有深入查看和理解透彻,或甚至没听过。

界面和用户体验

  • 应意识到浏览器实现标准不一致,并确保你的网站能在所有主流浏览器上合理运行。至少起码在最近的 Gecko 引擎(Firefox)、Webkit 引擎(Safari 和一些移动端浏览器)、Chrome、支持 IE 浏览器(利用 Application Compatibility VPC Images 进行测试)和 Opera。另外,也要考虑浏览器在不同操作系统下是如何渲染网站的。
  • 要考虑到用户除了通过主流浏览器来浏览网站外,还有其它方式:手机、屏幕阅读器和搜索引擎等。 这有一些相关信息:WAI 和 Section508,移动开发:MobiForge
  • Staging:如何部署更新而不影响用户。进行一次或多次测试或 staging 环境可用来实现架构的更改,确保代码或全部内容能部署在一个可控的方式而不会破坏任何东西。有一个自动化的方式部署批准改变网站。最有效地实现方法是使用版本控制系统(Git、CVS、Subversion 等)和一个自动构建机制( Ant、 NAnt 等)。
  • 不要向用户直接显示不友好的错误提示。
  • 不要以纯文本的方式显示用户的 Email 地址,否则他们将会收到该死的垃圾邮件。
  • 为用户链接添加属性 rel = “nofollow” 来 避免垃圾邮件
  • 为你的网站建立深思熟虑的限制 – 这也属于下面将要讲到的安全性。
  • 学会如何实现网页的 渐进增强
  • POST 提交成功后,要重定向,以防止再次提交引起刷新。
  • 别忘了考虑到访问性(accessibility,即残障人士如何使用网站)。这一直是好想法并且有时这是法定要求。WAI-ARIA 和 WCAG 2 都是这方面很好的资源。
  • 别让用户思考如何操作。

安全性

性能

  • 如有必要,就实现缓存。了解和正确地使用 HTTP 缓存(caching)和 HTML 5 离线缓存。
  • 优化图片 – 别使用一个 20 KB 大小的图片做为一个重复背景。
  • 学习如何用 gzip / deflate 压缩内容deflate更好)。
  • 合并多个样式表单或脚本文件,以减少浏览器发送请求次数,而且要利用 gzip 压缩文件之间重复的部分。
  • 浏览 Yahoo Exceptional Performance(雅虎优越性能)网站,里面有很多优秀的指引,其中就包括提高前端性能和它们的 YSlow 工具(需要 Fixfox、Safari、Chrome 或 Opera)。另外,Google PageSpeed (以 浏览器扩展 的方式)是另一个测试性能的工具,而且它也会优化你的图片。
  • 为较小且有关联的图片使用 CSS 图片精灵 技术,如工具栏(看“把 HTTP 请求减到最低”那点建议)
  • 繁忙 Web 站点应考虑将 网页的内容分开存放 在不同的域名下。特别是…
  • 静态内容(也就是图片、CSS、JavaScript 和无需通过 cookies 获取的一般内容)应放进独立且 不使用 cookies 的域名上,因为所有域名和其子域名为客户端生成的 cookies 都会伴随请求发送回给自己。 一个很好的选择是使用内容分发网络(CDN),但要考虑到这种情况:CDN(包括可替代的 CDN)可能会失效,这时本地副本能代替它来进行传输。
  • 将浏览器渲染页面所需 HTTP 请求数量最少化。
  • 用Google的 Closure Compiler 压缩 JavaScript,当然也可以使用 其他压缩工具
  • 确保有一个 favicon.ico 文件在网站的根目录,也就是说 /favicon.ico。浏览器会自动请求它,即使在 HTML 中并未提及到它。如果没有 /favicon.ico,那么请求返回的结果是 大量的 404 错误,这将会耗尽服务器的带宽。

SEO(搜索引擎优化)

  • 使用“对搜索引擎友好”的链接,比如说 example.com/pages/45-article-title 优于 example.com/index.php?page=45。是 googlebot(Google 的 web 爬虫)用来替换 #! 的。换句话说,./#!page=1 会被Google搜索引擎转成 ./?_escaped_fragments_=page=1。 (通常来说 URL 中的 # 后的东西都不会被传到服务器上,所以,为了要让 Google 可以抓取 AJAX 的东西,你需要使用 #!,而 Google 会把“#!”转成“_escaped_fragment_”来向服务器发请求,Twitter 的大量链接者是#!的,比如:https://twitter.com/#!/your_activity —— 陈皓注)。另外,用户也许会使用 Firefox 或 Chromium,那么 history.pushState({"foo":"bar"}, "About", "./?page=1"); 是一个很不错的命令。因为即使地址栏上的地址改变了,页面也不会重新加载。这可让你使用 ? 而不是 #!来动态加载内容了,也告诉服务器,当下次访问该页面时给该链接发邮件,AJAX 无须再发送一个额外的请求了。
  • 别使用 “点击这里” 这类的链接。这是浪费一个 SEO 的机会,并且会对使用屏幕朗读器用户造成困惑。
  • 拥有一个 XML 网站地图,它的默认路径最好是 /sitemap.xml。
  • 当你有多个 URL 指向同一个内容时,请使用 <link rel="canonical" ... />。这个问题可利用 Google Webmaster Tools 解决。
  • 使用 Google Webmaster Tools 和 Bing Webmaster Tools
  • 在一开始就正确安装 Google Analytics (或一个开源的分析工具,如 Piwik)。
  • 要知道 robots.txt 和搜索引擎爬虫是如何工作的。
  • 重定向请求(使用 301 永久性移走),要求 www.example.com 重定向到 example.com (或反过来),从而防止分裂两个站点之间的谷歌排名。
  • 知道并不是所有的爬虫都是好的,有些爬虫的行为并不好。
  • 如果有非文本内容(如视频等)需要添加到 Google 网站地图的话,你可以到 Tim Farley’s answer 看看,里面有一些关于这方面的,而且不错的信息。

技术

  • 搞懂 HTTP 协议,以及诸如 GET 、POST、sessions 和 cookies 这些概念,而且要知道“无状态”是什么意思。
  • 根据 W3C 文档 编写你的 XHTML / HTML 和 CSS 代码,并确保它们 有效。这里的目的是避免浏览器的怪异模式,并让它们更容易在非传统浏览器(如屏幕阅读器和移动设备)上运行。
  • 搞懂浏览器是如何处理 JavaScript。
  • 搞懂页面上的 JavaScript、样式表单和其他资源是如何加载和运行的,并考虑它们对性能的影响。现在广泛认同的做法是:除了通用脚本,如 analytics apps 或 HTML5 shims,将其它脚本放到页面底部
  • 搞懂 JavaScript 沙箱如何工作,特别是你打算用 iframes。
  • 要意识到 JavaScript 可能会被禁用,因此 AJAX 也只是一个扩展,不一定会被运行。即使大多数普通的用户并不会理会 JavaScript 被禁用,但要记住 NoScript 正变得更流行,移动设备可能默认禁止 JavaScript,而且 Google 在索引你的网站时,并不会执行大多数 JavaScript。
  • 学会区分 301 和 302 重定向 的不同之处(这也是一个 SEO 问题)。
  • 尽可能多地学习你部署平台的相关知识。
  • 考虑使用 Reset Style Sheet(重置样式表单) 或 normalize.css
  • 考虑使用 JavaScript 框架(如 jQueryMooToolsPrototypeDojo 或 YUI 3),它们会解决很多在使用 JavaScript 操作 DOM 时的浏览器差异问题。
  • 把性能和 JS 框架合在一起讨论,考虑使用诸如 Google Libraries API 服务来加载框架, 以至于浏览器能使用已缓存框架的副本,而不是从你的网站下载同样的副本。
  • 不要重复造轮子。在做任何事之前,可搜索一个组件或案例是如何实现的。但有 99% 机会是其它人已经做过了,并发布了 OSS 版本的代码。
  • 另外,即时确定你需要的是什么,但也别使用太多库。特别是在 Web 客户端,保持轻量、快速和灵活非常重要。

BUG 修复

  • 要明白你将花费 20% 时间敲代码,而剩下 80% 的时间是在维护你的代码,所以代码质量很重要。
  • 建立一个良好的错误报告解决方案。
  • 为用户提供一个能向你提交建议与批评的系统。
  • 为将来的维护和技术支持人员撰写文档,解释清楚系统是怎么运行的。
  • 经常备份!(并确保那些备份是可用的)除了备份机制,你还必须有一个恢复机制。
  • 使用版本控制系统来存储你的文件,如 SubversionMercurial 或 Git
  • 别忘记进行验收测试。框架(如 Selenium)能为你提供相应帮助。特别是如果你想完全自动化测试,也可通过使用持续集成工具,比如 Jenkins
  • 在网站运行时,要确保你有足够的日志,当然你可以使用框架,如 log4jlog4net 或 log4r。因为当你的网站某部分发生错误,你将需要一种方式找出是哪里发生的。
  • 当日志能确保你能同时捕捉到处理异常和未处理异常。那么可通过记录/分析输出的日志,可显示网站的关键问题出现在哪里。

其他

  • 服务器端和客户端都要监控和分析(应主动而不是被动)。
  • 使用能与用户保持联系的服务(如 UserVoice 和 Intercom,或其它类似的工具)。
  • 采用 Vincent Driessen 的 Git 分支模型(Git branching model)。

文中有很多省略掉的东西,并不是因为它们不是有用的答案,而是它们过于详细,且超出本问题的范围。而对于想懂得更多的人来说,他们希望学到更多的东西,因此他们应该知道这些概述。另外,我也欢迎大家编辑补充这个答案,因为我可能忽略了一些东西或犯了一些错误。

关于作者: J.c

时间: 2024-10-08 05:28:11

干货:Web应用上线之前程序员应该了解的技术细节的相关文章

C语言是编程小白的噩梦,WEB开发成为转行程序员的福音!

大多数大学生接触的第一门编程课便是C语言,这对于一个完全不懂计算机的人可能是噩梦. 不少人初次上C语言课都会被指针绕得晕头转向,然而大部分编程工作并不需要你关心指针的使用.此外,C语言对可视化编程并不友好,用C语言编写图形化界面十分繁琐.在这种情况下,很多大学生都会问C语言能做什么? C语言看似简单,实则无比强大,它主要的用途是系统级编程,操作系统,数据库,编译器,虚拟机等等,可是,并不是每个人都愿意去尝试或者有机会接触. 这会导致大多数人学了C语言并没有多少成就感和兴趣,甚至因为这门课怀疑自己

程序员Web面试之前端框架等知识

基于前面2篇博客: 程序员Web面试之jQuery 程序员Web面试之JSON 您已经可以顺利进入Web开发的大门. 但是要动手干,还需要了解一些已有的前端框架.UI套件,即要站在巨人肩膀上而不是从轮子开始造汽车. 下面就Web开发用到的前端框架.UI套件.UI插件一一列举(排名不分先后): jQuery UI jQuery UI以 jQuery 为基础的开源 JavaScript 网页用户界面代码库.包含底层用户交互.动画.特效和可更换主题的可视控件.包含了许多维持状态的小部件(Widget)

程序员到项目经理:从内而外的提升

转自:http://www.cnblogs.com/watsonyin/archive/2012/09/10/2679528.html 目录 从程序员到项目经理(一):为什么要当项目经理 从程序员到项目经理(二):升职之辨 从程序员到项目经理(三):认识项目经理 从程序员到项目经理(四):外行可以领导内行吗 从程序员到项目经理(五):程序员加油站,不是人人都懂的学习要点 从程序员到项目经理(六):程序员加油站 — 懂电脑更要懂人脑 从程序员到项目经理(七):程序员加油站 — 完美主义也是一种错

程序员能力矩阵Programmer Competency Matrix

注意:每个层次的知识都是渐增的,位于层次n,也蕴涵了你需了解所有低于层次n的知识. 计算机科学 Computer Science 软件工程 Software Engineering     程序设计 Programming         经验 Experience 学识 Knowledge 软件界一个无可争议的事实是,不同程序员的效率有差别,而且差别很大.许多专家将优秀程序员和一般程序员区分地很清楚. 大多数研究得出结论认为,一般程序员跟优秀程序员之间在工作效率和质量上存在10:1的关系:优秀

从程序员到项目经理

“从程序员到项目经理”,这个标题让我想起了很久以前一本书的名字<从Javascript到Java>.然而,从Javascript到Java充其量只是工具的更新,而从程序员到项目经理,却是一个脱胎换骨的过程.从Javascript到Java,是一个取巧的方法:而从程序员到项目经理,却并无捷径可走,必须从内而外的改变和提升. 一.为什么要当项目经理 1. 问题本质 如果我对一个老程序员说:“有必要转项目经理啦”,很多人第一反应是“为什么一定要当项目经理?!”,反问很给力,基至会让人哑口无言.但反问

每个程序员都必读的12篇文章

英文原文:10 Articles Every Programmer Must Read 作为一名 Java 程序员和软件开发人员,那些每个程序员都应该知道的 XXX 的文章教会了我不少东西,它们提供了某个特定领域的一些实用的并且有深度的信息,这些东西通常很难找到.在我学习的过程中我读到过许多非常有用的文章,我把它们添加到了书签里,方便以后阅读或者引用.我个人认为所有开发人员都能从这些文章中受益,因此我也写了篇"每个程序员都应该了解的"文章,准备分享给你们.这是我的个人收藏.在这篇文章中

对于程序员说的话,项目经理们是这样理解的

程序员:就目前的设计,我大概一周内就可以搞定基本框架.然后我们从头再优化整理.完善设计, 在接下来的一周提交一个稳定的版本. 项目经理的理解:整个项目只要两个礼拜就可以搞定. 程序员:是的,我可以写一些Web服务,通过这个服务,其他的开发人员能够与我们的系统进行交互. 项目经理的理解:他一人就可以构建出一个每分钟能够承受百万用户的负载均衡Web服务网站. 程序员:我们需要和下一版本负责人开个会,告诉他们除非有合适的构建部署服务器,我们无法按时完成项目. 项目经理的理解:没戏了!(泪奔中...)

每个程序员都必读的10篇文章

作为一名Java程序员和软件开发人员,那些每个程序员都应该知道的XXX的文章教会了我不少东西,它们提供了某个特定领域的一些实用的并且有深度的信息,这些东西通常很难找到.在我学习的过程中我读到过许多非常有用的文章,我把它们添加到了书签里,方便以后阅读或者引用.我个人认为所有开发人员都能从这些文章中受益,因此我也写了篇“每个程序员都应该了解的”文章,准备分享给你们.这是我的个人收藏.在这篇文章中,你会看到每个程序员都应该了解的一些经典文章,涵盖了内存,unicode,浮点数,网络,面向对象设计,时间

20年资深程序员编程经验分享

原文作者乔纳森·丹尼可(Jonathan Danylko)是一位自由职业的web架构师和程序员,编程经验已超过20年,涉足领域有电子商务.生物技术.房地产.医疗.保险和公用事业. 从11岁时,我就一直在编程,并且一直都很喜欢技术和编程.这些年来,我积累了一些艰难又容易的经验.作为一名程序员,你或许还没这些经验,但我会把它们献给那些想从中学到更多的朋友. 虽然我想我会持续更新这些经验,可能还会有更多的感想,但就我这20年来看,我想下面这个列表中基本不需要增添额外的东西了.下面就是我至今最难忘的经验