首页 文章 精选 留言 我的

精选列表

搜索[具身基座模型],共10004篇文章
优秀的个人博客,低调大师

一不留神,“双冠王”加身!

俗话说,机会总是留给有准备的人。这不,最近戴尔存储业务就传来了捷报。 IDC数据显示,在2015年互联网行业关键业务外部存储细分领域,戴尔一骑绝尘,业绩是第二名的3倍多。 此外,IDC最新发布的2016年第一季度全球外部磁盘存储市场季度跟踪报告显示,戴尔外部磁盘存储器(External Disk Storage)全球出货量占据10.5%的市场份额,位居第一。自2014年Q4开始,戴尔外部磁盘存储器已经6个季度出货位居前三。 “外部存储市场冠军”、“互联网行业关键业务外部存储市场冠军”,这样的成绩值得任何一家存储厂商骄傲。我认为,这两个头衔有着很高的含金量,一个是总体市场,一个是当前最具潜力的细分市场,这两个出货量冠军足以证明当前戴尔存储的受欢迎程度。 黑格尔曾说,“存在即合理”。戴尔存储能够取得双料冠军,自然有其原因所在。在我看来,左右成功的因素有很多,但归结起来无外乎有两个:一个是外因,一个是内因。 就戴尔存储的成绩而言,一方面得益于有利的市场形势,另一方面要归功于戴尔存储近年来的不断修炼,这两者缺一不可。 外因 存储市场被强力拉动 在我们所处的互联网时代,什么最热?不要跟我说创业和搞自媒体。从技术趋势来看,最热的莫过于“云大物移”,即云计算、大数据、物联网和移动互联。这些新兴的趋势有着一个共性,那就是不断膨胀的数据,数据的极速增长有力的拉动了存储设备的需求。 先看云计算。Gartner数据显示,2015年全球公有云服务市场规模约为1750亿美元,2016年全球公共云服务市场规模有望达到2040亿美元;其中发展最为迅速的是IaaS,2016年有望增长38.4%——公有云市场发展迅猛,催生了大量云数据中心,将大量数据集中,不仅包括企业数据,还有海量的消费者数字内容,对于存储市场来说,公有云的发展无疑是一支强心剂。 再来看大数据。随着人类的生产生活逐渐数字化,数据量正在呈几何级数增长。以中国当前大热的电子病历和智慧城市为例,中国某一线城市的健康档案数据每年可以达到5PB,某一线城市智慧城市数据每季度就可达到200PB;在科研方面,1立方毫米的电子显微图像数据可达1PB,所有中国公民的基因测序数据将超过1000EB…海量的数据要放在哪?当然是存储。 物联网、移动互联自不用提,在一个万物互联的时代,人与人、物与物、人与物的互联正在变得更加紧密。据Gartner预测,保守估计2016年全球可连网设备将达到64亿件,而到2020年将会上升到210亿件,这让全球存储容量将从 2011 年的 329EB 显著增加到 2016 年的 4.1ZB。 因此,我们常说,数据就像金矿,数据的价值并不仅仅在于能够通过分析手段从中获取洞察和决策,它的附加影响有很多,其中之一就是让存储的角色变得更为重要,极大的拉动了存储市场的发展。 除了“云大物移”,互联网行业关键业务的延伸也是推动存储市场的一个重要因素。在传统意义上,我们认为企业的关键应用无外乎有那么几个,数据库、ERP、CRM、OLTP等等。 但是,从实际情况来看,互联网行业越来越注重服务水平,包括响应速度、稳定性等,进而互联网服务平台正在逐渐成为新的关键业务,这让越来越多的互联网企业选择企业级存储、闪存等产品来提升服务平台的可靠性并突破性能瓶颈。 总结一下,新的技术趋势和市场需求赋予存储市场更大的活力,也给存储厂商带来了更多的机遇。不过,但对于各个玩家来说,市场所提供的机会是均等的,“成龙成虫”所依靠的还是自身的修为。 内因 打铁还需自身硬 外因固不可少,内因则更为重要。我认为,戴尔存储能够获得总体市场和互联网关键应用的双料出货冠军,其根本还是在于戴尔存储本身对用户有着足够的吸引力。 至于戴尔存储的优势,申斯基在之前的文章中已经反复提及过。本着“重要的事情说三遍”的原则,我们不妨再来重温一下: 1 戴尔存储有着齐全的产品线 以SC系列闪存存储为例,包括智能入门解决方案SCv2000、适合中型部署的SC4000、具有更大容量和更高灵活性的SC8000、适合最大型存储环境的旗舰级产品SC9000,从入门级、中端到高端旗舰型产品,能够覆盖各种客户及应用类型,是一条非常完善齐全的闪存产品线。 除SC系列之外,戴尔存储还有着PS、PowerVault等产品系列,结合SC系列,戴尔存储全面覆盖了NAS、DAS、备份和恢复、SAN、软件定义存储等多种类型,其产品丰富度在诸多存储提供商中首屈一指。 2 戴尔存储有着业内一流的性价比 在企业级闪存方面,戴尔一开始就打出了“颠覆闪存经济性”的口号——凭借优化型SSD(读密集型、写密集型、高级读密集型),结合流动数据架构以及自动分层技术、精简配置、重复数据删除、数据压缩等高级功能,戴尔一再拉低全闪存阵列的门槛,相继将每GB价格拉低到1.66美金、65美分。 随着全新的Dell Storage Center Operating System 7(SCOS 7) 的发布,戴尔再度刷新了全闪存阵列的价格纪录——SC系列全闪存层低于0.45美金/GB、磁盘层低于0.1美金/GB。 3 戴尔存储有着完善的服务和保障计划 戴尔为客户提供了性能分析与收集工具包DPACK,这是一个强大的分析主机端性能信息的工具,能够帮助客户理解工作负载的性能,也可协助进行存储解决方案的规划和选型;同时能够生成专业报告,让客户更好的了解自己的环境,做出明智的业务决策。 此外,针对SC系列存储,戴尔还推出了“60天内不满意即退货”的存储保障计划,即客户和戴尔签署相关合作协议后,有60天的试用期,客户可以部署、上线、使用,戴尔将在此过程中和客户进行实时的沟通,如果客户不满意,可以无条件退货。 据了解,企业选择IT基础架构通常需要考量几项关键因素:和自身业务的匹配度、解决方案完整度、可靠性、价格、服务和保障等。综合来看,从产品、服务到保障,戴尔存储为用户提供了一套完整的解决方案,同时提供了极具吸引力的价格,如果您是一个IT采购者,面对这样的存储解决方案,是不是也会仔细来评估一下呢? 加分项 戴尔存储更懂客户 什么样的产品才会在市场上获得成功?申斯基认为,让产品成功的因素有很多,或许因为价格、或许因为功能、或许因为外观或者设计,但归根结底,决定产品成功与否的原则只有一个——对客户需求的把控。 举个例子。iPhone是全球最受欢迎的智能手机,没有之一。为何?外观、性能、应用、稳定性、安全性…以及“面子”,iPhone提供了独一无二的用户体验——很多人认为,iPhone的成功之道在于“教育”用户,但申斯基认为,iPhone的成功在于挖掘和激发出了用户的潜在需求,为用户需求给出了最佳方案。 戴尔能够打造出“最受欢迎的存储”,其根本原因也在于懂客户、能够抓住客户需求,进而将需求反映在产品和服务之上。戴尔存储的独特产品设计、产品丰富度、高性价比以及完善的服务和保障,其实都是在努力符合客户需求,为客户提供更加“贴合”的解决方案。 例如,针对中国客户的需求,戴尔专门定制了SC4020中端存储,首度将全闪存阵列价格拉到25K美金以下,获得了大量中国客户的青睐。同时,戴尔SC全线产品已经全部实现国产,供应链更加贴近中国客户,提供更有效率的货期保障。 戴尔存储也很懂行业,而行业客户也一度给予了戴尔存储高度评价。 再举个例子。从2003年至今,苏州大学附属儿童医院所有的IT硬件设备都选择了戴尔。“十几年合作下来,无论是从技术创新还是服务理念,戴尔都给了医院很大支持。”该医院信息化负责人坦言:“戴尔对医疗行业非常了解,可以根据医院的实际情况及业务需求制定出量身定制方案,特别是戴尔的分层存储技术在新院IT基础架构建设过程中起到了非常重要的作用。” 据申斯基了解,类似苏州大学附属儿童医院这样,采用一整套戴尔IT解决方案的客户并不在少数,涵盖互联网、医疗、教育等多个行业,这是戴尔多年来深挖客户需求的结果。 综上所述,有了“外因”、“内因”和“加分项”,戴尔存储能够成为“最受欢迎的存储”,也就不足为奇了,你说是不是这个理呢? ====================================分割线================================ 本文转自d1net(转载)

