灭火器的插图旁边定位使得两阴燃的所有比赛的一排。

负责JavaScript:第一部分

由数字,JavaScript是性能的累赘。如果这种趋势持续下去,正中页面会前出货至少400 KB的太久了,而这仅仅是什么转入。像其他基于文本的资源,JavaScript是几乎总是提供压缩,但是这可能是我们正好在其分娩得到一致的唯一的事情。

文章接着下面

不幸的是,同时减少资源的传输时间的是整机性能的东西的重要组成部分,压缩,对浏览器采取多长时间来处理脚本,一旦它到达其整体没有影响。如果服务器发送400 KB压缩的JavaScript,实际金额的浏览器必须处理解压后是一兆字节的北部。如何以及设备应付这些繁重的工作量依赖,那么,在设备已经写了很多关于各种设备如何善于正处于处理大量的JavaScript,但事实是,它的设备之间差别很大的花费的时间量来处理,甚至一个微不足道的金额。

举个例子来说,这个我的一次性项目,供应约23 KB的未压缩的JavaScript。上月中旬,2017年的MacBook Pro,浏览器通过这个微小的相当有效载荷约25毫秒咀嚼。在诺基亚2 Android手机然而,这个数字上升到了190毫秒左右。这不是一个微不足道的时间,但在任何一种情况下,页面的交互速度都相当快。

现在的大问题:你如何看待这一点诺基亚2确实的平均页面上?它扼流圈。即使是在快速连接,浏览网页上它是在耐心的练习,如JavaScript载货网页砖它的时间相当舒展。

对于JavaScript的沉重网站绩效时间表。大部分的时间表是JavaScript的。
图1.性能时间表,其中过度的JavaScript专营主线程在页面上诺基亚2 Android手机浏览的概述。

虽然上网设备和网络在很大程度上得到了改善,但正如趋势所示,我们正在蚕食这些进步。我们需要使用JavaScript负责任的。这首先要认识到什么我们正在构建以及怎么样我们正在建设它。

“地王”与“应用程序”的心态#第2节

命名法可能是奇怪的,因为我们有时松散地用不准确的术语来识别事物,而他们的意义却被每个人隐含地理解。有时候,我们会把“蜜蜂”这个词的意思夸大到“黄蜂”,尽管蜜蜂和黄蜂之间有很大的区别。这些差异会促使你以不同的方式处理每一个问题。例如,我们想要摧毁一个蜂巢,但因为蜜蜂是非常有益和脆弱的昆虫,我们可能会选择重新安置它们。

我们可以一样快,在交换的条款“网站”和“Web应用程序”松动。它们之间的区别比黄衫和蜜蜂之间不太清楚,但他们混为一谈能带来痛苦的结果。疼痛进来,我们让自己的启示时的东西仅仅是一个“网络网站”与一个全功能的‘Web应用程序’。如果你正在做一个信息网站,一个企业,你就不太可能依靠一个强有力的框架来管理DOM改变或实现客户端路由 - 至少,我希望。使用工具,让不适合的任务将不仅是一个损害谁使用该网站但可以说生产力较低的人。

当我们建立一个网络应用虽然,小心。我们正在安装该软件包迎来数以百计,如果不是成千上万的人-of依赖,其中一些我们不知道是连安全。我们还编写模块捆扎机复杂的配置。在这个疯狂的,但无处不在的,排序的开发环境中,它需要知识和警惕,以确保得到什么内置的快速访问。如果你怀疑这一点,跑npm ls——刺激在项目的根目录,看看你是否在该列表中承认一切。即使您这样做了,这也不包括第三方脚本——我相信您的站点至少有一些第三方脚本。

我们往往忘记的是,环境网站和网络应用占用是同一个。两者都是受相同的环境压力该网络和设备的大的梯度施加。这些约束并不突然,当我们决定要叫我们打造“应用程序”,也没有我们的用户的手机获得神奇的新的力量,当我们做到这一点消失。

这是我们的责任,以评估谁使用什么我们做,并接受下,他们访问互联网的情况可能比我们所设想的不同。我们需要知道我们正在努力为服务宗旨,只有然后我们可以建立一些令人钦佩的服务就此而言─即使是不精彩打造

这意味着重新评估我们对JavaScript的依赖,以及如何利用它,特别是HTML和排除CSS-可以促使我们将采取不可持续的模式,其危害的性能和易用性。

不要让框架强迫你进入不可持续的模式#SECTION3

在与依赖框架来提高效率的团队一起工作时,我曾目睹过代码库中一些奇怪的发现。它们的一个共同特征是,通常会导致较差的可访问性和性能模式。以下面的React组件为例:

