SegmentFault 最新的文章 |
- 源码泄露“危机“?阿里云、字节等大厂服务器疑似被海外黑客组织入侵,源代码被出售
- 你不知道的 Node.js Util
- 浅析Web components的痛点
- 处理可能超时的异步操作
- 详解电子表格中的json数据:序列化与反序列化
- 使用Docker Compose、Nginx、SSH和Github Actions实现前端自动化部署测试机
源码泄露“危机“?阿里云、字节等大厂服务器疑似被海外黑客组织入侵,源代码被出售 Posted: 15 Nov 2021 08:06 PM PST 11 月 11日,海外黑客组织 "AgainstTheWest" (简称ATW)在 raidforums 论坛放猛料,宣称他们窃取了中国服务器的源码,并疯狂将其泄露出来打包售卖。据悉,其攻击目标疑似已涉及到国内阿里、腾讯及字节等科技"大厂"。 该消息传入国内后,一时间引发科技圈"震动"。尽管尚不得知此次泄露数据和源代码事件的真实性,但关于该事件的讨论已经开始发酵。 11月12日,ATW 继续在 raidforums 论坛发文宣称他们入侵了阿里云的服务器并窃取了大量源码,窃取的源码以 5000 美元的价格打包售卖,支付方式为比特币或门罗币。 该 ATW 人士在论坛的发文中提到,他们泄漏了一些用于腾讯开发和测试平台的 SRC,并附上了当天泄漏的 SRC: 他们还扬言称,到目前为止已经成功地对中国许多公司实施了供应链攻击。同时表示,现在中国还没有对此事置评,未来还将继续泄漏更多 SRC。 据了解,该 raidforums 论坛发帖公布资料的方式分为买卖制和积分查看制。前者,卖家报价寻找心动买家,成功交易之前买家无法预览资料内容;后者是用户可通过花 8 点积分(人民币 29.234 元)来查看帖子附带的资料。 据相关报道,目前该 ATW 组织正在出售的疑似阿里云部分源代码如下图: 对于此次入侵事件,知名云安全服务商 Lace Work 的 云安全研究员也在其推特账号上发文对此事表示关注。推文中,Lace Work 分别附上了此次 ATW 组织关于入侵阿里云和腾讯的声明截图: 有报道显示,或许是因为该事件泄露资料的真伪暂时无法查明,因此当前 ATW 挂在买卖制板块的资料一份都没卖出去,一些买家想要 ATW 公布更多资料的细节信息,但未得到其回应。 而一些已经花了积分查看帖子中附带资料的用户则大呼 ATW 这是在骗钱,因为这些所谓"泄露文件"根本就不是阿里云的源代码! 据相关信息显示,截止11月15日, ATW 组织入侵的国内科技企业疑似已涉及CN 科技部、阿里云用户数据 、钉钉控制台数据、腾讯温江项目、微信用户消息样本、字节跳动少量源码、中天科技、方正电子、滴普科技、渤海保险有限公司源码。 关于该事件及所谓泄露源代码的真伪,国内大厂们暂时未予置评。对于该事件是否属实以及 ATW 组织的下一步动向,本站也会持续关注。入股您对此事有任何看法,欢迎在评论区家交流互动。 | ||||||||||||||
Posted: 15 Nov 2021 06:56 PM PST 从类型判断说起在 JavaScript 中,进行变量的类型校验是一个非常令人头疼的事,如果只是简单的使用 举几个简单的🌰:
后来,大家发现可以使用
对
But,在 Node.js 中,内部其实是有一组用来判断变量类型的 api 的。而且功能异常丰富,除了基础类型的判断,还支持判断 Promise 对象、Date 对象、各种ArrayBuffer。
严格相等在 JavaScript 中,对象、数组等变量在判断相等的过程中,如果用
该方法同样可以用来判断数组,是否严格相等:
Error First & Promise早期的 Node API 都是
在 Node 8 发布的时候,新增了一个
不过,后来也有很多人觉得这些原生 API 支持 Promise 的方式太过繁琐,每个 API 都需要单独的包装一层
注意:Node 14 后,
除了将 下面通过
调试与输出如果有开发过 Node 服务,应该都用过
其实,通过
只是在启动时,需要将 如果你有认真看上面的代码,应该会发现,在
除了
JavaScript 中的对象是一个很复杂的东西,除了直接使用
这么看
当然上面只是一部分配置,更详细的配置可查阅 node 文档,下面我们写几个案例: 所有的属性都换行显示:
只格式化对象第一层的值:
按照key值的编码倒序输出:
| ||||||||||||||
Posted: 10 Nov 2021 09:31 PM PST 写在前面最近致力于研究 Web components(以下简称WC),并且也初有成效的拿到了一定的结果,但今天想回过头来重新审视一下 WC。 WC 到底是什么?援引MDN上的解释: Web Components consists of several separate technologies. You can think of Web Components as reusable user interface widgets that are created using open Web technology. They are part of the browser and so they do not need external libraries like jQuery or Dojo. An existing Web Component can be used without writing code, simply by adding an import statement to an HTML page. Web Components use new or still-developing standard browser capabilities. 简单的讲,Web Component 就是把组件封装成 html 标签的形式,并且在使用时不需要写额外的 js 代码。 组件是前端的发展方向,抛开周边技术生态,单纯看 React 和 Vue 都是组件框架。因此,WC 可以视为原生标签的拓展/延伸,说到底,它依旧是一个标签! 类似 谷歌公司由于掌握了 Chrome 浏览器,一直在推动浏览器的原生组件,即 Web Components API。相比第三方框架,原生组件简单直接,符合直觉,不用加载任何外部模块,代码量小。貌似一切完美,似乎大有可以用来替换React、Vue之类的趋势。 很多人也提出过将它与三大前端框架比较,比如《Web Component 和类 React、Angular、Vue 组件化技术谁会成为未来?》,其实它们是两个领域的东西,不具有可比性。WC 最大的优势在于 CSS 防污染,浏览器原生支持的组件化实现;而 Vue 等 MVVM 框架注重数据分离和自动化绑定的实现。且 WC 中包含的 4 大 web api 是标准规范,使用上滞后性(比如新落地的规范往往要等几年后才会被人拿出来使用),但 vue、react、ng 等框架不会。 目前存在的缺陷与其它 web 框架一起使用存在一些小问题,会给开发体验上造成一些困扰。 1、组件内部事件的回调比如,一个弹窗组件(
现在方案是 custom element 内部自定义事件
2、组件样式覆盖对于开发者来说,难免会遇到需要调整组件内部样式的时候。无论你是使用 3、组件内部资源相对路径问题就目前来说,任何直接基于 Custom Element v1, Template 和 HTML Import 的组件都无法做到完全资源独立 —— 在不知道使用方环境且不给使用方增加额外限制的情况下使用内部封装的任何资源文件。比如如果你有一个自定义 icon 组件:
如果使用的项目中,根目录没有 icon.svg 文件,那就 gg。如果你在这里使用 cdn 路径,就会出现跨域问题。 4、form表单类组件 value 获取问题Shadow DOM 中包含有 <input>、<textarea> 或 <select> 等标签的 value 不会在 form 表单中自动关联。 示例代码:
WC 组件被使用后
提交的时候无法获取 其它表单标签获取 value 解决方案参考: 5、其它此外,缺少数据绑定和状态管理也是 WC 存在的缺陷,此处不再赘述。 写在后面
以上。 | ||||||||||||||
Posted: 15 Nov 2021 03:30 PM PST 自从 ECMAScript 的 Promise ES2015 和 async/await ES2017 特性发布以后,异步在前端界已经成为特别常见的操作。异步代码和同步代码在处理问题顺序上会存在一些差别,编写异步代码需要拥有跟编写同步代码不同的"意识",为此我还专门写了一篇「异步编程需要"意识"」,不过看的人不多,可能确实"无趣"。 本文要聊的问题可能仍然"无趣",但很现实 —— 如果一段代码久久不能执行完成,会怎么样? 如果这是同步代码,我们会看到一种叫做"无响应"的现象,或者通俗地说 —— "死掉了";但是如果是一段异步代码呢?可能我们等不到结果,但别的代码仍在继续,就好像这件事情没有发生一般。 当然事情并不是真的没发生,只不过在不同的情况下会产生不同的现象。比如有加载动画的页面,看起来就是一直在加载;又比如应该进行数据更新的页面,看不到数据变化;再比如一个对话框,怎么也关不掉 …… 这些现象我们统称为 BUG。但也有一些时候,某个异步操作过程并没有"回显",它就默默地死在那里,没有人知道,待页面刷新之后,就连一点遗迹都不会留下。 当然,这不是小说,我们得聊点"正事"。 Axios 自带超时处理使用 Axios 进行 Web Api 调用就是一种常见的异步操作过程。通常我们的代码会这样写:
这段代码一般情况下都执行良好,直到有一天用户抱怨说:怎么等了半天没反应? 然后开发者意识到,由于服务器压力增大,这个请求已经很难瞬时响应了。考虑到用户的感受,加了一个 loading 动画:
然而有一天,有用户说:"我等了半个小时,居然一直在那转圈圈!"于是开发者意识到,由于某种原因,请求被卡死了,这种情况下应该重发请求,或者直接报告给用户 —— 嗯,得加个超时检查。 幸运的是 Axios 确实可以处理超时,只需要在
Axios 没问题了,如果用 处理 fetch() 超时
如果需要中断一个
上面这个示例演示了如何实现
为了避免使用 本来到这里就可以结束了,但是对每一个
没问题了吗?不,有问题。 如果我们在上述代码的
并且在调用的给一个足够的时间:
我们会看到输出 对了,我们虽然为
完美!但问题还没结束。 万物皆可超时Axios 和 fetch 都提供了中断异步操作的途径,但对于一个不具备 对于这样的 Promise,我只能说,让他去吧,随便他去干到天荒地老 —— 反正我也没办法阻止。但生活总得继续,我不能一直等啊! 这种情况下我们可以把 race 是竞速的意思,所以
可以写一个 Timeout 来模拟看看效果:
至于如何写可以中止的异步操作,下次再聊。 | ||||||||||||||
Posted: 15 Nov 2021 06:50 PM PST 从XML到JSON当下应用开发常见的B/S架构之下,我们会遇到很多需要进行前后端数据传输的场景。而在这个传输的过程中,数据通过何种格式传输、方式是否迅速便捷、书写方式是否简单易学,都成为了程序员在开发时要考量的问题。 在1996年,W3C(World Wide Web Consortium,万维网联盟)正式公布了XML1.0标准, XML采用标准格式为基于Web的应用提供了一个统一进行数据描述和数据交换的标准,不同于HTML侧重于解决":如何将文件显示在浏览器中",XML更加侧重于解决:"如何将数据以结构化方式描述"。 (需要注意的是,XML并不是一种编程语言,而是一种跨语言的数据格式。) XML本身并不复杂,但是加上W3C制定的DTD、XSD、XPath、XSLT等二十多个标准之后,这个简单的数据交换格式平白变得复杂了起来。程序员但凡遇到,只能头大。苦心孤诣研究大半个月,也不好轻言自己全部清楚了。 而此时,推动着技术前进的另一台蒸汽机也被点燃——Ajax技术开始流行,映衬出XML越来越不容忽视的缺点。XML得以实现是基于DOM树,而DOM在各种浏览器中的实现细节不尽相同,所以XML的跨浏览器兼容性并不好,这时需要一种新的数据负载格式集成到HTML页面中,以满足Ajax的要求。 终于,在XML诞生后的第八年——2002年,由Douglas Crockford开始使用JSON这种轻量级数据交换格式。 首条JSON信息发出后,最让人们惊讶的是,这并不是一个全新的数据格式,它就是JavaScript。
而由于这条数据内容本身就是JavaScript,因此不再需要做任何额外解析,使用JS编译器就可以解决一切。 由于JSON非常简单,很快就风靡Web世界,并且成为ECMA标准。几乎所有编程语言都有解析JSON的库,而在JavaScript中,我们可以直接使用JSON,因为JavaScript内置了JSON的解析。把JavaScript对象变成JSON,就是把这个对象序列化成一个JSON格式的字符串,这样才能够通过网络传递给其他计算机。如果我们收到一个JSON格式的字符串,只需要把它反序列化成一个JavaScript对象,就可以在JavaScript中直接使用这个对象了。 Json的序列化和反序列化正如一道菜做好后,需要装在盘子里端给顾客,前后端的数据传输也是如此。数据通过指定格式,将传输的对象序列化为二进制数据流,然后再通过反序列化将数据流内容转化成为对应的数据对象。 JSON中的数据形式与转化方式在JSON中,数据有以下几种形式:
进行数据序列化和反序列化的方式有以下三种:
以JavaScriptSerializer类为例,
只需要调用对应方法,就可以直接实现对数据内容的序列化。 你以为到这里就结束了吗,当然没有。在实际应用中,数据本身的处理并没有什么难度,真正需要考虑解决的问题是,数据本身附加的属性、设置。就以我们自身为例,客户在纯前端电子表格中对JSON数据传输的真实需求是,这段数据需要保证所有可视化内容的完整传输。 纯前端表格中的JSON数据处理在实际处理用户需求时,用户在设置好如下图单元格后,不仅仅是单元格内存在数字,还会遇到单元格本身的样式、自定义函数、 自定义格式、自定义函数迷你图、自定义标签,以及自定义行筛选。 我们打开相关的代码,可以清楚地看到在格式中这些对单元格的设置,都被保存了下来。 在这个图中,我们可以看到不同类型的数据内容都可以完成序列化和反序列化的过程。在使用自定义序列化的过程中,查看相关代码,处理序列化的核心是typeName 字段在调用toJSON函数的过程,比如,可以将此类姓名和window对象联系。而反序列化时,调用 getTypeFromString 函数来获取类型名并且构造类型实例对象,然后调用类型实例上的 fromJSON方法。 此外还有许多其他的属性内容,下面列举其他样式设置的例子: 背景图片:
水印设置:
主题字体:
还有许多对于单元格的设置,这些样式内容都可以被完整保存下来,作为json数据进行传输,带来真正的表格json数据传输的便利。 使用过程中需要注意以下问题:
代码示例:
总结本文详细为大家介绍了数据传输从XML到JSON的故事,以及json进行序列化和反序列化的工作原理,同时带大家了解了在前端电子表格中要想完全实现整个内容的数据序列化和反序列化应该如何做。 后续也会为大家带来更多有趣或者严肃的内容~ 觉得不错,点个赞再走吧。 扩展阅读 | ||||||||||||||
使用Docker Compose、Nginx、SSH和Github Actions实现前端自动化部署测试机 Posted: 08 Nov 2021 07:40 AM PST 开篇,我们先来看一下远古时代的构建部署流程。想必大家对这个都不陌生:
显然这个流程不仅繁琐,而且效率也不高,开发每次发布都要耗费很长的时间在部署构建上面。 后面为了解决这个问题,就出现了 接下来我们来聊一下
再具体一点就是:
聊了这么多,相信很多同学一定会说:
很早之前,我也是这么想的,感觉与自己的业务也没啥关系,没有太大的必要去了解。 但是最近我在搞一个 没办法,只能一顿恶补。 但是当我通过学习这些知识和在项目中实践这些流程后,我在知识面上得到了很大的扩展。对操作系统,对实际的构建部署,甚至对工程化拥有了全新的认识。 这里也放下前面提到的 这个大的项目以 其中的 目前整个项目做了 70%左右,过程中遇到了很多问题,也得到了很大的提升。后续会有一波文章是关于项目中的一个个小点展开的,也都是满满的干货。 回到本篇文章的主题:
整体思路前端代码,打包出来的是静态文件,可用
核心代码变动:
⚠️ 本文将采用理论知识和实际相结合的方式,即先讲述一下对应知识点,同时会放一下与此知识点相关的项目代码或配置文件。 下面会依次讲解
|
You are subscribed to email updates from SegmentFault 最新的文章. To stop receiving these emails, you may unsubscribe now. | Email delivery powered by Google |
Google, 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States |
No comments:
Post a Comment