优秀的个人博客,低调大师

CTO较具挑战性的安全威胁

最近一项研究报告显示,59% 的 CTO 仍然认为人为错误是对其业务的主要安全威胁,此外还有勒索软件 (49%) 和网络钓鱼 (36%) 等其他突出问题。 尽管认识到了风险,但调查结果表明,还需要采取更多措施来妥善保护公司免受危险,只有 26% 的公司拥有专门的网络安全团队,只有 50% 的公司将网络责任外包。 全球 CTO 的想法 该研究调查了 500 位全球 CTO,了解他们所在组织面临的最大挑战。研究的其他主要发现包括: 多因素身份验证 (MFA) 采用率很高,88% 的组织以某种方式使用它; 然而,尽管勒索软件在网络犯罪分子中越来越受欢迎,但仍有 47% 的人没有实施勒索软件保护; 58% 未使用安全信息和事件管理 (SIEM),41% 未使用特权访问管理 ( PAM ); 相反,92% 已实施灾难恢复 (DR) 功能,例如自动备份。 该报告发起单位负责人表示:“我们的调查表明,尽管勒索软件在过去几年中不可阻挡地崛起,但 CTO 心中最大的安全问题仍然是人为错误的潜在影响。这是可以理解的,因为为了取得成功,许多类型的网络攻击都依赖于某人无意中单击链接或下载文件。 “然而,真正有趣的是,当我们看到企业正在采取哪些措施来保护自己免受这些威胁时。拥有自己专门的网络团队的公司仍然是少数,虽然外包是首选,但这也不是大多数组织的共同政策。在查看尚未大规模实施的某些关键保护工具时,情况类似,例如勒索软件保护。不过,多因素身份验证等措施的既定存在提供了一些乐观的理由,因此看看其他安全功能在不久的将来是否会遵循类似的轨迹将会很有趣。” 应用灾难恢复的重要性 该负责人认为,为了进一步加强安全能力,企业应该密切关注灾难恢复过程是如何成功实施的,并致力于将这些方法复制到网络中。 他补充说:“灾难恢复计划的强大存在表明,组织在更包罗万象的总体责任方面做得很好,以确保业务在面对意外中断时具有弹性。下一步是领导者将这种方法应用于更精细的网络安全元素,包括反勒索软件工具。” 他总结道:“毕竟,安全功能在很多情况下都是为了减少人为错误导致重大网络事件的可能性。通过在这些领域加大投资,首席技术官将无需担心员工未来的任何风险行为。” 鸿蒙官方战略合作共建――HarmonyOS技术社区 【责任编辑:赵宁宁 TEL:(010)68476606】

