网站公开之前,Web应用程序的程序员应考虑哪些技术细节?


2188

实现Web应用程序技术细节的程序员在将该站点公开之前应该考虑哪些事项?如果杰夫·阿特伍德可以忘记左右的HttpOnly饼干站点地图 跨站点请求伪造 都在同一个网站,有什么重要的东西可能我被遗忘呢?

我正在从Web开发人员的角度考虑这一问题,以便其他人为该网站创建实际的设计和内容。因此,尽管可用性和内容可能比平台更重要,但程序员对此几乎没有发言权。您确实需要担心的是,您的平台实施稳定,性能良好,安全并且可以满足任何其他业务目标(例如花费不多,构建时间太长以及在Google中的排名与内容支持)。

从开发人员的角度考虑这一点,该开发人员在一个相当受信任的环境中完成了Intranet类型应用程序的一些工作,并且即将出手,并为整个糟糕的大型互联网推出一个可能受欢迎的网站。

另外,我正在寻找的内容不仅仅是模糊的“ Web标准”响应。我的意思是,HTML,JavaScript和HTTP上的CSS几乎都是给定的,尤其是当我已经指定您是专业的Web开发人员时。所以超越的是,哪个标准?在什么情况下,为什么? 提供指向标准规范的链接。

Answers:


2645

这里的想法是,我们大多数人应该已经知道此列表中的大部分内容。但是可能只有一两个项目您之前没有真正研究过,或者没有完全理解,或者甚至从未听说过。

界面和用户体验

  • 请注意,浏览器执行标准不一致,并确保您的网站在所有主要浏览器上都能正常运行。至少要针对最近的Gecko引擎(Firefox),WebKit引擎(Safari和某些移动浏览器),Chrome,您支持的IE浏览器(利用应用程序兼容性VPC图像)和Opera进行测试。还应考虑浏览器如何在不同的操作系统中呈现您的网站
  • 考虑人们如何使用主要浏览器以外的网站:例如手机,屏幕阅读器和搜索引擎。-一些辅助信息:WAISection508,移动开发:MobiForge
  • 分阶段:如何在不影响用户的情况下部署更新。有一个或多个测试或暂存环境可用于实现对体系结构,代码或主要内容的更改,并确保可以以受控方式部署它们而不会破坏任何内容。有一种自动方式,然后将批准的更改部署到实时站点。结合使用版本控制系统(git,Subversion等)和自动构建机制(Ant,NAnt等),可以最有效地实现这一点。
  • 不要直接向用户显示不友好的错误。
  • 不要将用户的电子邮件地址用纯文本形式填写,否则将被垃圾邮件杀死。
  • 将属性添加rel="nofollow"到用户生成的链接中,以避免spam
  • 在您的网站中建立经过深思熟虑的限制 -这也属于“安全性”下。
  • 了解如何进行渐进增强
  • 如果该POST成功,则在POST 之后重定向,以防止刷新再次提交。
  • 不要忘记考虑可访问性。这总是一个好主意,在某些情况下是法律上的要求WAI-ARIAWCAG 2是该领域的良好资源。
  • 阅读不要让我想

安全

性能

  • 必要时实施缓存,了解并正确使用HTTP缓存以及HTML5 Manifest
  • 优化图像-不要将20 KB的图像用于重复的背景。
  • 压缩内容以提高速度,请参见brotligzip / deflate(使用deflate更好)。
  • 组合/连接多个样式表或多个脚本文件,以减少浏览器连接的数量,并提高gzip压缩文件之间重复项的能力。
  • 看看Yahoo Exceptional Performance网站,那里有很多很棒的指南,包括改善前端性能及其YSlow工具(需要Firefox,Safari,Chrome或Opera)。另外,Google页面速​​度(与浏览器扩展一起使用)是性能分析的另一个工具,它也可以优化图像。
  • CSS Image Sprites用于工具栏等较小的相关图像(请参阅“最小化HTTP请求”点)
  • SVG图像精灵用于工具栏等较小的相关图像。SVG着色有点棘手。你可以在这里阅读。
  • 繁忙的网站应考虑跨域拆分组件。特别...
  • 静态内容(即图像,CSS,JavaScript和通常不需要访问Cookie的内容)应进入一个不使用Cookie的单独域中,因为某个域及其子域的所有Cookie都会随每个请求一起发送到域及其子域。一个不错的选择是使用内容分发网络(CDN),但要考虑CDN可能会失败的情况,方法是包括其他CDN或可以提供的本地副​​本。
  • 最小化浏览器呈现页面所需的HTTP请求总数。
  • 选择一个模板引擎并使用gulp或grunt等任务运行器渲染/预编译它
  • 确保favicon.ico网站的根目录中有一个文件,即/favicon.ico。即使HTML中根本没有提到图标,浏览器也会自动请求它。如果您没有/favicon.ico,这将导致大量404,从而耗尽服务器的带宽。

SEO(搜索引擎优化)

  • 使用“搜索引擎友好”网址,即使用example.com/pages/45-article-title代替example.com/index.php?page=45
  • 当使用#动态内容的改变##!,然后在服务器上$_REQUEST["_escaped_fragment_"]是什么Googlebot使用代替#!。换句话说,./#!page=1变为./?_escaped_fragments_=page=1。另外,对于可能使用FF.b4或Chromium的用户,history.pushState({"foo":"bar"}, "About", "./?page=1");这是一个很好的命令。因此,即使地址栏已更改,页面也不会重新加载。这使您可以使用?而不是#!保留动态内容,并在通过电子邮件向我们发送此页面后的链接时通知服务器,而AJAX不需要再次提出其他请求。
  • 不要使用显示“单击此处”的链接。您正在浪费SEO机会,这对于拥有屏幕阅读器的人来说会更困难。
  • 有一个XML网站地图,最好在默认位置/sitemap.xml
  • <link rel="canonical" ... />当您有多个指向相同内容的网址时使用,也可以通过Google网站站长工具解决此问题。
  • 使用Google网站管理员工具Bing网站管理员工具
  • 立即开始安装Google Analytics(分析)(或像Piwik这样的开源分析工具)。
  • 了解robots.txt和搜索引擎蜘蛛的工作方式。
  • 重定向请求(使用301 Moved Permanently)要求www.example.comexample.com(或者反过来),以防止分裂谷歌这两个网站之间的排名。
  • 知道那里可能有行为不端的蜘蛛。
  • 如果您有非文本内容,请查看Google的视频等站点扩展名。Tim Farley的答案中对此有一些很好的信息。

