JS Party 播客刚刚发布了 一个有趣的剧集,他们在剧集中将听众分成两组,并就这个经典问题进行了辩论。 每组被分配到辩论的“一方”,然后自由地进行辩论。 我认为没有人能像这样听完一场节目而不被各种想法所淹没! 这些是我的想法。
- 这是一个已经持续了多年的“圣战”辩论。 也许是因为人们正在寻找一个适用于整个网络的答案,而网络太大了,无法将如此广泛的答案固定到它身上。
- 这个问题本身值得一看。 为什么我们谈论以这种特殊的方式削弱我们的网站? 我们的网站是否应该在没有 HTML 的情况下运行? 我们的网站是否应该在没有数据库的情况下运行? 也许我们最关注 JavaScript,因为 JavaScript 已经成为 网络性能的最大瓶颈(甚至超过网络!),而且我们体验到 JavaScript 失败的次数比任何其他类型的网络故障都要多(除了,也许,整个网站无法加载)(或 图标字体,天哪)。
- 我喜欢围绕“网络应用”和“网站”(网络事物!) 的术语进行的所有磕磕绊绊。 这是一个奇怪的问题。 在你的脑海中很容易想象出它们之间的区别:就像 Facebook 和博客! 但是,当你开始尝试准确地定义它时,它会很快变得非常模糊,区别也会失去任何价值,即使它一开始有任何价值。 更多信息请点击此处。
- 辅助技术肯定参与了所有关于网络的对话,但它可能无法在这里广泛应用。 有人认为辅助技术不会运行 JavaScript——因此,一个需要 JavaScript 才能使用的网站对于这些用户来说是 100% 的失败。 就我所知,情况已不再如此。 我们可以无休止地争论 JavaScript 在辅助技术问题中的作用,但仅仅因为一个特定网站需要 JavaScript 才能运行并不意味着该网站本身无法访问。
- 关闭 JavaScript,在网络上浏览,找到损坏的内容,并因这种明显的故障而嘲讽它们,这很容易。 这种故障是,该网站或网站上的某个功能本可以被设计成在没有 JavaScript 的情况下运行。 最小权限原则。 这是一个棘手的问题。 很容易不关心一个故意禁用部分网络浏览器但仍然希望一切正常工作的人。 我完全不关心那个人。 但是弹性部分更有趣。 如果您确实构建了一个可以在没有 JavaScript 的情况下运行的网站部分,那么它将在 JavaScript 执行之前和之后都能够运行,这非常棒。
- 在没有 JavaScript 的情况下构建功能性内容和功能,然后用 JavaScript 增强体验的概念称为渐进增强。 我既是它的粉丝,又谨慎地不强求地球上的一切都以这种方式构建(参见上面的要点)。 有些情况下,渐进增强会增加和减少技术债务。 我唯一要广泛使用的东西就是说,直到债务过高之前,它都是值得做的。
- 渐进增强有一个中间时刻。 如果一个功能在没有 JavaScript 的情况下是可用的,那么这意味着您可能是在推迟 JavaScript 的加载以获得性能优势。 但是它最终需要下载并执行。 那段时间会发生什么? 这里存在性能和 UX 成本。 最好情况下,它可以忽略不计。 最坏情况下,您会在这段过渡时间内破坏该功能。
- 我认为在逐个网站和逐个功能的基础上讨论这种问题更有意思。 应用原型 可能是对它进行范围界定的一个有趣方法。 他们经常以 Slack 作为例子,这是一个完美的选择。 你将如何构建一个有 20 位作者的电影评论网站? 你将如何架构一个像 Dribbble 这样注重社交和媒体的网站? 你如何构建下拉导航? 如何构建一个客户想要视差效果的单页宣传册网站? 如何构建一个也需要原生移动应用的航空公司应用? 当然,它也会让你思考你自己正在使用的网站。 CodePen 是否运行在正确的技术集上? CSS-Tricks 呢?
- 如果一个网站是“客户端渲染”(CSR),那么这意味着 JavaScript 正在执行数据获取和创建 DOM 等操作。 如果我们谈论网站在有或没有 JavaScript 的情况下“运行”与否,那么一个客户端渲染的网站在没有 JavaScript 的情况下将 100% 失败。 它有点像“服务器端渲染”(SSR) 的反面,其中文档直接从服务器作为 HTML 下载。 SSR 几乎肯定对于首次加载体验更快。 CSR 通常在加载后更容易在网站上移动(想想“单页应用”或 SPA)。
- 不仅仅是 SSR 与 CSR——存在一个完整的频谱。 越来越多的网站试图利用两者的最佳优势。 例如,Next/Nuxt/Gatsby 或 Ember 的 fastboot。
- 服务工作者是 JavaScript。 Web 工作者是 JavaScript。 网络的一些花哨的弹性和性能功能是由导致我们辩论的悲伤的同一技术驱动的。
网站? 为什么网站首先需要 js? 为了在不重新加载整个页面的情况下提交表单? 就这样,如果网站没有 js,它仍然可以完全正常运行,只是看起来有点丑陋。
虽然该网站的管理面板仍然可以使用没有 js 的方式构建,但可能不值得花费时间来确保这一点,因为 UX 改进实在太大了,无法忽略。
我会说不行。 专注于使您的网站易于访问、性能良好、安全可靠和可用,并使用 JavaScript 来实现这一点(特别是为了可访问性)。
根据定义,一个需要 Javascript 才能“使用”的网站对于不运行 JS 的人来说是不可访问的,原因有很多。 它被禁用了,它运行在过时的浏览器上,连接太慢,无法加载它需要的庞大脚本等。
可访问并不意味着它必须向辅助技术提供预期的体验和内容,这意味着任何人都(无论是否有残疾,是否使用屏幕阅读器)都应该能够访问它。
在这种情况下,不仅仅是 JS。 CSS 也可能使网站无法访问(例如,您有一个内联样式,它在 CSS 加载之前隐藏所有内容,并使元素显示出来。 如果 CSS 永远没有加载,那么您的网站将不可访问)。
虽然我们当然应该努力使我们的项目在没有使用 JavaScript 的情况下尽可能地正常运行,但我认为我们已经远远超过了“这取决于项目”是一个好的回应的阶段。
JavaScript(尤其是异步请求)彻底改变了标准的用户体验。 用户现在期望无缝过渡,他们预计“保存”之类的表单按钮会自动更新,而不是刷新页面。 实际的弹出窗口会被阻止,如果没有的话,也会很突兀——但是模态框呢? 预期中的。
当然,其中一些体验可以通过 CSS 在一定程度上复制,但 JavaScript 也提供了 CSS 解决方案还无法充分复制的辅助技术支持级别。
我并非在每个项目中都这样做,但对于我知道 JavaScript 必不可少的项目,我总是有一个
<noscript>
,它非常直白地通知用户必须启用 JS 才能与该服务交互。 这为我节省了很多头痛,不用过滤来自那些禁用 JavaScript 的客户的疑问,因为他们的老板的姐姐的侄子告诉他们这是一个安全风险。我不熟悉用户禁用 JS 的情况。 这感觉像是错误的做法。 如果性能和隐私是问题,那么有比完全禁用 JS 更好的方法(例如,跟踪保护)。
巨大的脚本确实是一个问题,但另一方面,如果网站的 JS 代码很小(传输量< 100 KB),那么我认为这不是问题。
我不担心这个问题。 如果一个网页的实现方式是它需要外部 CSS 和 JS 才能运行,那么这很好。 如果这些资源无法加载和/或执行,那么页面当然会崩溃。 这应该是网页开发者努力避免发生的事情(或者至少降低发生的可能性)。
Jens Oliver Meiert 的 后续文章,其中包含一些使用数据。
我原本想说“不”,但想得越多,答案就越接近“是”。 不是因为我认为有迫切的需要支持那些拒绝使用 JS 的用户(甚至有人争辩说,相当一部分人都是想要成为黑客的人,但我将忽略这一点)。
我认为你应该构建一个在没有 JS 的情况下也能运行的网站的原因是,这将帮助你专注于、学习和实施现有的网络技术,而不是懒惰地使用 JS 替代方案。
我经常看到网页开发者直接使用 JS,即使原始的 HTML5 可以完成同样的工作。 如果有充分的理由,使用 JS 很好,但对选项的无知不是其中之一。
是的,构建一个无需 JS 即可正常运行的网站,这将使你成为一名更好的开发者。
我一直不明白为什么这会成为一个争论点。网站应该在没有 CSS 的情况下运行吗?当然可以……但是为什么呢?房子应该没有窗户或自来水吗?如果担心可访问性,JS 可以改善体验,而不是阻碍它。
JS 是一种 Web 技术,也是堆栈的一部分,为什么它是否应该被依赖于其发挥作用的角色是一个问题?我们还能用什么来获得 JS 提供的好处呢?
渐进增强是关键。这意味着网站的主要或关键方面应该在禁用 javascript 或出现脚本错误时正常运行。例如,你的购物车应该始终可以正常运行:为什么你会让结账在这些情况下变得脆弱?
我经常发现网站因为脚本错误或某些依赖项缺失而无法访问,例如由于广告拦截器或使用的浏览器版本过低无法运行你的脚本。因此,也许并非所有内容都需要 noscript 备份,但你应该评估网站的主要用途是否仍然可以正常运行。
我认为这取决于项目的具体要求,包括可访问性要求。
在某些项目中,例如用户位于 **某些非洲国家** 的项目,**使用 JS 是解决大型技术可访问性挑战的最佳解决方案,这听起来很矛盾**。这些国家/地区的用户的设备可能相当先进/现代,但移动数据(这是他们主要的 数据来源)却非常昂贵。在这些情况下,使用 JS 通常是应对这种情况的最有效方式。
我不用 JavaScript 浏览网页,这是一个很棒的地方。我不会看到广告。我不会看到试图通过不屏蔽广告来吸引我捐赠的烦人弹出窗口。我使用 Brave 浏览器,希望它能阻止所有那些试图使用标签工作的可怕追踪像素。大多数时候,实现它的前端开发者根本没有做对。如果我遇到一个没有 JavaScript 就无法运行的网站,那我就没必要访问那个网站。社交媒体是有毒的。媒体本身是有毒的。如果我得到糟糕的服务,我不会付小费。我不会给那些内容毫无价值且广告加载时间比我阅读文章的时间还要长的网站所有者付小费。我喜欢那些在关闭 JS 后仍然可以完全使用的网站,尽管这种情况很少见。当谈到菜单时,禁用 JavaScript 的人正在寻找信息,所以只需展开整个菜单即可。尊重人们的浏览行为。花额外的 30 分钟让你的“Web 应用程序”以正确的方式工作;以 Web 应有的方式工作。我应该能够使用 Lynx 浏览器浏览 Web。
我说 YES!
如今,我看到人们使用 JS 做一些可以用 CSS 做的事情(例如,fadeIn),我认为这很疯狂,因为每个人都在学习 JS。我们忘记了语义、可访问性、性能等……但另一方面,我读到这样的文章,讨论开发生态系统非常重要。
几年前,网站应该在没有 CSS 的情况下运行,今天我们正在讨论 CSS-in-JS 或“哪个 JS 框架是最好的”……
我喜欢先使用 HTML5 使页面可读/可用且可访问,然后再添加 CSS 和 JS。少即是多。我只添加必要的 CSS 和绝对必要的 JS 来满足要求。HLTM5 可以在任何设计良好的页面上完成大部分工作,也应该这样做。那里有很多俗气的垃圾。