网络技术的兴衰变迁
引言
当我向刚成为父母的朋友和家人提供建议时,我只说一点:当你开始觉得自己已经掌握了一切时,一切都会改变。就在你开始掌握喂养、尿布和规律小睡时,就该开始添加固体食物、如厕训练和整夜睡眠了。当你掌握了这些,又该上幼儿园了,小睡也变得稀少。这个循环周而复始。
如今,这对我们从事设计和开发工作的人来说也是如此。我在网络行业工作了近三十年,见证了思想、技术和科技的定期兴衰。每次我们开发者和设计师进入规律节奏时,总会有新的思想或技术出现,打乱一切,重塑我们的世界。
我们如何走到今天
我在90年代中期建立了我的第一个网站。那时的网页设计和开发是一片混乱,几乎没有什么既定规范。除了单列布局外,我们使用表格元素,通常用包含单个像素间隔GIF的空单元格来添加空白。我们用大量的字体标签来设置文本样式,每次想要改变字体样式时都要嵌套标签。我们只有三四种字体可供选择:Arial、Courier或Times New Roman。当Verdana和Georgia在1996年问世时,我们欢欣鼓舞,因为我们的选择几乎翻了一番。唯一安全的颜色是216种"网页安全"色,已知可在各平台间工作。少数交互元素(如联系表单、留言簿和计数器)大多由CGI脚本(当时主要用Perl编写)驱动。实现任何独特的视觉效果都需要一大堆技巧。交互通常仅限于网站的特定页面。
网页标准的诞生
在世纪之交,一个新的周期开始了。充斥着表格布局和字体标签的粗糙代码逐渐衰落,而对网页标准的推动日益增强。像CSS这样的新技术得到了浏览器制造商、开发者和设计师更广泛的采用。这种向标准的转变并非偶然或一夜之间发生的。它需要W3C和浏览器供应商之间的积极互动,以及像Web Standards Project这样的人的大力推广。A List Apart和Jeffrey Zeldman的《用网页标准设计》等书籍在教导开发者和设计师为什么标准很重要、如何实施标准以及如何向组织推销标准方面发挥了关键作用。而渐进增强等方法引入了内容应该对所有浏览器可用——对更先进的浏览器提供额外增强的理念。同时,像CSS Zen Garden这样的网站展示了当与坚实的语义HTML结构结合时,CSS可以多么强大和多功能。
像PHP、Java和.NET这样的服务器端语言取代了Perl成为主要的后端处理器,cgi-bin被扔进了垃圾箱。随着这些更好的服务器端工具的出现,网页应用的第一时代开始了,从内容管理系统开始(特别是在博客领域,有Blogger、Grey Matter、Movable Type和WordPress等工具)。在2000年代中期,AJAX为前端和后端之间的异步交互打开了大门。突然之间,页面可以在不需要重新加载的情况下更新其内容。一批JavaScript框架如Prototype、YUI和jQuery兴起,帮助开发者在标准支持水平参差不齐的浏览器间构建更可靠的客户端交互。图像替换等技术让巧妙的设计师和开发者能够显示他们选择的字体。而像Flash这样的技术使得添加动画、游戏甚至更多交互成为可能。
这些新技术、标准和技术在许多方面重振了行业。随着设计师和开发者探索更多样化的风格和布局,网页设计蓬勃发展。但我们仍然依赖大量的技巧。早期的CSS在基本布局和文本样式方面比基于表格的布局有了巨大改进,但当时的局限性意味着设计师和开发者仍然严重依赖图像来实现复杂形状(如圆角或斜角)和用于全长列外观的平铺背景(以及其他技巧)。复杂的布局需要各种嵌套浮动或绝对定位(或两者兼有)。用于自定义字体的Flash和图像替换是从五大字体中变化字体的良好开端,但这两种技巧都引入了可访问性和性能问题。JavaScript库让任何人都可以轻松地为页面添加一点交互,尽管代价是使简单网站的下载大小翻倍甚至翻四倍。
作为软件平台的网络
前端和后端之间的共生关系持续改善,这导致了现代网页应用的当前时代。在扩展的服务器端编程语言(不断增长,包括Ruby、Python、Go等)和更新的前端工具(如React、Vue和Angular)之间,我们可以在网络上构建功能齐全的软件。与这些工具一起出现的还有其他工具,包括协作版本控制、构建自动化和共享包库。曾经主要是链接文档的环境变成了无限可能的领域。
与此同时,移动设备变得更加强大,它们让我们可以随时随地访问互联网。移动应用和响应式设计为随时随地的新交互打开了机会。
强大的移动设备和强大的开发工具的结合促进了社交媒体和其他集中式工具的兴起,供人们连接和消费。随着在Twitter、Facebook甚至Slack上直接与他人联系变得更容易和更常见,对托管个人网站的需求减弱了。社交媒体提供了全球范围的连接,既有好处也有坏处。
我们现在的位置
在过去的几年里,感觉我们已经开始达到另一个重要的转折点。随着社交媒体平台分裂和衰落,人们对自己拥有内容的兴趣再次增长。制作网站有许多不同的方式,从托管纯HTML文件的经典可靠方法,到静态网站生成器,再到各种风味的内容管理系统。社交媒体的分裂也带来了代价:我们失去了发现和连接的关键基础设施。Webmentions、RSS、ActivityPub和IndieWeb的其他工具可以在这方面提供帮助,但它们仍然相对实施不足,对不太懂技术的人来说难以使用。我们可以建立惊人的个人网站并定期添加内容,但如果没有发现和连接,有时感觉我们可能就像在对着虚空喊叫。
浏览器对CSS、JavaScript和其他标准(如Web组件)的支持已经加速,特别是通过Interop等努力。新技术在比以前短得多的时间内获得全面支持。我经常了解到一个新功能并检查其浏览器支持,结果发现其覆盖率已经超过80%。如今,使用更新技术的障碍通常不是浏览器支持,而仅仅是设计师和开发者学习可用内容及如何采用的速度限制。
今天,通过几个命令和几行代码,我们可以原型化几乎任何想法。我们现在拥有的所有工具使得开始新事物比以往任何时候都更容易。但是这些框架在初始交付中可能节省的前期成本最终会到期,因为升级和维护它们成为我们技术债务的一部分。
如果我们依赖第三方框架,采用新标准有时可能需要更长时间,因为我们可能必须等待这些框架采用这些标准。这些曾经让我们更早采用新技术的框架现在反而成了障碍。这些相同的框架通常还会带来性能成本,迫使用户等待脚本加载才能阅读或与页面交互。当脚本失败时(无论是由于代码问题、网络问题还是其他环境因素),通常没有替代方案,留给用户空白或破损的页面。
我们从这里走向何方
今天的技巧有助于塑造明天的标准。暂时拥抱技巧以推动现状本身并没有错。只有当我们不愿意承认它们是技巧或我们犹豫是否替换它们时,问题才会出现。那么,我们能做些什么来创造我们想要的网络未来呢?
为长远而构建。为性能、可访问性和用户进行优化。权衡那些对开发者友好的工具的成本。它们可能让你今天的工作轻松一点,但它们如何影响其他一切?对用户的成本是什么?对未来的开发者?对标准采用?有时便利可能是值得的。有时它只是你已经习惯的技巧。有时它阻碍你获得更好的选择。
从标准开始。标准随着时间的推移不断演变,但浏览器在继续支持旧标准方面做得非常出色。第三方框架并不总是如此。即使用90年代最粗糙的HTML构建的网站今天仍然工作得很好。对于使用框架构建的网站,即使仅仅几年后,情况也不总是如此。
精心设计。无论你的手艺是代码、像素还是流程,都要考虑每个决策的影响。许多现代工具的便利性是以不总是理解导致其设计的底层决策和不总是考虑这些决策可能产生的影响为代价的。与其匆忙地"快速行动,打破事物",不如利用现代工具节省的时间更仔细地考虑和深思熟虑地设计。
不断学习。如果你一直在学习,你也在成长。有时可能很难确定什么值得学习,什么只是今天的技巧。你可能最终专注于明年就不重要的东西,即使你只专注于学习标准。(还记得XHTML吗?)但不断学习会在你的大脑中打开新的连接,你某天学到的技巧可能有助于在另一天启发不同的实验。
玩耍、实验和变得奇怪!我们建立的这个网络是终极实验。这是历史上最大的人类努力,但我们每个人都可以在其中创造自己的小天地。勇敢尝试新事物。为思想建立一个游乐场。在你自己的疯狂科学实验室里进行愚蠢的实验。开始你自己的小生意。从来没有一个更有力量的地方可以发挥创造力、承担风险和探索我们的能力。
分享和放大。当你实验、玩耍和学习时,分享对你有效的方法。在你自己的网站上写作,在你喜欢的社交媒体网站上发布,或在TikTok上大声说出来。为A List Apart写点东西!但也要花时间放大他人:找到新的声音,向他们学习,并分享他们教给你的东西。
前进与创造
作为网络(及更远)的设计师和开发者,我们每天都负责构建未来,无论这可能采取个人网站、被数十亿人使用的社交媒体工具,或介于两者之间的任何形式。让我们将我们的价值观注入我们创造的事物中,让我们为每个人让网络变得更好。创造只有你独特有资格制作的东西。然后分享它,改进它,重新制作它,或制作新的东西。学习。创造。分享。成长。冲洗并重复。每次你认为自己已经掌握了网络时,一切都会改变。