优秀的个人博客,低调大师

【店滴云】工业物联网基座 1.5.1 版本发布,增强系统安全

应用介绍 店滴云是一款面向企业级用户的云端商业管理系统,专注于为连锁零售、集团企业提供全面的数字化解决方案。系统核心功能包括门店管理、财务结算、支付处理、开放平台集成等,特别适合需要多门店协同、集团化管理的商业场景。 版本信息 版本名称: v1.5.1 迭代类型: 基础修复(安全增强与功能优化) 更新内容 安全增强 新增IP黑名单配置:管理员现在可以配置IP黑名单,阻止可疑IP访问系统 强化请求日志记录:新增IP请求数据文件日志功能,便于安全审计 接口签名机制优化:修复接口签名机制,新增对外接口签名测试功能 微信安全校验:增强微信服务器安全校验处理,对openid进行非法字符过滤 功能改进 财务结算能力升级:集团下属子公司现在可以拥有独立的财务结算能力 支付证书配置优化:支付证书配置模式修改为字符串提交,简化配置流程 开放平台授权修复:优化开放平台授权机制 问题修复 日志系统改进:修复文件自定义日志中的中文转义问题 用户体验优化:将默认注册过程中的"用户名游客"修改为"用户"字样 补充说明 本次v1.5.1版本主要聚焦于系统安全性的全面提升和基础功能的优化完善,特别针对企业级用户的安全需求进行了多项增强。建议所有用户尽快升级以获得更安全稳定的使用体验。 下载链接 v1.5.1.zip 下载 v1.5.1.tar.gz 下载 (注:经测试,上述两个下载链接均可正常访问)

优秀的个人博客,低调大师

🔥smart-mqtt v0.33 发布,物联网平台的新基座