技术

  • 了解HTTP以及诸如GET,POST,会话,Cookie之类的东西,以及“无状态”的含义。
  • 根据W3C规范编写XHTML / HTMLCSS,并确保它们通过验证。此处的目标是避免浏览器怪癖模式,并且额外的好处是,可以更轻松地与非传统浏览器(例如屏幕阅读器和移动设备)一起使用。
  • 了解如何在浏览器中处理JavaScript。
  • 了解如何加载页面使用的JavaScript,样式表和其他资源,并考虑它们对感知性能的影响。现在,通常认为将脚本移动到页面底部是适当的,但通常是诸如分析应用程序或HTML5填充之类的异常。
  • 了解JavaScript沙箱的工作方式,尤其是在您打算使用iframe的情况下。
  • 请注意,JavaScript可以并且将被禁用,因此AJAX是扩展,而不是基准。即使大多数普通用户现在仍将其保留,请记住NoScript变得越来越流行,移动设备可能无法按预期运行,并且在为网站建立索引时Google不会运行您的大部分JavaScript。
  • 了解301和302重定向之间区别(这也是SEO问题)。
  • 尽可能多地了解您的部署平台。
  • 考虑使用“ 重置样式表”normalize.css
  • 考虑一下JavaScript框架(例如jQueryMooToolsPrototypeDojoYUI 3),当使用JavaScript进行DOM操作时,它们会隐藏很多浏览器差异。
  • 综合考虑性能和JS框架,请​​考虑使用诸如Google Libraries API之类的服务来加载框架,以便浏览器可以使用已缓存的框架的副本,而不是从您的站点下载副本。
  • 不要重新发明轮子。在进行任何操作之前,请搜索有关如何执行操作的组件或示例。有人完成并发布了OSS版本的代码的机率高达99%。
  • 另一方面,在确定需求之前,不要从20个库开始。尤其是在客户端Web上,保持事物的轻量,快速和灵活几乎总是越来越重要。

错误修复

  • 了解您将花费20%的时间进行编码,而将80%的时间用于维护,因此请相应地进行编码。
  • 设置良好的错误报告解决方案。
  • 有一个可以让人们提出建议和批评的系统。
  • 记录应用程序如何为将来的支持人员和执行维护的人员工作。
  • 进行频繁备份!(并确保这些备份可以正常使用)具有还原策略,而不仅仅是备份策略。
  • 使用版本控制系统来存储文件,例如SubversionMercurialGit
  • 不要忘记进行验收测试。Selenium等框架可以提供帮助。特别是如果您完全自动化测试,则可以使用诸如Jenkins之类的持续集成工具。
  • 确保使用诸如log4jlog4netlog4r之类的框架拥有足够的日志记录。如果您的在线站点出了问题,则需要一种找出原因的方法。
  • 记录日志时,请确保同时捕获了已处理的异常和未处理的异常。报告/分析日志输出,因为它将向您显示站点中关键问题的位置。

其他

  • 实施服务器端和客户端的监视和分析(应该是主动而不是被动的)。
  • 使用UserVoice和Intercom之类的服务(或任何其他类似工具)来不断与用户保持联系。
  • 遵循Vincent DriessenGit分支模型

遗漏了很多东西,不一定是因为它们不是有用的答案,而是因为它们太详细,超出范围,或者对于希望了解其应了解的事情的人来说太过分了。也请随时进行编辑,我可能错过了一些东西或犯了一些错误。


7
您的某些SEO建议是不好的。使用表格还是div都没关系(Google本身已经确认了这一点)。那个SEF URL东西……我讨厌那些“假URL”,其中ID是唯一确定页面的唯一东西。“ 45-blah”将是同一页。它也不是用户友好的。
DisgruntledGoat

152
然后编辑它。我并没有写大部分内容:我只是维护它-我继承了这份工作,因为我问了这个问题,专门征求了这个更大的答案,而且我真的很想知道我们能提供什么。贡献越多越好。
乔尔·科洪

327
还有一点要注意:如果您确实要回来编辑它,请尽量尊重所写内容。不要仅仅删除您不同意的部分:实际上要花一些时间解决缺点并提供更好的东西。
Joel Coehoorn

16
我建议您添加到“安全性”部分的一件事是,应将您提供的所有文件与允许的文件夹白名单进行比较,或将Web服务器“监禁”。这会阻止某人使用http://server/download.php?file=../../etc/password。切勿向用户公开文件路径。
Philluminati 2011年

10
例如,您不仅会跳上车来开始驾驶。取而代之的是,您上关于该车的正确操作的课程,最终必须通过测试证明自己可以驾驶。对于某些人来说,这需要很多很多小时的学习。是的,我等同于学习如何正确构建Web应用程序与学会驾驶汽车,因为与正确的挡泥板弯折机相比,无法正确构建应用程序肯定会导致更大程度的破坏人们的生命,包括更大范围的破坏。经济损失。死亡?好吧,取决于开发人员搞砸了哪种类型的应用程序。
NotMe 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.