必威体育下载克里斯蒂安·海尔曼

γ网络真理:不能信任javascript

星期二,9月26日,2017年12:34

这是网络真理系列文章.这是一个系列,我们关注的是听起来真实的陈述,我们一直用它来进行无休止的讨论,而不是继续前进。今天,我想解决JavaScript的问题,以及我们应该如何依赖它。

好VS表达式()

javascript是“现代网络”的爱/恨主题。长期生活在这里的人们已经学会了不盲目依赖它的艰难方法。必威体育下载刚开始的人甚至不知道你怎么关掉它,或者为什么会有问题。

这给了我们一个向一个方向或另一个方向咆哮的无限机会。老警卫指出,新产品制造的易碎品对用户的需求太大。新的守卫指出,没有javascript的网络对用户来说既不有趣也不容易维护。很多次,这个论点是关于开发人员的便利性胜过Web的坚固性。我们不断地从光谱的两端观察它。

当我们得到javascript时,它在浏览器中运行,使许多事情成为可能HTMLCSS独自一人还做不到。我们可以在不重新加载页面的情况下对用户所做的事情做出反应。我们可以读出脚本运行时所处的环境并作出反应。JavaScript是Web的交互粘合剂。我们可以让浏览器做一些别人能做的事情。我们可以创建交互模型HTML表单没有提供。我们可以在浏览器和平台上创建一致的体验。

这就是主要问题出现的地方:对许多人来说,网络并不意味着到处都是一样的。相反,它应该为所有用户提供一个工作经验,并且用户代理越有能力就越有幻想。通过在我们的解决方案中依赖javascript,我们设置了一个屏障以进行控制。当JavaScript失败时,我们没有提供任何功能时,这尤其糟糕。

而javascript在很多方面都会失败。从不支持的环境到编码错误和连接性问题,任何事情都有可能中断。

javascript不像CSSHTML.这两个Web构建块都是容错的。这意味着当你写无效HTML,浏览器试图修复它。如果使用出血边缘CSS在旧浏览器中,它忽略了它。Javascript不是这样的。语法错误或访问未知对象会导致解释器放弃并拒绝。即使是最强大的环境也不支持JavaScript,直到第一个脚本加载并运行时没有问题。

斯图亚特·兰里奇解释了在你的剧本完成了你想在他的剧本中做的事情之前会出现什么问题。每个人都有javascript,正确的?站点。

JavaScript的主要功能是在浏览器中动态执行。它不需要任何编译,它不需要任何花哨的开发环境。这是它成功的很大一部分。与其他有类似能力的语言相比,它更容易接近。而且似乎很容易解决JavaScript的一个问题,这个问题在CSS如果你不习惯它的语法。javascript可以做任何事情:它可以加载额外的信息,它可以创造HTML它可以改变样式和图像。它是网络中各种各样的工具。

当一些东西容易应用时,人们总是有过度使用它的危险。将连接良好的开发设备视为世界是很有吸引力的。并期望你的用户拥有同样的速度和计算能力。在这种情况下,加载几个兆字节的javascript并不是为了方便维护而付出的高昂代价。当你在计量器上时,缓慢或不可靠的连接或在低端设备上,这种便利很快就会变成挫折。这是一个更大的问题,因为很难(如果不是不可能的话)检测到这些情况。

所以,对,Javascript是一个天气好的朋友,可以从很多方面突破。你也可能会阻止很多用户,因为你渴望更多的控制你不想控制的东西。

不过,这一事实有另一面。JavaScript已经从浏览器中的脚本语言发展到了自己的开发环境。随着节点和其他服务器端和嵌入式系统的兴起,javascript成为我们市场的一项关键技术。

javascript不是客户端的问题,这是一整套更大的报价。我在奥地利的Scbetway体育官方网riptconf讨论今年年初

通用的,同构的javascript——或者我们想出的其他流行词——是对语言缺乏容错能力的答案。我们可以在我们控制的空间(如服务器或构建过程)中运行javascript,然后呈现出纯文本HTML.我们可以在天气晴朗的情况下使用客户端JavaScript。如果失败了,我们可以依靠基于JS的美国石油学会以及路由机制,以便仍然向用户提供他们想要的内容。

真实的,然而,对于javascript脆弱性的实用方法要容易得多:人们无论如何都会使用它,让我们集中精力保证它的安全和可靠。

尽管我们仍然抱怨javascript在客户端中断,我们有一个庞大的开发团队,他们在所有方面都使用JavaScript。当我们担心支持某种新的浏览器功能时,人们依赖数百个包依赖性来构建非常基本的功能。当我们担心DOM漏洞,人们使用带有虚拟DOM和脚本路由的库,而不是超文本传输协议.

Javascript是一种给定的语言,它每天为数百名新开发人员提供支持和激励。作为网络爱好者,我们的工作不是告诉人们他们在一开始就使用它是错误的。我们的工作是让这些开发人员对这种新的使用方法具有创造性。就像我们在标准化的时候DOM仍然是一个梦想。

我们来这里不是为了发号施令。我们来到这里是为了接受一种有效技术的新应用,并帮助我们掌握知识,避免重蹈覆辙。但我们需要确保我们在这个过程中学习,必威体育下载也是。在旧技术的新应用中,很容易发现明显的错误。在过去的经验指导下,帮助人们解决他们面临的新问题要困难得多。但它更值得奖励,因为它不会创造一个“美国老圣人vs.那些新牛仔编剧的世界。

在更明确和受控的环境中,javascript变得更容易信任。我们现在更需要担心的是确保它不会变得太复杂。

不用担心Javascript的非容错性,以下是一些其他需要担心的事情:

  • 对于我们的项目来说,依赖一个松散管理的包存储库有多安全?我们怎样才能确保NPM我们使用的模块都不是恶意软件?我们如何确保人们安全使用软件包,让他们保持最新状态,不要在其中一个崩溃时面对灾难?
  • 我们如何在不产生不健康依赖的情况下获得抽象的回报?明天的Vue.js很可能就是今天的jquery用户界面。对,我们用抽象来创建越来越快的内容。但我们错过了理解我们创造的东西是如何工作的。我们不希望有很多开发人员和产品在抽象过时后变得无效。
  • 在没有压倒性的新开发人员的情况下,我们如何为JavaScript创建一个专业的开发环境?以前我们需要一个文本编辑器和一个浏览器。现在我们需要掌握命令行知识,工具链,单元测试,持续集成和高度定制的编辑器。每件事都有意义,但对于一个新的开发人员来说,可能会让人望而生畏。
  • 我们怎样才能在不依赖蒸腾作用的情况下使语言本身向前发展呢?Javascript最终被标准化,任何人都应该使用新功能,不仅在编译步骤中。
  • 当我们像使用编译语言一样使用JavaScript时,我们如何仍能获得及时编译的回报?
  • 我们的工具如何帮助新的和经验丰富的开发人员,而不压倒一个组和无聊的另一个组?是linting的答案还是它期望开发人员成为浏览器工具的专家?

在Twitter上分享