1、smart-mqtt 简介 smart-mqtt,是 smartboot 组织下面向物联网的首款解决方案,它使用 Java 语言开发,提供高效、可靠的 MQTT Broker 服务。 smart-mqtt 的独特优势在于大量设备接入的情况下,仍能保持低延迟和高吞吐量,满足物联网领域严苛的实时性需求。同时,smart-mqtt 为了最大限度地节省硬件成本,采用了高度优化的资源管理策略,降低了系统运行时的 CPU 和内存占用,使企业在保持高性能的同时,大幅降低运维成本。 另外,mqtt 协议天然适合 IM 场景,需要打造企业级 IM 应用,smart-mqtt 同样是一个非常好的选择。 smartboot 开源组织,一个容易被误认为是在 “重复造轮子” 的低调组织。曾获得2020 年度 OSC 中国开源项目「优秀 Gitee 组织 」荣誉。 该组织内的明星项目包括: smart-socket 历时 5 年精炼出 2 千多行代码,轻松实现百万级长连接的 AIO 通信框架。 smart-http 基于 smart-socket 实现的 HTTP/1.1 web 服务。 smart-servlet 基于 smart-http 实现的 Servlet 3.1 容器服务。 smart-mqtt 基于 smart-socket 实现的 MQTT 3.1.1/5.0 Broker&Client 服务。 smart-flow 一款具备可观测性的轻量级业务编排框架。 组织地址:?https://smartboot.tech/ 代码仓库:?https://gitee.com/smartboot 快速启动 docker run --name smart-mqtt \ -p 18083:18083 \ -p 1883:1883 \ -d smartboot/smart-mqtt:latest 18083:Web管理后台服务端口 1883:mqtt 端口 2、 版本更新 按照原定计划,smart-mqtt 将在 2024-01-01 日起终止《企业支持计划》,赞助商通道也将同步关闭。(PS:原授权企业若符合条件可继续享受原福利) 更新内容: 【社区版】 优化消息总线设计。 移除无用事件类型:OPEN_API_STARTED、CONNACK、NOTIFY_TOPIC_PUSH 优化 MQTT5 关于 Disconnect 的规范实现。 采用位运算方式优化协议编解码算法。 减少通信内存开销。 升级 smart-socket 至 1.5.39。 【企业版】 优化指标展示的时间格式化效果。 修复系统参数设置不能为空的问题。 支持配置化展示 dashboard 的指标项。 升级 smart-http 至 1.3.6。 3、性能测试报告 场景一: 10 个 publisher 每隔 1 毫秒发送 payload 为 128 字节的消息,这些消息分布在 128 种 topic 下,有 2000 个 subscriber 订阅这些 topic 的消息。 smart-mqtt 社区版 smart-mqtt 企业版 QoS0 350W/s 300W/s QoS1 220W/s 200W/s QoS2 110W/s 110w/s 场景二: 2000 个 publisher 每隔 1 毫秒发送 10 个 payload 为 128 字节的消息,这些消息分布在 128 种 topic 下。 smart-mqtt 社区版 smart-mqtt 企业版 QoS0 98W/s 97W/s QoS1 58W/s 58W/s QoS2 49W/s 47W/s 4、如何获取 smart-mqtt 4.1 源码 主仓库:https://gitee.com/smartboot/smart-mqtt 镜像同步:https://github.com/smartboot/smart-mqtt 4.2 Maven 依赖 mqtt broker <dependency> <groupId>org.smartboot.mqtt</groupId> <artifactId>smart-mqtt-broker</artifactId> <version>0.32</version> </dependency> mqtt client <dependency> <groupId>org.smartboot.mqtt</groupId> <artifactId>smart-mqtt-client</artifactId> <version>0.32</version> </dependency> 5. 关于 smart-mqtt 企业版 smart-mqtt 目前是由个人开发者在业余时间维护,计划 2024 年探索商业化模式。如果贵公司认可 smart-mqtt 的价值,现阶段可通过成为赞助商获得企业版授权。 赞助商等级 青铜赞助商 白银赞助商 黄金赞助商 铂金赞助商 赞助条件 加入企业支持计划 500 元 / 年 1500 元 / 年 5000 元 / 年 License 有效期 1 年 1 年 1 年 1 年 部署指导 - 1 次 1 次 不限次数 Logo 展示位 - 小号 中号 大号 首页 Logo 展示 - - - ✅ 技术支持 文档 邮件 /ISSUE 微信 / QQ / 邮件 微信 / QQ / 邮件 白银赞助商的价值: 成本:500 元 / 年,相当于一名初中级程序员一天的薪资。 产出效益: 增加品牌曝光率。 节省投入在 Sass 云服务中的巨额资费。 结交更多物联网领域的从业者。 成为赞助商遵循双方自愿原则,我们会在能力范围内尽可能提供 smart-mqtt 相关的技术支持。与此同时因时间和精力有限,我们也并不希望由此带来额外的负担,影响到项目的正常迭代。 所以,如有疑问尽量通过 ISSUE 交流,或者通过 ISSUE 和官方文档自助寻找答案,还望理解~~ ISSUE:?https://gitee.com/smartboot/smart-mqtt/issue

优秀的个人博客,低调大师

🔥smart-mqtt v0.32 发布,物联网平台的新基座

