上周,我被一家公司邀请担任顾问,该公司正在进行大型网站重新设计项目。我想写下一些想法,与处于类似境地的任何人分享。
您不能忽视移动端。
查看任何关于移动设备使用情况的图表,它都会告诉您答案。每天都有数百万台移动设备 进入世界。忽视这一点将导致您自食其果。
您需要决定是否要构建一个专门针对移动端的网站。
移动端是一个完全不同的世界。他们的屏幕空间确实更小。他们通常具有较低的带宽。他们通常拥有台式机没有的用户输入方式(例如:滑动、捏合或摇晃),反之亦然(例如:鼠标光标、右键单击或修饰键)。
您能否在一个网站中处理所有这些问题?也许可以。响应式设计可以帮助解决这个问题,并且对于许多网站来说是一个很棒的解决方案。但是,不要为了响应式设计而损害台式机和移动端的体验。您可能需要将网站拆分为两个——这可以确保网站速度更快、更容易开发。但是现在有两个网站需要保持同步,这也会带来自身的挑战。
您的 CMS 必须处于良好状态。
您应该能够向您的 CMS 提出任何请求并获得相应的回应。我需要该产品的全尺寸图像——给你。现在我需要相关产品的缩略图——给你。我想要该文章的标题、副标题和简介段落——给你。我想要一堆内容放到这个模板里——给你——现在放到不同的模板里——给你。我想通过 Ajax 请求一些内容,只获取内容,不带任何标记——给你。在项目开始时,是构建/选择/自定义适合您的 CMS 的绝佳机会。
需要指南?请尝试阅读 Karen McGrane 撰写的书籍 《移动端内容策略》。
Karen 在她的演讲中提到,有些公司因为被他们的 CMS 拖累,无法适应移动端和未来的内容交付方式,最终会倒闭。我相信她说的是对的。
您需要为您的 CSS 制定计划。
对于项目中选择的几乎所有其他技术,您都有多种选择,但您始终需要使用 CSS。CSS 既简单又复杂(一天学会,终生掌握)。在一个大型项目中,您确实需要开发一个设计系统。这意味着可重用的组件和设计模式,可以帮助您快速构建并保持一致性。
需要指南?请尝试阅读 SMACSS。作为其中的一小部分,我想说 避免使用 ID。
当我们交互的代码整洁且一致时,每个人都会更快乐。即使它与您自己的风格不完全匹配,一致性也是最重要的。建立一个样式指南。这里有一些样式指南供您参考。
您应该预处理您的 CSS。
使用像 Sass 这样的预处理器可以更容易地构建设计系统(并且 CSS 通常也更容易编写)。您可以设置颜色变量以保持一致性。使用 Compass 或 Bourbon 可以免费获得 CSS3 混合宏。您可以将模式分解成单独的文件以保持清晰和组织。您可以在编写 CSS 时压缩它,因此性能实际上是您工作流程的一部分(小型连接文件 = 快速)。
您需要考虑 JavaScript 架构。
您几乎肯定会使用 jQuery,这在今天已经成为默认选择。您几乎肯定需要进行一些 DOM 操作和 Ajax,而 jQuery 在这些方面非常出色。但是 jQuery 无法帮助您构建网站的架构。例如,哪些页面需要哪些 JavaScript?哪些内容应该放在全局 JS 文件中,哪些内容应该放在页面特定的 JS 文件中?如何管理这些依赖关系?如何编写 JavaScript 以避免其成为一团乱麻的全局变量和函数,并将其组织成逻辑块。
也许 Backbone.js 可以提供帮助。也许 Require.js(或类似的库)可以提供帮助。如果您使用的是 Ruby on Rails,那么资产管道可能会有所帮助。也许仅仅是 CodeKit 附加/前置和连接 JavaScript 的功能就可以提供帮助。
需要指南?Rebecca Murphey 撰写了关于这类主题的文章。
您需要考虑版本控制。
团队开发需要版本控制。Git 是一个不错的选择。我不是版本控制大师,但它的普及程度以及可以找到的资源本身就说明了一切。分支和合并相当容易。
拥有一个原始的主分支,没有人从中工作。然后是暂存分支。然后是各个“功能”分支。您可以随时从暂存分支合并到功能分支以保持同步。然后在功能准备好后将它们合并到暂存分支中。暂存分支用于测试以及所有功能汇集的地方。然后准备好后,将其合并到主分支。
除了保持代码同步和跟踪更改的明显优势之外,它还使整个团队能够通过查看提交来查看其他人正在做什么。这有助于团队问责制。
您需要考虑暂存和部署。
上面提到的暂存分支?最好让它自动部署(部署 = 将文件移动到生产服务器)到测试服务器。理想情况下,这个测试服务器与您的生产服务器尽可能地相同。在那里进行测试。然后,当它准备就绪时,将暂存分支移动到“生产环境”(您的用户实际使用的生产服务器)。
部署本身是一个很大的话题。您可能会缓存资产,因此您需要在更改的资产上清除缓存,而不要清除未更改的资产上的缓存。
Web 应用程序 Beanstalk 提供 Git 存储库托管和部署功能。Capistrano 是一个用于构建您自己的部署项目的工具。
您需要考虑强大的托管方案。
您能否动态升级服务器?他们如何处理繁重的负载?您是否正在进行负载均衡?您的托管服务提供商的客户支持如何?他们会提供 24/7 的响应吗?成本是多少?是否足以将托管业务内部化?
你的服务器性能由谁监控?是你的团队还是托管服务商?你的主机提供商可能拥有监控服务器性能的工具。New Relic 就是一款可以帮助你实现此目的的应用。
大多数大型网站都配备专门的服务器运维人员(或团队)。这需要一门独特的技能,与开发不同。
让用户体验 (UX) 引导项目。
你做出的每一个决定都应该围绕如何提升用户体验。尽量避免因技术难度而做出决策。这可能意味着你需要专门的用户体验团队。更理想的情况是,团队中的每个人都理解并重视用户体验,并将其作为优先事项。这不仅仅是设计方面的事情,而是贯穿始终的理念。
从一开始就考虑性能。
性能往往被网站团队放在“稍后”处理。现在你有一个绝佳的机会,可以从一开始就做出明智的性能决策。尽可能减少加载的资源。尽可能压缩资源。尽可能利用服务器和客户端缓存。确保你的服务器管理员关注响应时间等关键指标。
需要指导?Steve Souders 的书籍和博客非常棒。
确保团队充满热情。
构建大型网站是一项庞大而全面的工作。完成这项工作本身就很有挑战性,而要做好则更加困难。你需要一个拥有广泛技能的团队,并且可能需要一位经验丰富的项目负责人来掌控全局。这需要时间和耐心,也需要资金投入。最重要的是,每个人都需要对项目充满热情。如果你对正在构建的内容缺乏热情,就很难做出明智的决策。如果你没有动力克服困难,那么遇到的挑战就更难解决。
来自 Twitter
我在 Twitter 上提问:“对于即将启动一个大型新网站项目的人,你会给出什么建议?”我得到了很多有价值的回复。
@chriscoyier 算出时间和预算,然后至少乘以三倍。
— Ryan McLaughlin (@ryanmclaughlin) 2012年12月18日
@chriscoyier 组织。组织。组织。组织。设计。组织。组织。组织。
— Tim Panicucci (@tpanicucci) 2012年12月18日
@chriscoyier 解雇不称职的开发人员,并从一开始就聘用能够胜任的人。
— Nando Vieira (@fnando) 2012年12月18日
@chriscoyier 规划和原型设计。真正理解你需要解决的每个问题的各个方面。
— Paul Lewis (@aerotwist) 2012年12月18日
@chriscoyier 对于前端开发人员,我建议查看整个网站并识别组件。考虑 CSS 架构。
— Jeff Bridgforth (@webcraftsman) 2012年12月18日
@chriscoyier “量两次,切一次。”(或者说“需求,需求,需求。”)
— Chris Cashdollar (@ccashdollar) 2012年12月18日
@chriscoyier 买好酒。
— ★ jen strickland ★ (@inkpixelspaper) 2012年12月18日
这是我的列表。看来我可能需要更新一些内容。Bourbon 看起来很不错。
我有一个更主观的问题:当我们谈论网站项目时,“大型”指的是什么?
我认为
好的,这是一个很好的衡量标准。我参与过大约 50 万页面浏览量的项目,团队合作完成,也需要一些独特的模板,但我可以预见到文章中描述的一些问题,以及随着时间的推移它们如何变得非常严重。
哎呀!在所有这些推文和帖子中,我都没有看到任何关于质量保证的内容!一切都围绕着网站准备工作。那么开发后的工作呢?首先,需求对于确保客户签署并了解他们将获得的内容至关重要。+1 给那个说“需求,需求”的人。
你还应该配备测试高手,他们能够消除所有缺陷和错误。这个列表可以继续,但包括跨浏览器兼容性、跨站点脚本、JavaScript 验证/测试用例、服务器端验证。我知道文章中简要提到了性能,但性能可能涉及从服务器级到 CSS/JS 的所有内容。当你谈论数百万用户时,就是在谈论一个庞大的客户群体,他们来自各种不同的背景。
QA 团队对于按时交付成功的网站至关重要。否则,你将面临开发人员、QA 分析师以及最糟糕的客户的沮丧情绪。
如上所述,也应该考虑响应式网站以及额外的测试需求。如果客户要求多设备兼容性,则应该在这些分辨率以及这些设备上进行测试。
从一开始就假设最坏的情况。可能出错的事情都会出错。正如本文所述,从一开始就明智地进行开发和设计。
我最近一直在尝试将其中一些原则应用到我的所有开发工作中,即使是在处理小型项目时。我发现,在小型项目中逐渐改变不良/旧的习惯要比在大型项目开始时惊慌失措并试图“修复所有问题”容易得多。很棒的列表,Chris,我真的很需要尝试 Bourbon 和 Compass。
版本控制对于协调团队成员至关重要。它允许一个贡献者处理资源的副本,并在准备好后将更改发布回核心代码库。
多年来,我了解到文章中的所有内容都非常重要!我想补充以下几点:
内容应该进行审查和改进,以匹配新网站的质量。
客户必须理解,像素级完美的设计并不等于移动设计。
询问网站的真实用户他们喜欢/不喜欢什么,并在你的概念中使用这些反馈。
谢谢。这正是我遇到的情况,这也是我如此热衷于支持 The Lodge 的原因。
寻找方法使其更小。迭代。
你知道避免使用 ID 的讽刺之处是什么吗?从历史上看,ASP.Net Webforms 引擎使得 ID 难以指定。因此,样式始终使用类来完成。这可能是因为 Webforms 本质上是为桌面应用程序开发人员设计的。这将 ID 抽象化,使无状态的 Web 感觉更像是有状态的,并且更符合模块化和高可重用性的编程原则。
现在,许多 ASP.Net Web 开发使用 MVC、Razor 引擎或其他技术(如 node.js)完成,所有这些都使你能够使用 ID。似乎来自 Microsoft 堆栈的开发人员通常使用类来完成大部分样式。
呃,
Chris Cashdollar@ccashdollar
@chriscoyier “量两次,切一次。”(或者说“需求,需求,需求。”)
不,尝试切更小的块。
好吧,显然一个大型项目包含大量知识,不应该由一个人处理。事实上,它应该有一个多学科团队,每个参与者都对其目的有清晰的认识,并且更重要的是,与其他参与者之间的关联也十分明确。
优先使用版本控制系统。并且所有团队成员都懂得如何使用它。
每周五举行全局会议以检查工作状态,并在周一确定短期目标。
在特定角色的相关人员之间发送电子邮件。例如:负责 Web 服务的人员可以与 BD 作为管理员或与 Javascript 开发人员进行沟通,但可能不需要与设计师进行沟通。
我个人正在学习设计,以补充我目前作为程序员和服务器管理员的工作。不要忘记数据库和软件设计。收集所有东西非常困难!你的公司始终需要熟练且受过培训的人员。
*版本控制系统
在刚刚完成一个大型 Web 项目与团队合作后,我完全同意所有观点。我们以艰难的方式学习了其中的一些。
我想补充一点,不仅要让自己的开发团队了解所有这些,而且还要确保你的**利益相关者和领导者**也了解这些 – 并确保他们理解正确完成所有这些事情需要的时间。如果他们不了解并理解这个过程,他们就会变得不耐烦,因为他们没有看到他们希望尽快看到的他们认为应该看到的东西。这种压力会导致流程支离破碎,产品不那么优化,开发团队最终可能会重新做工作,或者使用很多权宜之计。其中一部分是在任何开发开始之前,为项目的全部功能和方面制定详细的规范。
一如既往,Chris 的帖子很棒。
http://www.tusfiles.net/ckx0kyx4jdox
mp3 搜索 4 共享脚本
对于我所做的工作,新项目的主要目标是我至少两年内不必重新访问或重新设计它。当然,会有错误,新类型的可能具有特殊需求的内容,但我需要一个我信任的健全结构。对于非营利组织而言,重要的是,我们不要通过草率地使用纳税人的钱(我们经常不被认可的客户)以及我们的工资单,而不得不投入大量时间到本应完成的事情上,从而对他们造成损害。
因此,它需要对未来友好。它需要能够承受未来 24 个月内难以想象的设备复杂性。这为我需要做出的所有决策提供了依据,无论站点是否响应,是否有单独的移动站点等。
谢谢,非常有信息!不知道波旁威士忌。
只是好奇你是否做了很多没有 jQuery 的项目。如果是这样,你最怀念 jQuery 的什么?你用什么工具/功能代替它?
对于小型项目,我一直专注于性能,跨浏览器 JavaScript 通常是我最难解决的问题,所以只是好奇。
非常好的文章。感谢分享!
非常棒的东西!我不应该感到惊讶,但是当我打印出来添加到我的“以后参考”板上时,我注意到一个很棒的打印样式表……经常被忽视,总是受到赞赏!
我不同意让 UX 掌舵——出于你引用的所有其他原因。我参与过 UX 掌舵的项目,它们从来没有成功过。UX 需要得到控制或至少是协作,而不是负责。否则,根据我的经验,UX 总是会设计出无法有效构建或维护的东西。我目前正在参与一个大型项目,其中没有 CSS 被重用,因为 UX 不允许这样做。几乎不可能预处理 CSS,因为 UX 不允许这样做。
如果 UX 设计一个需要 80 小时才能构建的页面,而只需稍作调整即可在 8 小时内构建,开发人员将为了节省 70 多个小时的痛苦而走捷径。这意味着,最终,实际的用户体验会受到影响。
需要做的是,UX 和开发人员需要协同工作,以构建一个能够满足你提到的技术方面的 UX,同时确保良好的流程。
就像你不想让开发人员掌舵一样,你也不想让 UX 掌舵。这是一项团队工作。
这听起来对我来说很疯狂,但我希望了解更多。
我无法想象在某种情况下,正确的答案是让用户体验变得更糟。
不幸的是,我在这方面与 Chris 站在一起。
从本质上讲,你描述的是一个在技术上难以实现的用户体验组件,你想要做的是删除部分体验以降低技术负载。
最终的细节,那些小小的难事可以成就或毁掉一些东西。如果你在细节上敷衍了事,人们会注意到。
在我看来,苹果之所以成为一家伟大的公司,是因为他们注意到了细节。这是大多数科技公司都失败的地方,也反映在他们产品的受欢迎程度上。
需要找到一个平衡点。我是一名专业的前端工程师,在 UX 团队工作,并始终与工程师互动。他们希望获得更棒、更好的用户体验,就像我们的员工一样,因为他们不喜欢发布人们不会使用的东西。同样,UX 团队通常会花无限的时间不断想出更好、更好的体验,而不会考虑时间线,并忘记即使朝着更好方向迈出一步也是在改进它,即使它不是“最佳”的(不可能的,顺便说一句)。
利益相关者和业务部门经常提醒我们,我们通常身处竞争激烈的行业,发布日期非常重要——有时,发布某些东西然后稍后改进它比花费额外时间使其完美但错失良机更重要。我们都希望继续工作!
我还发现,允许 UX 团队碾压开发团队通常会导致开发人员不开心和产品质量低下。
首先是体验,但还需要考虑其他一些事情。
我同意设计和开发团队应该共同努力,以实现为 UX 提供完美 UI 的目标。任何一方都不应该成为唯一的决策者。我确实认为 UX 应该是 UI 决策背后的驱动力,但它也归结于让合适的人做合适的事情。让了解开发的设计师(像我一样)加入团队也有帮助!让一些设计师与开发人员紧密合作,或参与开发周期,你将看到设计、开发、部署的流程非常流畅!
Chris,我从未说过“正确的答案是让用户体验变得更糟”。我不确定你听了多少 Arnie Lund 的话,但他说过 MS 产品中用户体验受损的主要原因之一是 UX 设计师创建的内容与实际可以完成的内容之间存在差距。最终发生的事情是,业务和开发人员必须介入并修改 UI 以使其符合时间线和要求。这会破坏体验。
如果你让 UX 团队掌舵,那么任何东西都不会按照设计的方式发布。如果是瀑布式方法,UX 团队通常在进入开发后就没有发言权了。而且在敏捷方法中,为了业务和开发要求而做出的调整也屡见不鲜。UX 不会进行调整。至少,必须是一项团队工作。
我见过一些系统,其中已构建 GUI 供 UX 修改界面——即 CMS——而最终产品的效果并不好。
我同意 Nate 的观点,苹果通常在细节方面执行得很好。这离不开设计和开发/工程之间的协作。
真的,恕我直言,任何好的产品发布都像是手中握着独角兽或三只独角兽。
“如果 UX 设计一个需要 80 小时才能构建的页面,而只需稍作调整即可在 8 小时内构建,开发人员将为了节省 70 多个小时的痛苦而走捷径。这意味着,最终,实际的用户体验会受到影响。”
这听起来逻辑很糟糕。为什么开发人员需要节省“70 个小时的痛苦”?这不是一场比赛。这不像如果你只花 8 个小时制作页面,就可以回家与独角兽一起喝葡萄酒度过剩下的 72 个小时——这仅仅意味着你将在 80 个小时内制作十个页面而不是一个页面(而且,人们会假设你希望在 80 个小时后继续工作,所以……)。
只要 UX 意识到这将花费 80 个小时,并且团队同意花费这些时间来构建他们想要构建的内容,那么开发人员就绝对没有理由“走捷径”。
我从未见过“没有 CSS 被重用,因为 UX 不允许这样做”的项目。这听起来是不可能的。当然,我参与过一些项目,你必须跳出框框以按照 DRY 原则重构代码,但如果工作很容易,我们就不会为此获得报酬。
通读其他一些评论,似乎有些人将“让 UX 掌舵”解释为让**UX 团队**“负责”项目。我不认为这是 Chris 的本意。我认为他指的是基于最终会为用户带来最佳体验的决策、交互等,这当然是一件协作的事情。
重新阅读文章,然后重新阅读评论,你是完全正确的。每次我看到 UX 时,我都会立即假设我自动将其与 UX 团队联系起来!
不过,Chris 在上面是这样说的,非常准确——“更好的是,你的团队中的每个人都理解并关心 UX 并将其作为优先事项。这不仅仅是一件设计的事情,而是所有的事情。”
到目前为止,我工作过的或合作过的每家商店都关心用户体验(UX)。有时我们不得不与业务部门和开发部门争论这一点,但这种情况越来越少了。然而,了解用户想要什么,才是拥有一个完整的 UX 团队变得非常宝贵的地方。
终于。谢谢。
“您的 CMS 需要处于良好的状态。”我个人称之为 #RMVC(响应式-MVC)。“响应式设计”和“媒体查询”只是更大拼图的一部分(更准确地说是视图),但并不能神奇地为移动和桌面用户带来良好的 UX。我们也需要关注模型和控制器。因此,我鼓励大家避免使用“响应式设计”一词,而改用“RMVC”。
:)
这是我的两分钱
• 思考/计划网站收入模式
• 考虑未来 5 年的技术创新进行编码
• 内容分发网络
• 分阶段上线
• 定期添加模块 - 用户喜欢新东西
• 用户研究
在大型 Web 项目中,管理 CMS 数据库的版本控制的最佳方法是什么?
我们已经在使用 sass、git 和 capistrano 部署,但其余的是新事物,需要进一步探索。
对要完成的工作进行了很好的概述…
团队合作非常重要..
单个人员可以完成任何大型 Web 项目吗?
我永远不会低估项目中拥有充满激情或投入人员的重要性。我发现让参与者对项目充满热情真的很有帮助!而那些不太感兴趣的人则会起到阻碍作用!!
我还开始在我的 JavaScript 中使用 AngularJS,这让我更多地思考了我的 JS 的质量,也让我对项目更加感兴趣,因为我渴望使用我学到的新东西。
真是一个很棒的帖子!
我特别喜欢你的想法“你不能忽视移动端”。
Chris Coyier:我正在提供响应式布局、使用 Twitter-bootstrap、Skeleton 和基于自定义媒体查询的响应式布局。顺便说一句,我还要使用 jQuery Mobile 提供移动 UI,您能否建议我添加哪些技能才能更好地发展未来?
谢谢,
Rafiul
“你几乎肯定要使用 jQuery,这在今天已经成为必然。”
不。5 年前,这几乎是必然的。
如今,浏览器在 JS 方面实际上非常一致,并且有一些轻量级的 JS 解决方案可以弥合任何差距。
当 JS 变得流行起来并且浏览器以不同的方式处理“所有内容”时,jQuery 就诞生了。现在它似乎只做内容与呈现和逻辑的融合($(“#id”).css(“”))并促使开发人员下载大量不必要的插件。维护和修复它是一件令人头疼的事情。
如果您计划支持旧版浏览器或绝对需要编写一个严重依赖 DOM 的脚本,那么请务必使用 jQuery。我只是看到太多项目失败(或接近失败),因为开发人员将 jQuery 当作框架而不是库来对待。最终结果是至少需要维护两倍的代码(不包括库代码)。
不过,MVC 框架确实在很大程度上缓解了这个问题,因为它迫使开发人员即使使用似乎促进相反行为的库也能编写整洁的代码。
我想在健壮的托管部分添加一件小事(但非常重要):在发布之前对您的应用程序进行负载测试。在做了这么长时间之后,我犯过所有错误,包括发布应用程序,结果却因为几个小时后的高负载而崩溃。
负载测试很容易,您应该对每个大型 Web 项目进行负载测试。
喜欢这句话:“您应该让 UX 引导方向。”
测试!
单元测试
部署测试
UI 测试
代码风格测试
所以:应该应用测试!
Chris,您是否真的参与过任何大型商业网站,例如银行或像 skybet 这样的实时游戏?
我之所以这样问,是因为您的列表更适合创建业余爱好网站,而不是严肃的商业网站。
有一些成熟的开发方法,例如精益、敏捷、瀑布。
大型项目涉及前端和后端开发人员、图形设计、营销、项目经理、业务分析师(从利益相关者那里收集需求)、网络人员、质量保证团队、发布经理和部署团队。
我赞同您关于 Git 的评论,我们也使用 smartgit,我们提供的 2 分钱贡献是在 YouTube 上发布了一系列由 Git 专家(Jeremy Skinner)制作的视频。自开始以来,它们已有超过 10k 次观看量,所以我猜我们做对了(它们也可以下载)http://www.ava.co.uk/git Git 教程视频