去掉 JavaScript 后,亚马逊这些网站会变成这样

news/2024/5/13 14:13:14/文章来源:https://blog.csdn.net/qq_40126542/article/details/89508797

小编推荐:Fundebug提供JS错误监控、微信小程序错误监控、微信小游戏错误监控,Node.j错误监控和Java错误监控。真的是一个很好用的错误监控费服务,众多大佬公司都在使用。

为什么我们应该重视“noscript”这个话题?

首先要澄清一下,提供完整的 noscript 体验和使用 noscript 标签区分页面版本是两回事。

我不怎么喜欢 noscript 这个标签,因为它会把你的网页分成 JavaScript 和非 JavaScript 版本,而不是为两种环境呈现相同的内容体验;正是这种区分版本的做法会让用户体验变得一团糟,还掩盖了许多现实问题。

你的 noscript 标签里面可能有很多有用的内容,但是如果我使用开启 JavaScript 的浏览器访问网页就看不到这些内容——浏览器只会等待 JS 内容慢慢加载。我所说的“noscript”体验通常说的是不包含 JavaScript 的网页的浏览体验,而不是简单地使用一个 noscript 标签。

那么,为什么要在乎不用 JavaScript 的用户呢?现在还存在这样的 noscript 用户吗?

对,他们确实存在,尽管数量很少:在英国,有大约 0.2%的用户禁用了 JavaScript:https://blockmetry.com/blog/javascript-disabled

但问题在于你不能只看关闭 JavaScript 的用户有多少。

我想起了 Jake Archibald 的这句话:

“所有用户在下载你的 JS 内容时都讨厌 JS”。

你应该想想有多少用户即便启用了 JavaScript,但也无法获得应有的 JavaScript 体验;造成这种现象的原因有很多,比如企业或本地设置阻止或剥离了 JavaScript 元素、浏览器插件或工具栏导致的 JavaScript 错误、网络错误等等。BuzzFeed 最近透露,大约有 1%的 JavaScript 请求超时,相当于每月都有 1300 万次请求失败。

有时问题不是出在用户这边,而在于 CDN 传输 JavaScript 的环节。还记得 2017 年 2 月亚马逊的服务器崩溃事件吗?当时有几百万依赖亚马逊 CDN 提供 JavaScript 的网站遭遇困境,导致标准普尔 500 指数中的企业在 4 小时的崩溃中损失了 1.5 亿美元。

再想想新兴的全球市场的现状:很多国家还没有普及高速互联网络,他们的国民也没钱购买能流畅运行复杂 JavaScript 的高性能硬件。或者想想成熟市场的情况:就算是接入 4G 网络的 iPhone X 手机也可能在火车驶入隧道时遇到网页加载中断的情况。

网络是一个充满敌意、不可预测的环境,这就是为什么许多开发者遵循渐进增强的原则,基于 HTML 语义的核心体验一步步构建他们的网站,在此基础上加入 CSS 层和非侵入式 JavaScript。

我想看看有多少网站在实践中应用了这套原则,那么最好的测试方法就是完全禁用 JavaScript 了吧?

如何禁用 JavaScript

如果你想复现我的实验,你可以在 Chrome 的设置里这样禁用 JavaScript:

  • 打开开发者工具菜单(Chrome -> 查看 -> 开发者工具,或键盘上的⌥⌘I);

  • 打开开发者子菜单(开发者工具上关闭按钮旁边的三个点);

  • 从这个子菜单中选择“设置”;

  • 找到“调试器”部分并选中“禁用 JavaScript”复选框。

或者也可以像我这样,使用很出色的 Toggle JavaScript Chrome 扩展,只需单击一下即可禁用 JS。

禁用 JavaScript 后发一篇 WordPress 帖子

禁用 JavaScript 之后,我第一个实验目标是访问我的个人投资组合网页——就是一个 WordPress 博客,我在上面随时记录自己的投资经验。

WordPress 其实对 noscript 非常友好,所以我写起文章来毫不费力,只是页面上缺少一些我习惯的文本格式和媒体嵌入功能。

