昨天在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
分享到:
相关推荐
【JavaScript源代码】JavaScript数组去重问题的深入研究.docx
现,攻击者保护攻击程序不被检测的手段也越来越多。目前常用的 方法就是对代码进行混淆,但是混淆手段也常被机构用于保护代码 版权,所以如何有效准确的识别出混淆恶意代码就变得很关键。 本文利用机器学习来检测...
VBScript & DHTML 脚本技术讨论版 - 无忧脚本 ---体验编写HTML代码的乐趣 - 51JS_COM_files对JavaScript调用堆栈和setTimeout用法的深入研究 - Felix Woo_files关于Javascript的内存泄漏问题的整理稿 - tim-wu - ...
针对将JavaScript代码N-gram处理后识别算法特征维度较高的问题,提出一种高效的降维方法。该方法利用TF-IDF-like模型分别计算特征在正常样本和恶意样本中的权重,基于特征权重在两类样本中的差异度进行降维。基于多...
一组JavaScript问题和用于研究算法的解决方案。 表中的内容 数据结构 问题 数组 矩阵 串 排序 堆 二元搜寻 二叉索引树 树 图形 特里(前缀树) 回溯 广度优先搜索 深度优先搜索 分而治之 链表 动态编程 贪婪 数学 ...
事件捕获/冒泡网页上的布局很复杂,我们对页面的单一操作有可能产生预计以外的影响:比如我点击一个span,我可能就想点击一个span,试试上他是先点击docume
继续研究JavaScript的编写,有发现一些不算ML问题,但是可以节约IE内存使用的方法,在此和大家讨论讨论。 我们在JavaScript中编写代码,对于定义函数的语句: function foo(){ // TODO: . . . return x;} ...
如果你不知道原因,不要过于担心,请研究CSS规则并查看这篇文章:使用CSS来修正一切: 20 +常见错误和修复。 如果这些也无效,您可以通过下面列出的12个javascript解决方案修复它,这样您的网页看起来就能跨越所有...
11.2 客户端API:离不开JavaScript 11.2.1 地图中的Mashup应用 11.2.2 Ajax搜索请求 11.2.3 地图与搜索的Mashup应用 11.3 服务器端API:需要代理脚本 11.3.1 通过Basecamp构建集成的To-...
面试中JavaScript问题和问题包含常见JavaScript问题,问题,这些问题通常是在技术和软件编码面试中提出的。 这是基于我对软件开发人员面试的准备和研究执照 此存储库根据。
余弦带来的议题是《JavaScript安全:从浏览器到服务端》,演讲者结合自己多年来web安全研究的经验,给大家分享了javascript在浏览器端的各种安全应用,并介绍了MongoDB和node.js中存在的一些安全问题,让大家见识到...
在本文中,我们将研究几种快速简洁的单行解决方案,以解决 JavaScript 中经常出现的各种问题。 什么是单行代码? 在我们开始之前,让我们确保我们了解是什么单行代码。 单行代码是问题的代码解决方案,使用特定编程...
尤其在使用JavaScript的开发者群体里,深入了解该语言的本来就不多,研究语言特性的就更少了。 《JavaScript语言精髓与编程实践》精选版从JavaScript 无关的角度综论这些语言的产生发展,以及特性的概要。作为纯...
主要介绍了JavaScript中for循环的效率问题及相关优化,文中谈到了Underscore.js库及循环在各个浏览器js解释器下的表现,需要的朋友可以参考下
此JavaScript程序旨在将飞书机器人与ChatGPT进行连接,以实现智能回答问题的功能。通过该程序,用户可以通过在飞书平台上发送问题,并利用ChatGPT的强大能力来获取准确的答案。 适用人群: 开发者:对于希望在自己的...
最近一直在研究 Javascript 相关的技术。在《Javascript 高级程序设计》有篇章节着重阐述了优化 Javascript 代码的重要性。相信有很多的 Javascript 开发人员在开发的同时或多或少的会接触到此类的问题。 在...
她想要一种模拟实际测试的方法,而不仅仅是单独解决实践问题。 问题,茉莉花测试和解决方案很大程度上取材于我们在上课前和上课第一周所遇到的练习,或者由其他学生提供。 我继续她的工作,并将其重构为JavaScript...