1、smart-mqtt 简介 smart-mqtt,是 smartboot 组织下面向物联网的首款解决方案,它使用 Java 语言开发,提供高效、可靠的 MQTT Broker 服务。 smart-mqtt 的独特优势在于大量设备接入的情况下,仍能保持低延迟和高吞吐量,满足物联网领域严苛的实时性需求。同时,smart-mqtt 为了最大限度地节省硬件成本,采用了高度优化的资源管理策略,降低了系统运行时的 CPU 和内存占用,使企业在保持高性能的同时,大幅降低运维成本。 另外,mqtt 协议天然适合 IM 场景,需要打造企业级 IM 应用,smart-mqtt 同样是一个非常好的选择。 smartboot 开源组织,一个容易被误认为是在 “重复造轮子” 的低调组织。曾获得2020 年度 OSC 中国开源项目「优秀 Gitee 组织 」荣誉。 该组织内的明星项目包括: smart-socket 历时 5 年精炼出 2 千多行代码,轻松实现百万级长连接的 AIO 通信框架。 smart-http 基于 smart-socket 实现的 HTTP/1.1 web 服务。 smart-servlet 基于 smart-http 实现的 Servlet 3.1 容器服务。 smart-mqtt 基于 smart-socket 实现的 MQTT 3.1.1/5.0 Broker&Client 服务。 smart-flow 一款具备可观测性的轻量级业务编排框架。 组织地址:?https://smartboot.tech/ 代码仓库:?https://gitee.com/smartboot 2、 版本更新 按照原定计划,smart-mqtt 将在 2024-01-01 日起终止《企业支持计划》,赞助商通道也将同步关闭。(PS:原授权企业若符合条件可继续享受原福利) 针对来年 smart-mqtt 运营策略上的调整,近期一直在打磨产品细节,以带来更好的用户体验。 首先,为了更加融入云原生环境,让用户更加便捷的享受 smart-mqtt 产品服务。自此版本开始,smart-mqtt 不再提供社区版发行包的下载,而是以 docker 的方式直接发布企业版镜像。 docker run --name smart-mqtt -p 18083:18083 -p 1883:1883 -d smartboot/smart-mqtt:latest 18083:Web管理后台服务端口 1883:mqtt 端口 其次,由于企业版存在一些高级功能,理论上相交社区版的性能会略低。为了降低性能损耗,通过算法优化不仅将企业版性能提升至原社区版水准,原社区版的性能也有了大幅提升。(具体见下文性能测试报告) 最后,为了贴合实际场景的使用表现。我们专门在一台 16G 内存的机器上模拟了 20万连接量,并稳定支撑了20万 TPS 的数据流量,服务端的内存开销约 3.5GB。 更新内容: 优化 Plugin 接口设计。 重构消息队列。 提供优雅停机能力。 提升 mqtt client 服务稳定性。 改进连接认证功能。 restapi 启用异步接口功能。 优化企业管理后台 topic订阅检索功能。 提供集群演示环境一键部署能力。 企业管理后台新增系统参数配置功能。 升级 smart-http 至 1.3.5。 升级 smart-socket 至 v1.5.36。 3、性能测试报告 场景一: 10 个 publisher 每隔 1 毫秒发送 payload 为 128 字节的消息,这些消息分布在 128 种 topic 下,有 2000 个 subscriber 订阅这些 topic 的消息。 smart-mqtt 社区版 smart-mqtt 企业版 QoS0 350W/s 300W/s QoS1 220W/s 200W/s QoS2 110W/s 110w/s 场景二: 2000 个 publisher 每隔 1 毫秒发送 10 个 payload 为 128 字节的消息,这些消息分布在 128 种 topic 下。 smart-mqtt社区版 smart-mqtt 企业版 QoS0 98W/s 97W/s QoS1 58W/s 58W/s QoS2 49W/s 47W/s 4、如何获取 smart-mqtt 4.1 源码 主仓库:https://gitee.com/smartboot/smart-mqtt 镜像同步:https://github.com/smartboot/smart-mqtt 4.2 Maven 依赖 mqtt broker <dependency> <groupId>org.smartboot.mqtt</groupId> <artifactId>smart-mqtt-broker</artifactId> <version>0.32</version> </dependency> mqtt client <dependency> <groupId>org.smartboot.mqtt</groupId> <artifactId>smart-mqtt-client</artifactId> <version>0.32</version> </dependency> 5. 关于 smart-mqtt 企业版 smart-mqtt 目前是由个人开发者在业余时间维护,计划 2024 年探索商业化模式。如果贵公司认可 smart-mqtt 的价值,现阶段可通过成为赞助商获得企业版授权。 赞助商等级 青铜赞助商 白银赞助商 黄金赞助商 铂金赞助商 赞助条件 加入企业支持计划 500 元 / 年 1500 元 / 年 5000 元 / 年 License 有效期 1 年 1 年 1 年 1 年 部署指导 - 1 次 1 次 不限次数 Logo 展示位 - 小号 中号 大号 首页 Logo 展示 - - - ✅ 技术支持 文档 邮件 /ISSUE 微信 / QQ / 邮件 微信 / QQ / 邮件 白银赞助商的价值: 成本:500 元 / 年,相当于一名初中级程序员一天的薪资。 产出效益: 增加品牌曝光率。 节省投入在 Sass 云服务中的巨额资费。 结交更多物联网领域的从业者。 成为赞助商遵循双方自愿原则,我们会在能力范围内尽可能提供 smart-mqtt 相关的技术支持。与此同时因时间和精力有限,我们也并不希望由此带来额外的负担,影响到项目的正常迭代。 所以,如有疑问尽量通过 ISSUE 交流,或者通过 ISSUE 和官方文档自助寻找答案,还望理解~~ ISSUE:?https://gitee.com/smartboot/smart-mqtt/issue