下面对比一下 WordPress 关闭 JavaScript 前后的发帖界面:

 

上面是 noscript 版本,只有两个基础文本输入框。

 

JavaScript 版本有很多快捷按钮,包括字体格式、嵌入引用和媒体、以 HTML 格式预览等。

我觉得没有工具栏挺不错的,但到需要在帖子里嵌入截图的时候就不行了。因为没有“添加媒体”按钮,我只能再打开一个单独的页面来上传我的文件。这也很合理,因为“后台上传”内容需要 Ajax,而 Ajax 就需要 JavaScript 支持。令我惊讶的是独立的媒体上传页面也需要 JavaScript!

还好有一个替代视图:

 

上面是管理员后端中的媒体选择界面的 noscript 版本。页面会提示说没有 JavaScript 就不能支持网格视图了。

 

但谁用得着网格啊?对我来说列表视图就非常合适了。

上传图片后,我只能在帖子中手动编写 HTML img 标签,并将图片网址复制粘贴到里面。这里没法检测上传图像的缩略图网址,我写的说明也必须手动复制过去。我很快就厌倦了这套流程,并计划第二天自己再次启用 JavaScript 后再来编辑并重新上传所有图像。

下面我想看一下我的页面的前端在 noscript 环境下长什么样。

禁用 JavaScript 时查看我的主页

关掉 JS 浏览我的主页也没什么不一样的,这让我感到很惊喜:

image

image

上面是开启 JS 的状态,下面是关闭后我主页的样子,只有 Twitter 嵌入模块有点差异。

下面仔细看看嵌入的 Twitter 模块:

image

注意作者信息、互动数据和信息链接的部分,这些在 noscript 版本里都没有。那个打钩是一张外部PNG 图片。

image

noscript 版本缺少样式,不过内容没有丢失,引用链接和推文链接都在,而打钩换成了 ASCII 字符:✔。

我的主页下面还集成了一些 Insagram 内容,在 noscript 版本里显示比较正常。

image

注意图片下方的图片选择小点,说明还有更多图片。

 

noJS 版本没有这些小点。除了这里的幻灯片播放功能缺失以外,它和 JS 版本没有其它区别了。