进口反应,从“反应” {元器件};进口{validateEmail}从 “助手/确认”;类SignupForm延伸元器件{构造(道具){超级(道具);this.handleSubmit = this.handleSubmit.bind(本);this.updateEmail = this.updateEmail.bind(本);this.state.email = “”;} updateEmail(事件){this.setState({电子邮件:event.target.value});} handleSubmit(){//如果电子邮件检查出来,如果提交(validateEmail(this.state.email)){// ...}}渲染(){回报(< div >
           
          
);}}

这里有一些显着的可访问性问题:

  1. 不使用的表单
    元素一种形式。实际上,你可以通过详细说明来掩盖这一点角色= "形式"在父< div >,但如果你正在构建一个形式,而这肯定看起来像一个-用一个用适当的元素行动方法属性。该行动属性是至关重要的,因为它确保了形式仍然会做某物当然,在没有javascript提供的情况下,组件是服务器呈现的。
  2. 一种<跨度>是不是一个替代<标签>元素,它提供了无障碍的好处<跨度>说自己是。
  3. 如果我们打算做在客户端的东西提交表单之前,那么我们就应该将绑定到行动<按钮>元素的的onClick处理的元素的的onsubmit处理程序。
  4. 顺便提一句,既然几乎所有浏览器都提供了从ie10到HTML5的表单验证控件,为什么还要用JavaScript来验证电子邮件地址呢?这里有一个机会来依靠浏览器和使用适当的输入类型,还有需要属性但要注意,得到这个与屏幕阅读器的工作权利需要一点技巧
  5. 虽然不是一个无障碍的问题,这个组件不依赖于任何国家或生命周期的方法,这意味着它可以被重构到一个无状态的功能组件,它使用相当少的JavaScript不是一个完整的阵营组成部分。

知道这些事情,我们可以重构这个组件:

进口从“反应”反应;常量SignupForm =道具=> {常量handleSubmit =事件=> {//需要的情况下,我们将数据发送到服务器XHR风格//(但仍会工作,如果服务器渲染与JS禁用)。event.preventDefault();// 继续... };返回(<形式方法= “POST” 行动= “/注册” 的onSubmit = {handleSubmit}> <标签= “电子邮件” 类= “电子邮件标签”>输入电子邮件:  <按钮>注册 );};

这不仅是组件现在更方便,但它也使用较少的JavaScript。在世界多数民众赞成淹没在JavaScript中,删除它的线应该感到彻头彻尾的治疗。浏览器给了我们这么多免费我们应该尽可能多地利用这一点。

这并不是说,出现无法访问的模式只要当使用框架,而是对JavaScript唯一偏好在我们的HTML和CSS的理解,最终表面的差距。这些知识差距往往会造成错误,我们可能甚至不知道的。框架可以是有用的工具,提高我们的工作效率,但继续在核心网络技术教育是必不可少的创造可用经验,无论我们选择使用什么工具。

依托网络平台上,你会走得很远,速度快#section4

虽然我们对框架的主题,应该说,网络平台本身就是一个强大的框架。正如上一节表现,我们是最好的时候,我们可以依靠建立标记模式和浏览器功能。另一种方法是彻底改造他们,并邀请所有的疼痛,努力保证所有,但我们,或者更糟:仅仅承担我们安装的每个JavaScript包的作者都已经全面而深思熟虑地解决了这个问题。

单页应用#section5

一个权衡开发人员快速做出的是采用单页应用(SPA)模式,即使它不是该项目的配合。是的,就是你与客户端的SPA路由获得更好的感知性能,但你是什么失去?浏览器本身的导航功能的 - 尽管同步提供的好处摆。其一,历史是按照管理一个复杂的规范。没有用户JavaScript的是它通过自己的选择或不共-won't无法访问。为了保持可用的SPA时,JavaScript是不是,服务器端渲染突然变得你必须要考虑的事情。

两个系列截图。在左边,我们有一个黑屏几秒钟,直到应用5.24s后出现。在右侧,基本组件出现在4毫秒,该网站是在5.16s完全可用。
图2。在慢速连接上加载示例应用程序的比较。左边的应用程序完全依赖于JavaScript来呈现页面。右边的应用程序在服务器上呈现一个响应,然后使用 客户端水化 将组件连接到现有服务器呈现标记。

如果客户端的路由器出现故障,让人们知道什么样的页面上的内容已经改变无障碍也受到伤害。这可以留下辅助技术依赖那些对苏斯什么已经发生的页面,这可能是一项艰巨的任务上的变化。

再有就是我们的老对手:开销。一些客户端路由器是非常小的,但是当你开始应对兼容的路由器,甚至可能状态管理库,你要接受的是有代码一定量的你永远无法优化掉,大约135 KB在这种情况下。仔细考虑一下您正在构建和是否客户端路由器是值得的权衡你会难免让人。通常情况下,你最好没有之一。

如果您关心感知的导航性能,那么您应该可以rel =预取推测地取同一来源的文档。这对提高页面的感知加载性能有显著的影响,因为文档可以立即在缓存中使用。因为预取是在低优先级下完成的,它们也不太可能与关键资源争夺带宽。

截图显示的网页上载入资产的列表。初始导航作为预取“写入/”被标记。该资产,然后在2ms的加载时用户实际要求。
图3.编写HTML / URL被预取初始页面上。当写入/ URL的用户请求时,它的HTML是从浏览器缓存加载的瞬间。

与链接预取的主要缺点是,你需要知道它能够是潜在的浪费。快速链接,一个微小的链接从谷歌预取脚本,在某种程度上缓解此通过检查目前的客户端连接速度慢,或有数据保护模式启用——默认情况下避免预抓取跨源的链接。

服务人员也对感知的性能有着极大的好处返回用户,我们是使用客户端的路由或不可─只要你懂行当我们预先缓存路线与服务工作者,我们获得了许多与链接预抓取相同的好处,但是对请求和响应的控制程度要大得多。无论您是否认为您的站点是一个“应用程序”,添加一个服务工作者可能是目前存在的JavaScript最负责任的使用之一。

JavaScript是不是你的布局困境的解决方案#section6

如果我们安装一个软件包来解决布局问题,谨慎行事,并问:“那我要完成的?”CSS是专做这个工作,不需要抽象有效地使用。大多数布局问题的JavaScript包试图解决,像框的放置、对齐和大小调整管理文本溢出, 乃至整个布局系统,都是可以解决的CSS今天。现代布局引擎,如Flexbox,就和网格的支持不够好,我们不应该一开始需要任何布局框架的项目。CSS框架。当我们有功能查询,逐步增强布局以采用新的布局引擎是突然不是那么难

*/ /*下面的@supports规则被不支持CSS网格的浏览器忽略,_or_不支持@supports。*/ @supports (display: grid){/*大屏幕布局*/ @media (min-width: 40em){/*你逐渐增强的网格布局样式到这里*/}}

使用JavaScript解决方案来解决布局和演示问题并不是什么新鲜事。2009年,我们欺骗自己说,每个网站都必须在IE6中搜索,就像在其他浏览器中一样。如果到2019年我们还在开发在每个浏览器上都一样的网站,我们应该重新评估我们的发展目标。会有总是我们必须支持的浏览器不能做那些现代的、常青的浏览器所能做的一切。在所有平台上实现完全的视觉平等不仅是徒劳的追求,而且是最大的敌人渐进增强

我不是在这里杀的JavaScript#章第7

毫无疑问,我具有朝向的JavaScript没有恶意。这给了我职业生涯和如果我是对自己诚实,一个享受了十多年源。如同任何长期的合作关系,我更多地了解它更多的时间我与它度过。这是一个成熟的,功能丰富的语言,只会变得更强大和优雅的,每过一年。

然而,有时我觉得JavaScript和我有矛盾。我上午关键的JavaScript。或者更确切地说,我是我们如何开发将其视为第一诉诸建设网络的趋势是至关重要的。正如我挑开又捆,但与圣诞树灯纠结的球,它很清楚,网络是于JavaScript。我们到达了它几乎所有的,即使有时并不要求它。有时候我在想解酒将如何恶毒的是。

在一系列的文章遵循,我会提供更betway体育注册多实用的建议遵循以阻止过度的JavaScript侵占潮流,我们如何能够缠斗它使什么我们构建的网络是可用的,或者至少更多的所以,每个人都随处可见。有些建议将预防。有些人会被减轻“狗的头发”的措施。在这两种情况下,结果将有希望是相同的。我相信,我们都爱在网上和想向右它做的,但我想我们思考如何使之更具弹性和包容所有。


没有评论

有话要说?

我们已经关闭了评论,但你可以看到人们说的话,我们没有这样过。

更多来自ALA

Webwaste

在从万维网废物此摘录,格里麦戈文检查臃肿网站和不必要的资产对环境的影响。
行业

连接这些点

在从创意文化的摘录,贾斯汀的Dauer走在我们通过多种方式,其中组织的文化和设计工作,它并发挥彼此的关闭。
事业