优秀的个人博客,低调大师

具身智能量产元年:人形机器人从"舞台炫技"到"工厂打工"的生死跨越死亡之谷:人形机器人工厂级量产、VLA泛化与Fleet机

2026年8月,人形机器人产业迎来了历史性的分水岭:从"展台炫技"正式迈入"车间打工"的量产元年。特斯拉为Optimus Gen-3停产Model S改造弗里蒙特工厂产线,首批50台已部署上海超级工厂;国内智元机器人完成超1万台工厂落地,佛山万台级自动化产线每30分钟下线一台;上海更提出"十五五"末推动10万台人形机器人进工厂的宏大目标。然而,当资本狂热与产线轰鸣交织时,一个残酷的工程现实正给行业泼下冷水:在Isaac Sim里99%成功率的完美抓取,到了充满油污、反光、震动的真实产线上,成功率暴跌至不足40% 。

优秀的个人博客,低调大师

WebAssembly完全入门——了解wasm的前世今身

前言 接触WebAssembly之后,在google上看了很多资料。感觉对WebAssembly的使用、介绍、意义都说的比较模糊和笼统。感觉看了之后收获没有达到预期,要么是文章中的例子自己去实操不能成功,要么就是不知所云、一脸蒙蔽。本着业务催生技术的态度,这边文章就诞生了。前部分主要是对WebAssembly的背景做一些介绍,WebAssembly是怎么出现的,优势在哪儿。如果想直接开始撸代码试试效果,可以直接跳到最后一个板块。 WebAssembly是什么? 定义 首先我们给它下个定义。 WebAssembly 或者 wasm 是一个可移植、体积小、加载快并且兼容 Web 的全新格式 例子 当然,我知道,即使你看了定义也不知道WebAssembly到底是什么东西。废话不多说,我们通过一个简单的例子来看看WebAssembly到底是什么。 上图的左侧是用C++实现的求递归的函数。中间是十六进制的Binary Code。右侧是指令文本。可能有人就问,这跟WebAssembly有个屁的关系?其实,中间的十六进制的Binary Code就是WebAssembly。 编译目标 大家可以看到,其可写性和可读性差到无法想象。那是因为WebAssembly不是用来给各位用手一行一行撸的代码,WebAssembly是一个编译目标。什么是编译目标?当我们写TypeScript的时候,Webpack最后打包生成的JavaScript文件就是编译目标。可能大家已经猜到了,上图的Binary就是左侧的C++代码经过编译器编译之后的结果。 WebAssembly的由来 性能瓶颈 在业务需求越来越复杂的现在,前端的开发逻辑越来越复杂,相应的代码量随之变的越来越多。相应的,整个项目的起步的时间越来越长。在性能不好的电脑上,启动一个前端的项目甚至要花上十多秒。这些其实还好,说明前端越来越受到重视,越来越多的人开始进行前端的开发。 但是除了逻辑复杂、代码量大,还有另一个原因是JavaScript这门语言本身的缺陷,JavaScript没有静态变量类型。这门解释型编程语言的作者Brendan Eich,仓促的创造了这门如果被广泛使用的语言,以至于JavaScript的发展史甚至在某种层面上变成了填坑史。为什么说没有静态类型会降低效率。这会涉及到一些JavaScript引擎的一些知识。 静态变量类型所带来的问题 这是Microsoft Edge浏览器的JavaScript引擎ChakraCore的结构。我们来看一看我们的JavaScript代码在引擎中会经历什么。 JavaScript文件会被下载下来。 然后进入Parser,Parser会把代码转化成AST(抽象语法树). 然后根据抽象语法树,Bytecode Compiler字节码编译器会生成引擎能够直接阅读、执行的字节码。 字节码进入翻译器,将字节码一行一行的翻译成效率十分高的Machine Code. 在项目运行的过程中,引擎会对执行次数较多的function记性优化,引擎将其代码编译成Machine Code后打包送到顶部的Just-In-Time(JIT) Compiler,下次再执行这个function,就会直接执行编译好的Machine Code。但是由于JavaScript的动态变量,上一秒可能是Array,下一秒就变成了Object。那么上一次引擎所做的优化,就失去了作用,此时又要再一次进行优化。 asm.js出现 所以为了解决这个问题,WebAssembly的前身,asm.js诞生了。asm.js是一个Javascript的严格子集,合理合法的asm.js代码一定是合理合法的JavaScript代码,但是反之就不成立。同WebAssembly一样,asm.js不是用来给各位用手一行一行撸的代码,asm.js是一个编译目标。它的可读性、可读性虽然比WebAssembly好,但是对于开发者来说,仍然是无法接受的。 asm.js强制静态类型,举个例子。 function asmJs() { 'use asm'; let myInt = 0 | 0; let myDouble = +1.1; } 为什么asm.js会有静态类型呢?因为像0 | 0这样的,代表这是一个Int的数据,而+1.1则代表这是一个Double的数据。 asm.js不能解决所有的问题 可能有人有疑问,这问题不是解决了吗?那为什么会有WebAssembly?WebAssembly又解决了什么问题?大家可以再看一下上面的ChakraCore的引擎结构。无论asm.js对静态类型的问题做的再好,它始终逃不过要经过Parser,要经过ByteCode Compiler,而这两步是JavaScript代码在引擎执行过程当中消耗时间最多的两步。而WebAssembly不用经过这两步。这就是WebAssembly比asm.js更快的原因。 WebAssembly横空出世 所以在2015年,我们迎来了WebAssembly。WebAssembly是经过编译器编译之后的代码,体积小、起步快。在语法上完全脱离JavaScript,同时具有沙盒化的执行环境。WebAssembly同样的强制静态类型,是C/C++/Rust的编译目标。 WebAssembly的优势 WebAssembly和asm.js性能对比 下面的图是Unity WebGL使用和不使用WebAssembly的起步时间对比的一个BenchMark,给大家当作一个参考。 可以看到,在FireFox中,WebAssembly和asm.js的性能差异达到了2倍,在Chrome中达到了3倍,在Edge中甚至达到了6倍。通过这些对比也可以从侧面看出,目前所有的主流浏览器都已经支持WebAssembly V1(Node >= 8.0.0). 与JavaScript做对比 我自己在一个用create-react-app新建的项目中,分别对比了WebAssembly版本和原生JavaScript版本的递归无优化的Fibonacci函数,下图是这两个函数在值是45、48、50的时候的性能对比。 看图说话,这就是WebAssembly与JavaScript很实际的一个性能对比。几乎稳定的是JavaScript的两倍。 WebAssembly在大型项目中的应用 在这里能够举的例子还是很多,比如AutoCAD、GoogleEarth、Unity、Unreal、PSPDKit、WebPack等等。拿其中几个来简单说一下。 AutoCAD 这是一个用于画图的软件,在很长的一段时间是没有Web的版本的,原因有两个,其一,是Web的性能的确不能满足他们的需求。其二,在WebAssembly没有面世之前,AutoCAD是用C++实现的,要将其搬到Web上,就意味着要重写他们所有的代码,这代价十分的巨大。 而在WebAssembly面世之后,AutoCAD得以利用编译器,将其沉淀了30多年的代码直接编译成WebAssembly,同时性能基于之前的普通Web应用得到了很大的提升。正是这些原因,得以让AutoCAD将其应用从Desktop搬到Web中。 Google Earth Google Earth也就是谷歌地球,因为需要展示很多3D的图像,对性能要求十分高,所以采取了一些Native的技术。最初的时候就连Google Chrome浏览器都不支持Web的版本,需要单独下载Google Earth的Destop应用。而在WebAssembly之后呢,谷歌地球推出了Web的版本。而据说下一个可以运行谷歌地球的浏览器是FireFox。 Unity和Unreal游戏引擎 这里给两个油管的链接自己体验一下,大家注意上网的方式。 Unity WebGL的戳这里 Unreal引擎的戳这里 WebAssembly要取代JavaScript? 答案是否定的,请看下图。 大家可以看到这是一个协作关系。WebAssembly是被设计成JavaScript的一个完善、补充,而不是一个替代品。WebAssembly将很多编程语言带到了Web中。但是JavaScript因其不可思议的能力,仍然将保留现有的地位。 什么时候使用WebAssembly? 说了这么多,我到底什么时候该使用它呢?总结下来,大部分情况分两个点。 对性能有很高要求的App/Module/游戏 在Web中使用C/C++/Rust/Go的库 举个简单的例子。如果你要实现的Web版本的Ins或者Facebook, 你想要提高效率。那么就可以把其中对图片进行压缩、解压缩、处理的工具,用C++实现,然后再编译回WebAssembly。 WebAssembly的几个开发工具 AssemblyScript。支持直接将TypeScript编译成WebAssembly。这对于很多前端同学来说,入门的门槛还是很低的。 Emscripten。可以说是WebAssembly的灵魂工具不为过,上面说了很多编译,这个就是那个编译器。将其他的高级语言,编译成WebAssembly。 WABT。是个将WebAssembly在字节码和文本格式相互转换的一个工具,方便开发者去理解这个wasm到底是在做什么事。 WebAssembly的意义 在我的个人理解上,WebAssembly并没有要替代JavaScript,一统天下的意思。我总结下来就两个点。 给了Web更好的性能 给了Web更多的可能 关于WebAssembly的性能问题,之前也花了很大的篇幅讲过了。而更多的可能,随着WebAssembly的技术越来越成熟,势必会有更多的应用,从Desktop被搬到Web上,这会使本来已经十分强大的Web更加丰富和强大。 WebAssembly实操 要进行这个实际操作,你需要安装上文提到过的编译器Emscripten,然后按照这个步骤去安装。以下的步骤都默认为你已经安装了Emscripten。 WebAssembly在Node中的应用 导入Emscripten环境变量 进入到你的emscripten安装目录,执行以下代码。 source emsdk/emsdk_env.sh 新建C文件 用C实现一个求和文件test.c,如下。 int add(int a, int b) { return a + b; } 使用Emscripten编译C文件 在同样的目录下执行如下代码。 emcc test.c -Os -s WASM=1 -s SIDE_MODULE=1 -o test.wasm emcc就是Emscripten编译器,test.c是我们的输入文件,-Os表示这次编译需要优化,-s WASM=1表示输出wasm的文件,因为默认的是输出asm.js,-s SIDE_MODULE=1表示就只要这一个模块,不要给我其他乱七八糟的代码,-o test.wasm是我们的输出文件。 编译成功之后,当前目录下就会生成test.wasm。 编写在Node中调用的代码 新建一个js文件test.js。代码如下。 const fs = require('fs'); let src = new Uint8Array(fs.readFileSync('./test.wasm')); const env = { memoryBase: 0, tableBase: 0, memory: new WebAssembly.Memory({ initial: 256 }), table: new WebAssembly.Table({ initial: 2, element: 'anyfunc' }), abort: () => {throw 'abort';} } WebAssembly.instantiate(src, {env: env}) .then(result => { console.log(result.instance.exports._add(20, 89)); }) .catch(e => console.log(e)); 执行test.js 运行以下代码。 node test.js 然后就可以看到输出的结果109了。 WebAssembly在React当中的应用 通过fetch的方法调用 直接用fetch的方式。大概的调用方式如下。 const fibonacciUrl = './fibonacci.wasm'; const {_fibonacci} = await this.getExportFunction(fibonacciUrl); 而getExportFunction具体代码如下。 getExportFunction = async (url) => { const env = { memoryBase: 0, tableBase: 0, memory: new WebAssembly.Memory({ initial: 256 }), table: new WebAssembly.Table({ initial: 2, element: 'anyfunc' }) }; const instance = await fetch(url).then((response) => { return response.arrayBuffer(); }).then((bytes) => { return WebAssembly.instantiate(bytes, {env: env}) }).then((instance) => { return instance.instance.exports; }); return instance; }; 通过import C文件来调用 先通过Import的方式来引进依赖。 import wasmC from './add.c'; 然后进行调用。具体的方式如下。 wasmC({ 'global': {}, 'env': { 'memoryBase': 0, 'tableBase': 0, 'memory': new WebAssembly.Memory({initial: 256}), 'table': new WebAssembly.Table({initial: 0, element: 'anyfunc'}) } }).then(result => { const exports = result.instance.exports; const add = exports._add; const fibonacci = exports._fibonacci; console.log('C return value was', add(2, 5643)); console.log('Fibonacci', fibonacci(2)); }); 详细的代码在这里,欢迎Star。 写在后面 如今技术出现的越来越多,但是实际上在工作中能够用到的,越并不是那么多。其实很多大厂所输出的一些技术,都是有业务场景的,有业务做推动。而不是凭空造轮子。所以总结下来适合自己的才是最好的。当然不是说不要了解新技术,了解新技术跟上步伐是十分必要的。我们现在不用,不代表不需要了解。相反,以后再遇到类似的业务场景时,我们就会多一种选择,可以更加从容的对待。 欢迎微信搜索关注【SH的全栈笔记】,回复【队列】获取MQ学习资料,包含基础概念解析和RocketMQ详细的源码解析,持续更新中。 好了以上就是本篇博客的全部内容了,如果你觉得这篇文章对你有帮助,还麻烦点个赞,关个注,分个享,留个言。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册