在 7KB 内交付 WordPress

Avatar of Jack Lenox
Jack Lenox

DigitalOcean 为您旅程的各个阶段提供云产品。立即开始使用 200 美元的免费信用额度!

在过去六个月中,我对网络可持续性主题越来越感兴趣。互联网的碳足迹是我以前很少考虑的事情,这令人惊讶,因为我对环境问题很感兴趣,而且我的职业是基于网络的。

暖化世界中的网络

简单回顾一下,我去年参加了在伦敦举行的 MozFest。在会议间隙,我浏览了布告栏,看看接下来有什么活动,我发现了一个名为“构建一个对地球友好的网络”的会议。我感到有点目瞪口呆。这究竟是关于什么的?

我参加了这个会议,我的眼界被打开了。我现在觉得很明显——但当时是一个启示——我了解到互联网的巨大能源需求。这种需求使其成为地球上最大的燃煤机器,这意味着 它的 CO₂ 排放可能至少相当于全球航空旅行。越来越多的人开始上网,但这与 越来越臃肿的网站 的兴起相结合,意味着互联网的能源需求呈指数级增长。每传输一个额外的字节意味着更多的能源,而在大多数国家,这意味着更多的 CO₂。

人们普遍认为,我们应该避免打印电子邮件以节约树木,但这导致了一个错误的假设,即网络是一种绿色媒介。我遗憾地说,事实并非如此。

还有其他方法吗?

好消息是,情况并非如此。自 2009 年以来,绿色和平组织一直在审计互联网公司的能源使用情况,并通过他们的 点击清洁 活动游说他们改进。 绿色网络基金会 拥有一个不断增长的托管公司数据库,这些公司使用可再生能源,或者至少承诺实现碳中和。而 新工具 正在 出现,帮助那些在网络上工作的人衡量我们产品的环境影响。

还有一些很棒的资源,比如 Tim Frick 的 可持续设计,来自 可持续 UX 会议的三年演讲,以及 周边材料,虽然没有明确关注可持续性,但可以帮助我们构建低碳网站。

进入 Susty WP

我决定挑战自己,看看我能以多高的效率打包一个 WordPress 网站。与此同时,我心想,“为什么不把网站做成关于可持续性和 WordPress 的?”我知道,WordPress/可持续性循环。很酷,对吧?

因此,sustywp.com 诞生了。以及它的配套主题,Susty。我很高兴地说,我设法将主页的负载降低到 7KB 的数据传输量。我实际上把它降低到了 6KB,但 Yoast 添加的元数据几乎增加了 1KB!😛 但是,鉴于我试图传播信息,我认为这是一个可以接受的权衡。

在我深入探讨具体细节之前,我只想分享一些重要的事实

那么,它是如何运作的?

令人惊叹的是,这实际上是多么平淡无奇。在 Heydon Pickering 大力宣传 少写一些该死的代码 以及 Brad Frost 的 Death to Bullshit 等项目的大力推动下,我开始对 Underscores 进行彻底的修剪,删除了所有可能删除的东西。需要明确的是,Underscores 并不是充满了垃圾代码。它是一个非常精简的构建主题的起点。我非常欣赏它,并且完全赞成使用它。但是,它包含了一些假设,这些假设与我将 WordPress 网站缩减到最小尺寸的简朴目标不符。

你问,比如呢?

导航?没有。侧边栏?把它去掉。类?在我的社会主义乌托邦里没有。

鉴于我设定的约束条件,任何进入 DOM 的内容都必须有充分的理由在那里。由于这是一个实验,我采取了一种较为激进的方法,将导航分配到它自己的页面。这非常令人解放,这意味着我不必经历几乎总是令人失望的舞蹈,想知道如何让它看起来体面,对许多不关心的用户隐藏它,确保它足够健壮,可以无限长,带有永无止境的下拉菜单,等等。

这意味着更少的 HTML,更少的 CSS,当然没有 JavaScript!赢了,赢了,赢了。

至于侧边栏?好吧,我一直不喜欢侧边栏,所以很容易删除。Susty 没有小部件区域。我相信它会克服的。

我们还能修剪掉更多肥肉吗?好吧,如果我们几乎没有 HTML,并且想要最少的 CSS,我们真的需要所有这些类吗?我想尝试用 意图使用 CSS 的方式来编写 CSS,而不是屈服于充斥行业的 class-ititis 和 div-ititis。

你可能不需要网页字体