最后,我的主页还集成了一个 GitHub 模块。GitHub 没有原生集成功能,所以我用的是第三方的 GitHub Cards,作者是 Hsiaoming Yang(https://lab.lepture.com/github-cards/)。

 

这个第三方卡片模块链接到你的 GitHub 资料页上,展示一份简短的资料介绍。

 

我还准备了一个备用的 GitHub 链接,用于禁用 JavaScript 的场合。

其实我做测试以前既希望用禁用 JS 前后的对比数据让大家感到震撼(一个简单的嵌入模块都要成吨的 JS 代码!简直是世界末日!快放弃 JavaScript 吧!),另一方面却也希望测试出的差别很小(渐进式增强!以身作则!我是优秀的开发者!)。

接下来对比一下禁用 JavaScript 前后的页面大小。首先是开启 JavaScript 的情况:

 

51 个 HTTP 请求,传输 1.9MB 数据。

然后是禁用后的情况:

 

18 个 HTTP 请求,传输 1.3MB 数据。

就为了一条带样式的推文、一个 GitHub 嵌入和一个全功能的 Instagram 嵌入,我的网页就多了 600KB 数据。我还开启了谷歌分析跟踪功能和一些极客风的隐藏互动功能。综合考虑下 600KB 可能不是那么多——但我还是对浏览器为了多出来的这些东西而增加的请求数量感到有些惊讶。

就算没有 JavaScript,主体内容依旧都在,菜单也都正常工作,不看 Twitter 嵌入模块的话你会很难意识到 JavaScript 被关闭了。最后的结果,我的主页通过了 NOSCRIPT-5 级别的考验——无 JavaScript 浏览体验的最高级别。

ashton.codes noscript 评级:NOSCRIPT-5。

这是啥? 你还没听说过何谓 noscript 评级体系?你要听说过我才会惊讶呢,因为这是我刚发明的东西。这是我自己用来评价禁用 JavaScript 时网站可用性高低的一个简易小指标,进一步来说它可以很好地评价网站的内容渐进增强做的有多好。

noscript 评级体系

网站——或者更确切地说,是网站的各个页面——一般可以归到以下几类:

NOSCRIPT-5

该网站的 noJS 版本与启用 JavaScript 的版本几乎无法区分。

NOSCRIPT-4

该网站提供了 noscript 功能组件,但会链接或重定向到一个单独的版本以实现该功能。

NOSCRIPT-3

网站的大部分内容没有 JavaScript 也能工作,但一些非关键功能不受支持或者显示异常。

NOSCRIPT-2

该网站会弹出消息说用户的浏览器不支持自己的网页。

NOSCRIPT-1

该网站好像是加载出来了,但用户根本无法使用其主要功能。

NOSCRIPT-0

该网站连加载都失败,并且不向用户提供任何反馈。

下面我们来测试一些热门网站,看看他们的得分情况。

亚马逊

我研究一款小型真空扫地机有一阵儿了。我租的房子不让养宠物,如果你上网搜一圈就会发现这个机器真的很不错。

初看上去,亚马逊的非 JavaScript 解决方案做的还挺好,就是产品的主图片消失不见了。

 

开启 JavaScript 时主图片回来了,看看这款小扫地机有多可爱。

仔细检查发现,noscript 版本上有很多内容都异常了。下面我会挨个过一遍异常的内容,并为它们逐一提出解决方案的建议。

图库图片消失

我想看一些产品图片,但是点击缩略图后没有反应。

问题

 

点击这些缩略图不会有任何回馈。

可行的解决方案

如果这些缩略图能链接到完整的图像,可以在新标签页中打开,那就很好了。然后可以做渐进增强,使用 JavaScript 将它们放到图库中:

  • 劫持对缩略图链接的点击事件;

  • 读取 href 属性;

  • 使用 href 属性值更新主图像的 src 属性。

“报告错误的产品信息”链接仅能使用 JavaScript

但这个功能真的那么常用吗,值得为所有用户下载额外的 JavaScript 代码,以便它在页面中作为集成模块启用吗?

image

亚马逊集成模块窗口(JavaScript 版本)

问题

 

幸好我看到的产品信息挺准确的,否则 noJS 版本下我根本没处报告问题!“href”属性有一个 javascript:// 值,它会打开一个集成模式表单。

可行的解决方案

亚马逊集成模式表单需要开启 JavaScript 才能工作。我来做的话会将“报告问题功能”设置为单独网址上的独立表单,例如 /report-product?product-id=123。这样就可以逐步增强到使用 Ajax 单独下载 HTML 的集成模式了。

默认情况下仅部分评论可见

问题

 

“”链接没有反应。

可行的解决方案

为什么不默认显示所有评论,然后使用 JavaScript 截断评论文本再添加“”链接呢?

需要指出的是评论标题是指向评论内容独立页面的链接,所以这样的话起码是可以看完评论内容的。

总体而言,我对亚马逊网站在关闭 JavaScript 的情况下的不错表现还是很惊讶的,它要是应付了事的话本可以搞出一个空白页面来。但缺失产品图像意味着我们丢掉了一个真正核心的功能——我认为用户能够看到他想要买的商品外观是非常重要的!——所以很遗憾,我们不能给亚马逊庆功了,也不能给它评 NOSCRIPT-5 级别。

亚马逊 noscript 评级:NOSCRIPT-3。

我还没有决定要买哪种产品,所以我转向了亚马逊的价格追踪器 Camel Camel Camel 页面。

Camel Camel Camel

我想对比 iLife V3s Pro 和 iLife A4 这两个型号选一个购买,所以转到了 https://uk.camelcamelcamel.com/。刚打开页面,这个网页看起来与启用 JavaScript 的版本没什么差异。

 

Camel Camel Camel 的 noJS 版本看起来美观专业。

 

你拿放大镜对比这俩截图也找不出不同!

不幸的是价格历史图表没能呈现出来。它倒是提供了替代的文本,但这些文本没法让我知道价格趋势是上涨还是下跌。

 

替代文本写的是“亚马逊价格历史图表”,但没有数据分析内容。

 

开启 JavaScript 后这图表长得多可爱啊。

通行建议:始终提供有意义的替代文字。我不一定需要查看图表,但我希望对其中包含的内容做个总结。在这个例子中我想看到的可能是“亚马逊价格历史图表显示该商品的价格自 2017 年 3 月以来基本保持不变。”但自动生成这样的摘要无疑很困难,并且容易出现异常。

针对此用例的具体建议:显示图像。该网页的脚本版本的图表实际上是一个独立的图像,所以当然能在 noscript 版本中正确显示!

不过,图表下面的核心内容里面就有我想要了解的信息。

 

谁还用得着图表?我们有一张表格!

该表格所提供的平行功能正是 NOSCRIPT-5 评级所需的。Camel Camel Camel,我要向你脱帽致敬!

Camel Camel Camel noscript 评级:NOSCRIPT-5。

GitHub

GitHub 看起来和支持 JavaScript 的版本几乎一模一样。厉害!但我想这是开发者为开发者们所开发的网站。

 

我找到的一处不同是 GitHub 的时间显示格式。开启 JavaScript 时它显示的是“两天前”。

 

noJS 版本下它显示的是“2018 年 5 月 1 日”。

我在 GitHub 里打扫了一下,看了看 repo,删了些旧的分支。有一阵儿我真的忘了自己用的是非 JavaScript 版本,直到我遇到了一个小 bug:

 

“获取最新提交版本”这里永远刷不出来……

然后我想知道,“GitHub 是如何给问题添加标签的?”所以我试了一下。

 

点这些按钮的时候没有响应。

我无法在创建问题时为其添加标签。事实上,即使创建完空白问题后,我也找不到添加标签的方法。令人遗憾的是 GitHub 没能坚持到最后,本来它和 JS 版本几乎是没有区别的。

GitHub noscript 评级:NOSCRIPT-3。

虽然 GitHub 看起来很出色——我差点就忘了 JavaScript 关闭这个事实了——但只要没法像完整版一样使用核心功能就不行了。就算 noscript 版本很丑也是能得到更高分数的,因为功能比形式更重要。

Facebook

最后我承认我现在还买不起一台吸尘器。所以我决定转到社交媒体去逛逛。

 

Facebook 说需要开启 JavaScript 才能继续浏览,或者我们可以点击链接进入移动版本。

Facebook 没有 JavaScript 就拒绝加载,但它的确提供了替代选项。这是我们的第一个 NOSCRIPT-4 示例——一个为 noscript 或功能手机用户提供单独版本内容的网站。

 

Facebook 的移动站点版本。

移动版本加载超快。它看起来很难看,但好像我得到的内容和平常是一样的。非常重要的是我有一致的功能:我可以在这里做到主站能做的所有事情。

Facebook noscript 评级:NOSCRIPT-4。

加载页面的速度快如闪电:

 

50.8KB,1.39 秒就加载完毕。

我一次只能在新闻流中看到 7 个项目,但我可以点击“查看更多故事”,它会将我带到一个新页面,其中使用传统的分页技术。

我甚至可以对 Facebook 评论做出“反应”,尽管这需要开启新页面:

 

作出回应首先需要点击“回应”。

 

然后你会跳转到新页面来选择回应选项。

其实 Facebook 完全可以在非 JavaScript 版本中构建一个悬停式的“反应”菜单,但公平地说,这个版本针对的是无法悬停指针的移动设备。

建议:使用 CSS 创作。你可能会发现自己根本就不需要 JavaScript。

其他社交网络

领英有一个很棒的定制化加载页面,但 noJS 状态下它永远不会加载,所以我所能做的就是盯着徽标发呆。

 

领英 noscript 评级:NOSCRIPT-0。

Instagram 几乎什么都没有,就是个空页面,另一种 NOSCRIPT-0 风范。

 

Instagram noscript 评级:NOSCRIPT-0。

鉴于 Instagram 的嵌入模块在我的投资组合网站上完美运行,我对 Instagram 主页差到这个地步感到非常惊讶。我想对于嵌入式模块来说,你永远不会知道第三方的浏览器支持水平到了什么级别,但是当我直接访问该网站时,Instagram 很乐意声明自己放弃了支持。

总结

我做这个实验的目的是看看有多少网站是用渐进增强实现的。我这次只访问了一小部分网站,其中大部分都名声在外,预算充足,所以看到它们对无 JavaScript 环境支持的各种状况是很有意思的。

有趣的是,相对简单的网站——特别是 Instagram 和领英——在 noscript 支持方面做得那么糟糕。我想这部分原因在于 React,Angular 和 Vue 等 JavaScript 框架的日益普及。开发人员现在正在构建“Web 应用程序”而不是“网站”,目的是复现本机应用的样式和体验,使用 JavaScript 管理 DOM 是创建此类体验最易管理的方式。

一种风险在于,越来越多的网站需要 JavaScript 来呈现所有内容。还好我们通常可以用对开发人员一样友好的方式构建内容,但改在服务器上呈现,例如使用 Preact 而不是 React。有意识地去关注 noscript,就可以改善本文开头所讲的核心体验,并且可以加快用户感知的加载速度。

重新考虑应用程序的开发思路可能会非常难,但在很多情况下只需要简单的调整就能获得良好的核心体验。良好的核心体验表明网页有着井井有条的结构,而且这通常利于搜索引擎优化并改善可访问性。一般来说精心设计的网页才能做到这一点,因为设计师和开发者花费了时间和精力思考什么是真正的核心体验。渐进式增强意味着更强大的体验、更少的生产错误和更少的个性化浏览器错误,因为我们是让平台完成工作,而不是试图从头开始编写代码。



作者:子瑜说IT
链接:https://www.jianshu.com/p/182c4cafb31d

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_876845.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何通过域名直接访问你的网站

喜欢你已经超过两分钟了,你说还能撤回吗? 每次进入自己的网站都要输入端口号,很不舒服。于是今天查了一下,怎么用域名直接访问自己的网站。 带端口和项目名称的访问方式如下: 例如:www.xxx.com:8080/项目…

建站模板推荐

今天终于把个人网站部署好了,有想做 个人网站可以参考一下 朱乐乐的网站 建站步骤: 下面给大家看一下阿里官方的网页模板。要收费,欣赏欣赏 阿里云提供企业案例,可直接选择心仪的,直接建站 点击此链接即可观看上方…

程序员实用的网站

福利 今天总结了很实用的一些网站,安利给大家: 我把这些网站书签已导出: 获取书签: 链接:https://pan.baidu.com/s/16COgtPnqGc8X__wlvgoXSQ 提取码:s9ih 下载好之后,打开浏览器导入书签。 …

免费主机,免费二级域名分发,免费建临时网站,免费扒网

给大家分享一点,没钱,没钱,没钱,新手喜欢的东西! 废话不多,安排! 免费主机 网址:彩虹云主机(免备案) 在这里可以填久一点,最好就90年&#xff…

全程追踪入侵JSP网站服务器

小 中 大 前段时间,应朋友之邀,我对他们托管的三台 服务器 的主机进行了测试,发现了JSP网站存在的几个问题。 入侵测试第一步:扫描扫描是入侵的第一步,它可以让你对即将入侵的目标有一个全面的了解。同时扫描还有可…

21天转型容器实战营(二十一基于AOS模板完成电商网站创建)

应用编排->交付->运维->治理全生命周期应用编排AOS:图形化编排,一键式部署实现企业业务快速上云和迁移AOS主要概念 云上的应用编排服务(Application Orchestration Service),可以通过设计复杂应用拓扑,实现复 杂应用的一键式部署。 模板:遵循AOS语法规范定…

流媒体之老黄谈流媒体服务与视频网站研发

今天应公司领导的要求做完了来公司的第三个项目流媒体服务与视频网站开发,接近年终,博客停更了好久,心里一直不甘,上周六和北理工的好兄弟安老板定下誓言,每天保证五篇技术博客的更新量,年终上线三大社区。…

大学四年因为知道了这32个网站,我成了别人眼中的大神!

转载于:https://blog.csdn.net/sinat_33921105/article/details/103899234 依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦😂,嗯&…

常用网站记录

代码复制粘贴 网址:https://paste.ubuntu.com/ 说明:在编程中,经常需要把代码复制粘贴到其他地方,使用该网站能很好的保持原格式,不出现乱码 如下图所示: 使用说明 Poster 此段代码名字(可随…

免费论文翻译网站——通天塔

本网站是一个开源的学术论文翻译网站,论文链接如下: http://tongtianta.site/ 一般可以先查看自己的论文是否在网站上已有翻译,如果没有再进行“添加翻译” 该网站有两个功能 第一:免费翻译 可以免费翻译论文,论文页…

中小型网站架构分析及优化

以上网站架构广泛运用中大型网站中,本文从架构每一层分析所用主流技术和解决手段,有助于初入网站运维朋友们,进一步对网站架构认识,从而自己形成一套架构概念。 第一层:CDN 国内网络分布主要南电信北联通,造…

网站打开速度优化-前端篇

今天我的www.phpsong.com的博客上线了,但是第一天上线就被人攻击,我直接吐血,强烈吐槽这个黑 减少http请求 具体的方式为 1.多个小图片合成一个大的图片然后又定位的方式取图片,专业点的叫法CSS sprites 2.多个css合并减少个数&am…

大型网站架构演变和知识体系

1、架构演变第一步:物理分离webserver和数据库 2、架构演变第二步:增加页面缓存 如用squid做页面缓存,或生产静态页面,不使用jsp 3、架构演变第三步:增加页面片段缓存 页面缓存失效情况比较多,因此可以使用…

bat脚本重启IIS中的网站

bat脚本实现重启IIS中的网站 echo off %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit cd /d C:\Windows\System32\inetsrv\ tas…

如何下载自己在浏览一些网站中喜欢的图片

如何下载自己在浏览一些网站中喜欢的图片 1.点击图片右键图片另存为相应位置即可 2.按F12,点击Element 点击最左上角选择 紧接着点击网站中想要的图片 会自动对应到相应图片代码中 如果出现了img信息,只需要右键open in new tap 如果没有img信息,则需…

设计师升职加薪必须知道的10个设计网站

设计行业经过几年的发展,已经进入到了相对成熟的时期。这无疑会对设计师有更高的要求和挑战。 随着AI的发展,设计甚至从有形的设计,转变为无形的设计。这就需要你对设计有更深刻的理解,理解设计的本质是沟通,设计源于人…

新手如何搭建淘宝客网站,实用教程

今天来聊聊如何快速搭建淘宝客网站,关于这类网站如何变现,如何转化,就不详细的说明了,今日主要聊聊网站的如何搭建教程,并且能够正常访问,简单学会这类方法之后,方便你以后可以搭建企业网站&…

免费自学编程的12个网站,不用再花钱啦

很多人包括一些企业家,和市场营销人员都认为学习编程对一个人走向成功十分有帮助。在过去的一年里,我一直在学习编程。它有助我成为一个更好的创业者,我甚至可以提供一些帮助,当我的团队需要解决一些bug的时候。 现在&#xff0c…

MySQL在大型网站的应用架构演变

可扩展性 架构的可扩展性往往和并发是息息相关,没有并发的增长,也就没有必要做高可扩展性的架构,这里对可扩展性进行简单介绍一下, 常用的扩展手段有以下两种: Scale-up : 纵向扩展,通过替换为更好的机器和…

图片、图标、代码资源网站

图片、图标、代码资源网站 程序员必备的相关资源网站一、网页设计篇二、图片篇(1)三、图片篇(2)四、图片素材网址汇总篇五、免费图片网站六、web前端开发篇七、图标篇八、代码网站篇 网站地址网站设计篇DOOOOR创客贴图帮主懒设计拼…