`

javascript不可用的问题探究

阅读更多

昨天在Twitter上的一些有趣的讨论中, 我发现人们对于Web应用和站点对javascript的依赖普遍存在一种疑惑. 这种疑惑一直都存在, 而对我而言, 这个问题随着浏览技术的飞跃发展而集中爆发了.

我第一次遇到这个问题还是在DHTML盛行的时代. 我们对浏览器无所不用其极, 加上各种动画菜单、3D标签(我们现在已经学会不再使用这些了), 但总有人告诉我们javascript不可用.

谁禁用了javascript

第一个要问的问题是这些javascript不可用的环境在哪里. 下面是一些可能的答案:

  • 安全系统比如noscript或者公司代理过滤掉了javascript;
  • 功能手机比如旧式黑莓(我还记得将旧式黑莓换到Opera Mini以获得总算还过得去的上网体验);
  • 在移动应用环境中, 图片和脚本有时候会被拆分处理;
  • 在流量有限或者接入很慢的区域中;
  • 人们因为个人原因禁用了javascript;
  • 讨厌广告弹出等强势广告的人.

就像你所看到的那样, javascript被禁用的原因多种多样, 有被动的, 也有主动的. 所以不能说只有乱用网络的人才会遭遇这样的问题.

为什么javascript会被禁用

像上面所列举的那样, javascript被禁用的原因多种多样. 如果它是被有意禁用的, 那么我猜主要原因无非以下三点, 即安全考虑、广告疲劳以及慢速连接.

安全考虑在情理之中. 几乎每一个在客户端的攻击都是使用的javascript(大多数情形下都是利用了插件的漏洞). Java当然是当前最大的安全漏洞, 但是通过javascript同样会对存在漏洞的网站或者不经保护或者过时的浏览器以及操作系统造成安全威胁.

慢速连接是个很有意思的原因. 非常讽刺的是, 我们使用javascript是为了加速客户端体验. 最初使用js的一个例子就是在客户端对表单进行验证从而避免服务器端不必要的工作周期.

如果你现在正处于一个很差的连接中(比如一个无线连接或者很差的3G连接), 你想要使用Google Reader或者Gmail, 你只能得到一个不完整的页面, 这时候只有使用低版本的才能更好工作.

为了两方都好

基于环境以及连接给用户最好的体验是非常好的. 这也是渐进增强(progressive enhancement)所研究的问题. 这也并非是很高深的东西, 它很简单, 并且是处于完全的实用主义.

使用事件授权这样的技术是非常简单的. 你可以通过点击父元素的handlers来写你自己的HTML, 使用innerHTML或者其他一些更新更快的技术.

为什么是这样一个问题

坦白说, 我也不太清楚. 或许是因为我太过时了, 或许是因为我已经一次有一次对浏览器和网络连接失望了, 或许是因为我只想更安全一些. 我只是不明白为什么人们只想要js的解决方案呢, 而实际上, js只是用来提供一些增强功能的.

费解的应用边缘案例

人们时常怀有疑问的是"应用需要javascript". 如果我们足够坦诚, 我们就会发现, 这样的应用实际上是很少的. 如果一定要说出一些, 我只能想到的是浏览器中的photoshop或者其他的一些编辑器(比如视频、浏览器中的IDE)才需要依赖于javascript. 其他都可以通过重新加载和服务器端的一些部件解决.

让我们直面这样一个事实——在Node.js的时代, 服务器端也可以用javascript来写. Dav Glass of Yahoo两年前显示如果一个工具库编写成余环境独立的, 那么你就可以同时在客户端和服务器端复用这些工具.

"应用需要javascript"的真正原因似乎是其他原因, 而非技术上的.

"应用需要javascript"的真正原因

正如禁用javascript可以有很多原因, 应用需要javascript也有很多原因.

  • 你只知道js并且认为人们就应该升级他们的浏览器. 这无可厚非, 但是这样的看法是很狭隘的, 并且很容易失败.
  • 和你一起构建应用的团队没有服务器端的技能, 你希望能以较低的代价完成这个应用. 这或许有效, 但是这样可能让开发时间和资金都加倍. 要提前为这样的开发做好规划.
  • 你想要尽快写出应用, 并且你知道以后你会重写这个应用的. 这是很常见的现象, 尤其是你可以因此而成功. 愿上天保佑你吧, 千万别让人知道你会待很久.
  • 你的应用会在一个纯js的环境中运行. 这当然意味着你没必要不使用js而完成你的应用. 一个很好的例子就是Air applications. 但你要保证这个环境在将来不出问题.
  • 你的应用确实需要js来运行. 如果真是这样的情况, 就别将它提供给没有js的用户. 向人们解释为什么以及如何做(尽量避免告诉人们他们需需要开启js因为他们可能根本做不了而更加失望), 并利用js重定向到你的应用.

总结

总之, javascript依赖性的问题不只是技术原因. 它对旧的技术实践提出了疑问, 并且对于可维护性有很大影响.

可以说, 如果我们能问问"我们为什么需要js"而不是问"人们为什么没有js", 关于这个问题的讨论会更有成效. 如果我们的技术能很好适应不同需求的话, 去责备人们跟不上网络发展是毫无意义的.

通过展现给用户看他们能通过开启或者关闭浏览器中部件来解决问题同样是没有意义的. 当一个普通用户卡在你的应用中了, 这并不是一个告诉用户发生了什么的做法.

或许所有这些问题在node变得成熟以及普及以后都不会再是问题. 我将很乐意看到这点.

原文链接:That "javascript not available" case

19
7
分享到:
评论

相关推荐

    JavaScript事件机制详细研究

    JavaScript 事件机制详细研究 JavaScript 事件机制是指浏览器中发生的各种事件,例如点击、鼠标悬停、键盘输入等,JavaScript 通过捕捉这些事件来执行相应的操作。本文将详细介绍 JavaScript 事件机制的实现方式和...

    JavaScript的执行过程详细研究

    ### JavaScript的执行过程详细研究 #### 一、JavaScript执行顺序概览 JavaScript作为一种广泛应用于Web开发的编程语言,其执行过程对于理解程序的行为至关重要。在深入探讨JavaScript的执行过程前,我们先来看一下...

    Dart VS JavaScript上篇:JavaScript的历史包袱.docx

    然而,JavaScript 同时也存在许多问题,如性能不高、代码冗长、缺乏严格的类继承机制等。 Google 在推出 Chrome 浏览器时,开发了 V8 JavaScript 引擎,使得 JavaScript 的性能得到了极大的提高。然而,JavaScript ...

    javascript作业题答案

    通过仔细研究这些作业题和解答,你不仅可以巩固已学的JavaScript知识,还能发现一些实际开发中的最佳实践。同时,解决实际问题的经验将有助于提高你的编程技巧,让你在面对复杂的JavaScript项目时更加游刃有余。所以...

    第三方JavaScript代码沙盒技术研究.pdf

    本文研究了第三方JavaScript代码沙盒技术的应用,旨在解决Mashup风格的Web应用中集成不可信的第三方JavaScript代码的问题。通过分析当前浏览器的主要安全机制,提出了沙盒技术所要满足的需求,研究了可采取的解决...

    【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容)1

    - 对于不支持事件捕获的浏览器,可以使用事件冒泡来实现类似功能,或者利用JavaScript库如jQuery来统一处理兼容性问题。 - 一些设备可能有特定的事件行为,如Android设备上,点击事件可能会同时触发`touchstart`和...

    javascript源码大全+JAVASCRIPT教程+JavaScript语言参考手册(2本)均为chm文档

    "javascript源码大全"可能包含了各种JavaScript编程的实例代码,这些源码可以帮助初学者理解实际应用中的编程技巧,同时对经验丰富的开发者来说,也是深入研究和学习新方法的好材料。源码可以涵盖从基础的DOM操作、...

    JavaScript(ppk谈JavaScript+JavaScript语言精粹修订+Secrets of the JavaScript Ninja)

    标题中的“ppk谈JavaScript”可能指的是Peter-Paul Koch(ppk)的一本书,他在JavaScript社区中是一位知名专家,特别在移动浏览器和跨平台兼容性方面有深入研究。ppk的书籍通常会涵盖JavaScript的基础知识,以及如何...

    基于预测的JavaScript类型系统研究.pdf

    本文研究了基于预测的JavaScript类型系统,旨在解决JavaScript动态类型语言的性能瓶颈问题。JavaScript语言的动态类型特性使得其性能优化非常困难,因此研究人员提出了两种基于预测的算法来解决这个问题。 首先,...

    javascript指南和函数式编程

    JavaScript是Web开发中不可或缺的一部分,尤其在前端领域更是扮演着核心角色。本指南将深入探讨JavaScript的高效编程和函数式编程这两个重要主题,帮助开发者提升技能,实现更优雅、更可维护的代码。 《Effective ...

    用JavaScript刷LeetCodeOJ解题报告合集

    通过深入研究这些解题报告,你不仅可以学习到JavaScript语言的精髓,还能提升自己的算法思维和问题解决能力。同时,你还可以了解到如何在实际项目中组织和测试代码,这对于成为一名全面的前端或全栈开发者至关重要。...

    基于计算思维的Javascript案例教学研究.pdf

    本文探讨了基于计算思维的Javascript案例教学研究,旨在提高学生的计算思维能力和解决实际问题的能力。计算思维是指学生通过问题分解、算法、抽象和自动化等步骤来解决问题的思维过程。通过本研究,作者提出了基于...

    javascript经典实例大全

    3. **AJAX**:Asynchronous JavaScript and XML(异步JavaScript和XML)允许网页在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容。在实例中,你可能会看到`XMLHttpRequest`对象或现代的`fetch` API的...

    JavaScript 5.CHM

    JavaScript 5.CHM 是一本关于JavaScript 5版本的详尽语言参考指南,它以其CHM(Compiled Help Manual)格式提供,这种...通过深入研究这个文档,开发者可以对JavaScript有更深入的理解,并能熟练地应用于实际项目中。

    JavaScript 特效源码大全

    这个“JavaScript特效源码大全”可能包含上述知识点的实例,通过学习和研究这些源码,开发者可以提升自己的JavaScript特效开发技能,理解并掌握实际项目中的最佳实践。同时,这些源码也可以作为调试和学习新技术的...

    Java/JavaScript专家门诊

    在IT领域,Java和JavaScript是两种非常重要的编程语言,它们各自有着独特的特性和用途,但同时也经常被一起...深入学习和研究"Java/JavaScript专家门诊"提供的资料,对于提升个人技能和解决实际问题具有极高的价值。

    JavaScript 全部实例代码

    虽然这些库和框架不在“JavaScript全部实例代码”的直接标签中,但深入理解基础JavaScript将为学习和应用这些工具打下坚实基础。 总之,“JavaScript全部实例代码”提供了学习和实践JavaScript语法和函数的丰富资源...

Global site tag (gtag.js) - Google Analytics