除了图片、视频和 JavaScript 之外,另一个导致网站臃肿的重要因素是网页字体。鉴于现在硅谷的每家初创公司都会将委托设计自己的字体作为一项首要任务,因此似乎您访问的每个网站都会下载一堆字体文件。为了一些不错的字体增加一百千字节似乎并不算什么,但是当您将此乘以访问您网站的不同用户(使用不同的设备和浏览器)时,字体很容易占到数百兆字节的数据传输——如果不是千兆字节/太字节/拍字节(对于流量更大的网站)的话。
自定义网页字体也是我们用户的潜在反模式,因为

  1. 页面加载速度变慢,因为他们会看到未设置样式的文本闪烁,或者更糟糕的是,在字体加载时根本没有文本。
  2. 到字体加载完成时,他们已经不注意或不在乎了。

如果您确实需要使用自定义字体,或者正在与未设置样式的文本闪烁作斗争,那么 font-display 是一个新属性,旨在指示浏览器如何处理字体下载。 这篇文章 对此进行了更深入的探讨。

如今,几乎所有设备都安装了一套相当不错的字体,所以为什么不编写 您想看到的潜在字体堆栈,以“serif”或“sans-serif”结尾呢。或者,完全拥抱那些默认字体,使用 系统字体堆栈

我想要 Susty 拥有一些瑞士风格的美学,所以我的字体堆栈从完美比例的 Helvetica(所有 Apple 设备默认都安装)到 sans-serif,途经 Arial、Frutiger 和 Nimbus Sans L。

作为一名 Ubuntu 用户,我看到了 Arial,它非常令人愉悦。在我的 Android 设备上,我看到了默认的 sans-serif 字体(我认为是 Droid Sans),它实际上在移动设备上效果很好——您几乎会认为它是为此而设计的!

还有什么?标准的东西。尽量减少图片,使用SVG。

除此之外,它真的只是标准。sustywp.com 的主页没有图片,只有一个 SVG,它是内联加载的,而不是通过 HTTP 请求加载的。CSS 被压缩了。所有内容都经过了 GZip 压缩。服务器使用 NGINX 和 Fast-CGI 缓存进行调整,以从内存中提供内容。

无需工作或代码的额外 SPA 类功能

当我向我的女朋友 Daisy 讲述我的计划时,我无聊地问她对一个网站没有导航,而是在一个单独的页面上,通过“菜单”按钮找到的想法如何。她觉得听起来还不错。所以,当我向她展示的时候,我急切地观察着她点击菜单链接。她的反应是,她并没有真的想过点击查看菜单,以及菜单出现,就像改变页面一样。这证实了我的一个恐惧:我之前对在构建单页应用程序(SPA)时消除页面加载的痴迷,只有真正的 web 开发人员才会在意。大多数人并没有真正注意到或想过它。因此,如果你使你的网站速度快如闪电,页面本身的加载几乎是不可察觉的。

既然如此,我便想到,为什么不假装它是一个菜单叠加层呢?因此,我添加了一个关闭按钮,以及一点点 JavaScript 代码,以便你点击菜单时能返回到之前的页面。(我最初使用 $_SERVER 超级全局变量和 HTTP_REFERER 在 PHP 中实现了这一点,但当使用类似 FastCGI 缓存来提供页面(即这些页面没有 $_SERVER 超级全局变量)时,它就会失效。)

还有更多内容

我们都知道,事情总能变得更好。以下是我正在做的一些改进 Susty 的事情。

  • 完成阅读 Jeremy Keith 的书籍 Going Offline,以便我可以实现 Service Worker,并使 Susty 更加高效。
  • 看看如何实现 Gutenberg。它会增加很多千字节,这让我很伤心!😉
  • 目前,sustywp.com 托管在伦敦的一个数据中心,并从该位置向全球提供服务。这意味着,新西兰惠灵顿的某个人将无法获得完整的体验!我有一个长期的计划,建立我自己的小型 CDN 边缘服务器(每个服务器都由一个 100% 可再生能源驱动的主机在每个位置托管,我可以找到一个),只运行 NGINX 并提供网站的缓存版本。这是我们在 WordPress.com VIP 上做事情的一种简化方式。

总之

Susty 是将可持续设计技术发挥到极致的一个例子。我并不建议我们都应该以这种确切的方法构建网站。但我确实认为,可持续性应该在 web 设计行业中成为一个更高的优先级。思考如何节省我们能节省的每一个千字节,以及用千字节而不是兆字节来思考是件好事。如果你确实想使用 JavaScript 接口库,为什么不尝试一下 Choo.js,它具有类似 React 的功能,并且只有 4KB。请记住,NASA 仅用大约 50KB 的数据存储空间就成功地将人送上了月球。

所有这一切中最好的事情是,高效的网站意味着更快的网站,这意味着

  • 更快乐的用户
  • 更好的搜索引擎排名
  • 更快乐的服务器