比特派官网下载app苹果手机|dojo

作者: 比特派官网下载app苹果手机
2024-03-07 18:19:40

特斯拉DOJO背后的秘密 - 知乎

特斯拉DOJO背后的秘密 - 知乎首发于电动星球News切换模式写文章登录/注册特斯拉DOJO背后的秘密电动星球蟹老板电动星球News主理人关注并标星电动星球News每天打卡阅读更深刻理解汽车产业变革————————出品:电动星球 News作者:毓肥上周五,特斯拉正式揭开了 DOJO 的神秘面纱。在当时的首发文章里面,我们重点回顾了整场发布会的主要内容。由于 AI Day 的主角太多,所以 DOJO 有关的部分,我们在保证阅读体验的基础上,更多地只能讲疗效。但如果不能跟大家交流更多 DOJO 的信息,我们觉得 AI Day 白看了。因为这场发布会是特斯拉正式转型,或者说正式成为人工智能公司的节点。而 DOJO 则是这家人工智能公司最底层,也是最重要的硬件产品。但到底应该怎么理解 DOJO,怎样用更易懂的语言让大家看到特斯拉的巧思、创新,甚至是狂想?最终我们决定,把这台 1.1EFLOPS 算力的 DOJO Pod,当成一个「人」:那么作为「细胞」存在的,应该是特斯拉自研的人工智能训练「节点」;作为「器官」存在的,则是 354 个节点构成的 D1 芯片;而 25 个 D1 芯片组成的「Training Tile」,又构成了 DOJO Pod 的「功能系统」;最终 120 个 Tile 组成的 DOJO Pod,则是一个完整的超算。也就是说,特斯拉从细胞级别的地基开始,完整地构建了一整套超算系统的大厦。除了英伟达和谷歌,目前还没有哪家科技企业展现过这样的能力,更不用说车企。今天的开头有点长,因为我们希望尽量写一篇更多朋友能理解的文章,而不是简单地堆砌术语。接下来,我们就从最基本的单位开始,带大家在 DOJO Pod 里面走一遍。一、DOJO 的细胞特斯拉将 DOJO 的最小组成单位,命名为「Training Node」,训练节点。它是 DOJO 的细胞,更是特斯拉芯片哲学的最精简具现。每一块 D1 芯片里面拥有 354 个这样的节点,我们可以近似地将它理解为「核心」。也就是说,每一块 D1 可以近似理解成 354 核的芯片。但这个「核」与我们谈论自家电脑酷睿 i5、i7 时的「四核」、「八核」依然有明显的区别。1. 所以,「Training Node」究竟是个啥?6 月底出席 2021 CVPR 会议时,特斯拉 AI 部门主管 Andrej 表示,一共有 5760 个英伟达 A100 GPU,为特斯拉的深度学习网络服务。CPU 和 GPU,可能是我们接触最多的芯片名词,而一般来讲,GPU 比 CPU 更适合用于深度计算。为什么 GPU 更适合?因为从结构上来说,GPU 更适合大规模、低精度的运算,CPU 更适合小规模(相对小)、高精度运算。我们决定不去解释 CPU 和 GPU 之间的结构差别,因为一个比喻就能搞定:CPU 是几位大学教授研究数论,GPU 是几百位中学生算一元二次方程。于是问题就变得更容易理解了:为什么中学生比大学教授更适合深度学习?因为深度学习的本质,就是低精度+大规模的卷积运算。对于神经网络运算,「核心规模」比「单个核心的精度」权重更高。说得再简单一点,就是让 10 位数学教授算 10 万条一元方程,一定没有 1 万个中学生算得快。所以,特斯拉需要把自家的人工智能芯片设计成类 GPU 架构,也就是单个核心无须特别复杂,但核心数要多。「Training Node」,就是一种接近 GPU 核心结构的产物,但由于它对特斯拉自己的算法高度优化,所以比英伟达卖的万能钥匙 GPU 稍微复杂;但它又要比纯粹的 CPU 更适合深度学习,所以规模更大。2. 造细胞的世界观有了,方法论呢?从这一小节开始,有一个词语希望大家牢记:带宽 Bandwidth。AI Day 的首发文章里,我们提到过算力并不是特斯拉的核心诉求。一块芯片的算力来源于半导体工艺,而特斯拉只负责选择工艺(甲方),不负责生产(乙方,台积电);只要特斯拉有钱买目前最先进的工艺,台积电一定可以把晶体管给你堆得满满当当。但如何将芯片设计得完美符合需求,也就是如何安排晶体管,这是砸钱无法解决的,也是真正衡量一家芯片公司技术实力的天平。特斯拉的 AI 硬件方法论很简单:一切为带宽服务。进入 AI 时代,所有标榜 AI 性能的芯片厂商,都在追求带宽最大化。比如英伟达为自家 A100 芯片配备了 HBM 超高带宽显存,并且通过高带宽桥接器 NV-Link 连接多个 A100。这也是特斯拉在 DOJO 正式使用之前选择英伟达的重要原因。为什么深度学习需要海量带宽?再来一个不算准确,但足够形象的比喻:写下 10 条大学向量代数习题需要的纸,一定比写 1 万条一元二次方程需要的纸少。深度学习需要的是大规模低精度运算,产生的低精度数据量非常可观。目前 AI 界硬件公司的思路是带宽开源,而软件公司的方向则是算法节流。至于算力,本质上归半导体代工厂管。3. 所以如何从最基础的部分开始,最大化 DOJO 的带宽?这块东西我们下面会详细说,叫做 Training Tile。之所以提上来,是需要解释一个概念——Tile 这个单词用于芯片领域,并不是特斯拉的首创,它起源于 1997 年的麻省理工。上面的芯片结构图叫做 RAW,基于麻省理工 1997 年的一篇论文首次提及的「划分方式」打造,这种方式就叫做 Tile。Tile 的特点,是它把处理单元、SRAM 缓存、网络接口等等模块集成在一个区域内,不同的区域之间通过 NoC,network on chip(片上网络)互连。它不像是一种架构,而更像一种排列方式。这种排列方式的好处,是扩展能力更强(比如堆叠更多核心)、核心之间连接方式多样且迅速。回到特斯拉的 Training Node 结构图。负责计算的单元并不是本文讨论的重点,右上角这一块「NoC Router 片上网络路由器」,才是 Training Node 的精髓。特斯拉为每一个 Node 设计了东南西北(上下左右)各 64bit 的片上NoC通道,这使得 Node 之间核心堆叠和数据传输的难度大大降低——或者打个比喻,堆乐高的时候你发现每一块积木都能从上下左右往外砌。内核间多方向的片上 NoC 通道,其实是 AI 芯片的共同趋势。像是此前拿下单芯片面积之最的 Cerebras WSE,其内部同样使用了 NoC 片上网络通信。二、D1 芯片聊到这里,我们冲出了 Training Node,来到了芯片层面。28 个月之后,特斯拉重拾自己芯片设计公司的头衔,带来了第二款自主设计的芯片产品。和 2019 年在车规级的笼子里跳舞不一样,这次的 D1 芯片是数据中心级别的产品——这意味着特斯拉终于可以毫无顾忌放肆一把。这枚 D1 芯片的基本参数是:645 平方毫米面积、500 亿个晶体管、11 英里的内部走线、400W TDP(Thermal Design Power 热设计功耗,指正常工作环境的负载功耗)。首先要说的,是 D1 晶体管密度非常高,每平方毫米晶体管数量达到了 7752 万个,这已经打平了使用台积电二代 7 纳米工艺的苹果 A13,超越了初代台积电 7 纳米工艺打造的英伟达 A100。台积电的功劳就说到这,接下来讲特斯拉做了什么。1. 10TB 每秒的on-chip bandwidth 片上带宽,这是极其恐怖的数字。没有对比就没有伤害,2019 年同样标榜自己 on-chip 带宽业内顶尖的英特尔 Stratix 10MX(一款最高拥有 10TOPS FP32 精度算力的通用计算芯片),这个指标为 1TB 每秒。但这里 10TB 指的更像是最理想结果,D1 芯片每个 node 每个方向的带宽是 512GB,10TB 指的是每一行(列)node 同时传输数据时达到的最大带宽。2. 另一个指标是 4TB 每秒的 off-chip bandwidth 片外带宽。这里涉及到另一个名词:SerDes,全称 Serializer-Deserializer,序列化器与反序列化器。我们还是只讲疗效:SerDes 是一种同等体积下增加带宽、减少信号数量的工具,可以降低芯片功耗和封装成本。目前单一 SerDes 接口最快的传输速率达到了 112Gbps——而特斯拉在每一块 D1 芯片的四条边上,都累计布置了 576 个 112Gb 带宽的 SerDes 接口。4TB 每秒到底有多快?特斯拉用了一张 PPT 作对比:不过有些「营销术语」我们得挑出来,比如用作对比的谷歌 TPU V3 已经是 2018 年的老产品,3 个月前 TPU V4 登场,各项指标并不比 D1 差。三、Training Tile下图所示,就是组成 DOJO Pod 的基本单元。每一块 Tile 上面都封装着 25 块 D1 芯片,总算力高达 9PFLOPS,芯片四周扩散出每边 9TB 每秒的超高速通信接口,然后上下则分别连接着水冷散热,以及供电模块。到这里,DOJO 的超高带宽系统已经完整呈现:D1 芯片内上下左右各 10TB 每秒→D1芯片间上下左右各 4TB 每秒→5x5 D1 芯片方阵各边 9TB 每秒→Tile 与 Tile 之间最高 36TB 每秒。一个 GB 级别的「小」数字都没有。为了实现这些数字,特斯拉最终设计了「可能是芯片工业史上最大的 MCM 封装」——这是特斯拉 Autopilot 硬件高级主管 Ganesh Venkataramanan 的原话。但特斯拉的工程魔法还没结束。上面是谷歌 TPU V3 的散热示意图。一块主板上四枚TPU用一个共同的水路散热。到了 TPU V4,水冷系统变得复杂,效率也提升了:但这种冷却系统有一个弊端:无法兼顾供电元件,需要另外考虑供电部分的散热。一个 DOJO Tile 上面有 25 块 D1 芯片,最保守估计功耗也超过了 10kW,120 个 Tile 功耗相当于一个 10 桩 V2 超充站火力全开——超充站的变压器也是需要散热的。特斯拉的解决方案有点像电脑领域的「分体水冷主板」:用垂直水路将芯片、供电元件连接起来,用最少的水路搞定多个散热需求。根据 AI Day 的 PPT,每一块 Tile 都配备了高达 15kW 散热能力的水冷系统,但最终结构却简单得过分:四、DOJO Pod120 个 Tile 组成的 Pod,是 DOJO 的最终形态。1.1Exaflops,则是一个 DOJO Pod 的最高算力。Pod 在这个语境下,指的是「通过网络手段连接在一起的多台计算机」,但一个 Pod 可以做到多大,业内没有明确规定。但这里要强调一下,1.1E 算力并非在超算界用的 FP32 完整精度测得,而是 BF16/CFP8 精度。BF16 精度,又叫 BrainFloat16,是为深度学习而优化的新数字格式,它保证了计算能力和计算量的节省,而预测精度的降低幅度最小,目前支持 BF16 精度的,已经有英特尔、谷歌、ARM 等等巨头。而 CFP8 则是特斯拉自优化的精度。「节省」是什么意思?举个例子,FP32 精度就是你告诉别人「我在广州市天河区天河路 218 号天环广场地上一层 L128 号商铺」,而 BF16 就是你告诉别人「我在广州天环广场」。那么如果计算 FP32 精度,DOJO Pod 是个怎样的水平?单个 D1 芯片可以达到 22.6T 的 FP32算力,那么整个 Pod 理论上就是 22.6x25x120=67800TFLOPS 的 FP32 算力。现在我们看看 2021 年上半年的 HPC 全球超算 TOP500 排行榜:67800TFLOPS 的算力可以排在第五位(看 Rmax 算力那一列),刚好把曾经的「全球最强 AI 计算机」,服役于美国国家能源研究科学计算中心(NERSC)的 Perlmutter 挤掉。但达到这个成绩,特斯拉只用了一个 Pod(机柜),而 Perlmutter 有 4 个长机柜。最后文章到这里就写完了。非常庆幸我能在 4000 字以内,将最希望与大家分享的 DOJO 相关细节写完,并且尽自己的能力,把术语解释得稍微浅显一点。但对于特斯拉来说,它作为一家人工智能企业的生涯,也许才刚刚开始。马斯克在 AI Day 上面说「特斯拉其实也是全球最大的机器人生产公司,我们生产的是轮上机器人」。然后他带来了真正的特斯拉机器人,并且明年就会有原型了。无论是智能电动汽车,还是人工智能,都还处于雏形阶段。特斯拉、谷歌,或者国内的新造车「御三家」、华为、百度,它们更像是「探索者」,而不是「收获者」。也正因为人类下一轮生产力大解放还处在黎明前,我们才能看到趋势,预测变化,并且亲眼见证变革。DOJO 不会是特斯拉的终点,也不会是人工智能的终点,但多年之后回过头来,它也许会是个「预兆」,或者说「开篇」。(完)发布于 2021-08-26 19:09dojo特斯拉汽车 (Tesla Motors)人工智能​赞同 27​​2 条评论​分享​喜欢​收藏​申请转载​文章被以下专栏收录电动星球News有关未来汽车的

Dojo Toolkit

Dojo Toolkit

Menu

Get Dojo

Docs

Community

Blog

Visit dojo.io for documentation, examples, and more on Dojo, the Progressive Framework for Modern Web Apps and successor to the Dojo Toolkit

Dojo Toolkit 1.17

A JavaScript toolkit that saves you time and scales with your development process. Provides everything you need to build a Web app. Language utilities, UI components, and more, all in one place, designed to work together perfectly.

Get Dojo

Trusted by

Reference Guide

Documentation and examples for every part of The Dojo Toolkit.

Use Dojo

Tutorials

Step-by-step guides focused on using Dojo to develop web apps.

API

The hardcore, no-fluff API documentation for the Dojo Toolkit.

Help & Support

Dojo on Discourse

#dojo on IRC

Dojo on Gitter

Dojo on GitHub

Stack Overflow

Commercial Support

Become a Contributor

Copyright OpenJS Foundation and Dojo Toolkit contributors. All rights

reserved. The OpenJS Foundation has registered trademarks and uses

trademarks. For a list of trademarks of the OpenJS Foundation, please see

our Trademark Policy and Trademark List. Node.js is a trademark of Joyent, Inc. and

is used with its permission. Trademarks and logos not indicated on the list of OpenJS Foundation trademarks are trademarks™

or registered® trademarks of their respective holders. Use of them does not imply any affiliation with

or endorsement by them.

The OpenJS Foundation | Terms of

Use | Privacy Policy | OpenJS Foundation Bylaws | Trademark Policy | Trademark List | Cookie Policy | Dojo

Toolkit License Information

如何评价JS框架Dojo 2? - 知乎

如何评价JS框架Dojo 2? - 知乎首页知乎知学堂发现等你来答​切换模式登录/注册JavaScriptDojo Toolkit前端框架如何评价JS框架Dojo 2?2018年5月2日,Dojo团队发布了 Dojo第二版(Dojo 2) 。Dojo是一种为JavaScript开发人员扩展开发过程提供帮助的工具箱。D…显示全部 ​关注者12被浏览21,106关注问题​写回答​邀请回答​好问题​添加评论​分享​3 个回答默认排序giscafer​软件开发行业 资深架构师​ 关注在angular vue.js react 盛行,生态也如此完整,app端各有ionic、weex、React Native的背景下,dojo2没啥机会的,况且dojo2也没啥特别突出的优势。发布于 2018-05-15 23:52​赞同 2​​2 条评论​分享​收藏​喜欢收起​xiechj​​ 关注已经Dojo4了。其实本身可能还比React好用一些(毕竟可以吸取React的经验包)。问题是生态。不知道将来能不能直接包含对React组件的支持。尤其是antd这类东西发布于 2018-10-17 00:19​赞同 1​​6 条评论​分享​收藏​喜欢收起​​

Dojo_百度百科

_百度百科 网页新闻贴吧知道网盘图片视频地图文库资讯采购百科百度首页登录注册进入词条全站搜索帮助首页秒懂百科特色百科知识专题加入百科百科团队权威合作下载百科APP个人中心收藏查看我的收藏0有用+10Dojo播报讨论上传视频用javascript语言实现的开源DHTML工具包Dojo是一个用javascript语言实现的开源DHTML工具包。它是在几个项目捐助基础上建立起来的(nWidgets,Burstlib,f(m)),这也是为什么叫它a"unified"toolkit的原因。Dojo的目标是解决开发DHTML应用程序遇到的那些,长期存在、历史问题(historical problems with DHTML)。跨浏览器问题。外文名Dojo属    性开源DHTML工具包语    种javascript目    的解决跨浏览器问题目录1原意2定义3基金会4快速安装5发展历史6特征7版本8模块9作用10解说11对象方法12性能优化原意播报编辑A school for training in Japanese arts of self-defense, such as judo(柔道) and karate(空手道).柔道训练学校,柔道馆,道馆。发音:“豆粥”定义播报编辑Dojo能够让你更容易使Web页面具有动态能力,或者在任何能够稳定支持JavaScript语言的环境中发挥作用。基金会播报编辑dojo基金会是一个在501条款下组建的非盈利性组织用来帮助开源项目的开发。该基金会的宗旨是鼓励企业来应用它旗下的开源项目,并鼓励基金会资助的项目之间的合作。IBM和Sun都宣布了对dojo的官方支持,包括向dojo开源项目贡献代码。Zend公司,PHP核心代码背后的公司,也宣布了与dojo基金会的合作关系,表示要将它引入Zend框架基金会的赞助者和成员包括IBMSun MicrosystemsJotSpotSitePenRenkooTurboAjaxOpenLaszloNexawebBea Systemsdojo基金会也资助dojo toolkit之外的下列项目:PersevereOpenRecordCometdDWRLucid Desktop快速安装播报编辑1.在DOJO官方网站下载相应版本的DOJO压缩包2.把文件解压缩到你的服务器或测试目录。这里假设把文件解压到 /js 下面,当做完以上步骤后,会出现如下图的目录结构。3.在HTML页面上添加JS引用,如:4.5.Dojo至此,安装完成,DOJO的详细使用方法,请参考DOJO官方文档。发展历史播报编辑在2004年初, Alex Russell (netWindows的原作者)开始在Informatica公司内寻找一个在DHTML项目的一个合作者。这个过程中,许多DHTML社区的成员都被他联系到了。这些沟通最终引出了一封题为“宣传DHTML的未来”的邮件。David Schotzler, Dylan Schiemann也与同年加入了Informatica公司。所以Dojo的最初的代码是有Alex和Dylan在Informatica的支持下写的。在Dojo早期,有许多成员都积极参与了开发,并逐渐形成了dojo今天的方向,他们是Joyce Park, Tom Trenka, Mark Anderson, Leonard Lin (最初提议用Dojo这个名字的人), Aaron Boodman, Simon Willison, Cal Henderson, and Dan Pupius.社区成员们最初几个月在ng-html邮件列表上讨论了关于授权协议,项目名称,编码规范,构建工具,服务器配置和用户需求之后,真正的工作开始了,dojo基金会也宣告成立。基金会是一个501实体,用来保管项目代码和知识产权,今天基金会也资助其他一些项目。dojo的贡献者来自超过60个开发者,许多的公司,主要的用户包括IBM,AOL, Sun, SitePen, Bloglines, Google, Nexaweb。特征播报编辑Dojo有以下的特征:1、利用Dojo提供的组件,你可以提升你的web应用程序可用性、交互能力以及功能上的提高。2、也可以更容易的建立互动的用户界面。同时Dojo提供小巧的动态处理工具。3、利用它的低级API和可兼容的代码,能够写出轻便的、单一风格(复杂)的JavaScript代码。Dojo的事件系统、I/O的API以及通用语言形式是基于一个强大编程环境。4、通过Dojo提供的工具,你可以为你的代码写命令行式的单元测试代码。5、Dojo的扩展包能够使你自己的代码更容易维护,耦合性更低。Dojo通过很少的代码完成了以上的功能。当你写脚本时,只需要包含很少的js文件,也可以选择的(包含)下载dojo提供的庞大的功能。版本播报编辑最新版本:1.10Dojo 1.5.0 于2010 年7月15日正式发布。此次发布的1.5.0版是dojo的第11个主要版本。此次发布包括了许多更新,具体包括:新的用户界面新版本的Dojo 提供了许多重大的界面改进,使用了新的Claro 主题。Claro 主题为Dojo 的用户界面库Dijit提供了现代,专业的界面风格。 这一主题包含了许多渐变透明背景,阴影以及CSS 动画特效(在WebKit 和基于Mozilla 的浏览器中可用)新的主题体现了“简单好用”的设计原则,并且极大的简化了了用户自己定制主题CSS的难度。因此用户可以很容易的创建出属于自己的风格,比如留白和色彩,而不用去设计新的背景图片。与此同时,这些新的风格都被应用到了不断增长的UI控件之中。新版的Dojo 还提供了门户网站布局机制,例如 “personalized Orange home page ”。用户可以快速创建自定义的应用界面。新版的Dojo 中还对矢量图形,图表控件 和绘图控件 做了许多增强, 包括 新的主题,渐变填充 等。新的dojox.gfx (图形图象包)在现有的支持SVG ,VML ,Canvas ,Flash 和Silverlight 之外增加了针对SVGWeb 的支持。因此你的图形代码可以根据浏览器而自动选择合适的底层引擎获得最大效率,同时也可以最大限度的保证浏览器兼容性。稳定,兼容的Dojo 核心Dojo core( 核心库) 一直非常稳定,因此从以前版本的Dojo 升级会非常顺利,同时新版的Dojo core 也做了许多改进。 新增加了dojo.Stateful API , 改进了dojo.Deffered API ,新增加了一种基于“承诺机制” api 。简而言之,Dojo core 核心库提供了你构建Web 应用必须的几乎所有基础功能。HTML5 & CSS3Dojo 中支持许多HTML5 的特性,其中有些特性的加入甚至早于任何浏览器对它们的支持,例如本地存储。针对HTML5 的新功能,Dojo的策略是尽可能的包装浏览器的功能,修正浏览器功能的小错误,增加API 的功能,简化用法,并且对旧版本的浏览器提供一种兼容的方案。其他功能的增强还包括,所有基于文本框的控件都增加了占位提示文本,新的dojox.style 扩展 用于支持CSS 转换,本地存储,富文本编辑器 ,多文件的上传,图形API 对Canvas 和SVG 的支持。Dojo 移动移动应用开发领域的发展飞速,其变化演进的速度远远超出了我们对Dojo 核心保持稳定的承诺。因此在Dojo中有许多新的计划正在积极进行中,目标是解决开发移动应用的时的各种难题。我们希望能够同时解决两种移动应用的类型:一种是移动的Web应用(运行在浏览器中),另一种是本地安装的移动应用,但其中嵌入浏览器。下面一系列的新计划或项目正在开展中,有些属于Dojo工具包,有些则属于Dojo 基金会:dojox.mobile : 轻量级的移动应用组件dojox.mobile.app : 移动应用开发框架embedjs : 为移动应用优化的Dojo APITouchScroll : 为WebKit 移动版定制的滑动抽象层wink : 移动应用程序工具包 (wink 是一个新加入dojo 基金会的项目)浏览器支持Dojo 支持几乎所有现代的浏览器,官方正式支持并经过测试的浏览器包括: Chrome 5, Firefox 3.5 and 3.6;Internet Explorer 6, 7, and 8; Opera 10.6 (Dojo Core only); Safari 4.1and 5. 其他的浏览器版本虽然未经官方正式声明支持,在绝大多数情况下Dojo 也可以在上面运行的很好。性能和稳定性Dojo 始终是性能评价最好的几个Ajax 工具包之列,我们还提供了工具来帮助你扩展的应用程序去提升性能。不管你使用哪种开发工具包都有可能碰到性能问题,而Dojo 的社区的存在以及Dojo 背后的许多的厂商都会帮助你诊断和解决你所遇到性能问题。整合与集成无论你曾使用过哪种HTTP 兼容的服务器端环境: Zend Framework, Spring, Persevere, Node,Narwhal, cometD-Jetty, DWR, Compuware Uniface, Ruby on Rails, Django,WebSphere, Apache, IIS, Dojo 都很容易与这些框架或技术进行集成。Dojo 也提供了与Adobe AIR 1.5、 2.0 , Appcelerator Titanium, PhoneGap 的集成,并且提供了与各种开发环境的集成接口包括: aptana studio, Komodo, Elicpse 等等。文档与技术支持Dojo 官方站点有完整的文档,而活跃的社区论坛为用户提供技术支持。如果需要职业的支持与咨询,Sitpen 是一家会为你提供Dojo 技术服务与咨询的公司。开始下载并试用Dojo1.5 吧,告诉我们你的感受,也告诉我们你用Dojo 构建了哪些了不起的应用!Dojo 基金会Dojo 工具包是Dojo 基金会的一部分。在Dojo 工具包之外,基金会迎来了3 个新项目的加入 Zazl , AnimeJ , 和wink . 基金会的其他项目cometD-Jetty 发布了2.0 版本,而 Persevere 2.0 beta 版将于2010年夏发布。------------旧版信息----------请大家下载dojo 0.3.1, 以下的说明均针对此版本1: 把Dojo加入到我们的Web程序中1.1 标志djConfig是Dojo里的一个全局对象, 其作用就是为Dojo提供各种选项, isDebug是最常用的属性之一, 设置为True以便能够在页面上直接看到调试输出, 当然其中还有些属性与调试有关, 这里就不啰嗦了1.2 引用 dojo 的启动代码你就把这些代码当成是java的import语句或C#中的using语句一样, 如果你不require的话, 而模块本身又没有整合在dojo.js中, 是会出现脚本错误的喔2. 针对不同需求提供的预整合包Dojo本身是由许多模块所组合而成的, 但是由于用户需求的多样性, dojo针对不同的需求而提供了不同的版本, 用户在下载dojo的时候就看见可以选择很多的版本, 比如Ajax版和Widget版, 每个版本最重要的区别就在于dojo.js文件, 但是除此之外, 每一个版本都是全功能的, dojo.js根据版本的不同而整合进了不同的模块3. 直接获取Dojo的最新源代码......模块播报编辑Dojo的代码被划分为逻辑单元称之为模块, 这有点类似于Java中的package,除了dojo的模块能够包含类 (类似于java中的classes)和简单函数比如: 模块"dojo.html"包含了一系列的函数, 比如dojo.html.getContentBox(), 模块"dojo.dnd"包含了一系列的HtmlDragObject的类注意名称约定, 函数的首字母为小写字母,类的首字母为大写模块也可以称之为"命名空间"包在多数情况下, dojo的模块只需要定义在一个文件就可以了, 但有时, 一个模块可能划分到多个文件, 比如: 模块dojo.html, 本来是定义在一个文件中, 可是由于功能的增强, 文件逐渐变大, 我们不得不将其拆分为多个文件, 这主要是为性能考虑, 以便浏览器可以只下载其需要用到的代码, 不幸的是其实现细节对于dojo的用户看起来不那么透明, 你必须知道你想要用到的功能到底是包含在哪个文件, 然后才能require并使用它,这样的每一个文件都称之为一个包作用播报编辑Dojo让你更容易使web页面具有动态能力,或在任何稳健的支持javascript语言的环境中发挥作用。a、利用dojo提供的组件,你可以提升你的web应用程序可用性、交互能力以及功能上的提高;b、你也可以更容易的建立degradeableuserinterfaces??,dojo提供小巧的widgets,animatetransitions;c、利用它的低级APIs和可兼容的代码,写出轻便的、单一风格(复杂)的javascript代码,Dojo的eventsystem,I/OAPIs,and generic language enhancement form the basis of a powerful programming environment.d、通过Dojo提供的工具,你可以为你的代码写命令行式的单元测试代码。e、the Dojo package system使你自己的代码更容易维护,耦合性更低。Dojo通过很少的代码完成了以上的功能。(以后可能我详细说说dojo的packagesystem,只需要三个js文件)。当你写脚本时,只需要包含很少的js文件(大小)。也可以选择的(包含)下载dojo提供的庞大的功能。Dojo provides Multiple Points Of Entry,Interpreter Independence,Forward Looking APIs,and focuses on Reducing Barriers To Adoption.dojo试图建立一种新的标签语言DojoML。目标是,在DojoML和javascript脚本语言不变的情况下,用不同的render方式展示数据,Renderingsmaybemadeavailableinseveralrenderingcontexts(suchasSVG,orperhapseventhedesktoporFlash)。(比较美好啊)更进一步,theDojoML剖析器可以接受html和svg为输入,容易的建立DegradeableResponsiveApplications解说播报编辑djConfig是dojo内置的一个全局设置对象,其作用是可以通过其控制dojo的行为首先我们需要在引用dojo.js前声明djConfig对象,以便在加载dojo.js的时候才能够取得所设置的值,虽然在0.3版本以后dojo支持在加载后设置,但是强烈建议你把声明djConfig的代码作为第一段script一个完整的djConfig对象定义如下(值均为dojo的默认值)vardjConfig={isDebug:false,debugContainerId:"",bindEncoding:"",allowQueryConfig:false,baseScriptUri:"",parseWidgets:truesearchIds:[],baseRelativePath:"",libraryScriptUri:"",iePreventClobber:false,ieClobberMinimal:true,preventBackButtonFix:true,};isDebug是一个很有用的属性,顾名思义,如果设置为真,则所有dojo.Debug的输出有效,开发时应该设置为true,发布时应该设置为false.debugContainerId同样也是与调试有关的,如果不指定的话,调试信息将会直接利用document.write输出,这样可能会破坏页面的整体布局,所以你可以指定任何一个可以作为容器的html元素的id作为调试信息输出容器allowQueryConfig,这个属性指明dojo是否允许从页面url的参数中读取djConfig中的相关属性,当值为true时,dojo会优先从url参数中读取djConfig的其他属性,比如:http://server/dojoDemo.htm?djConfig.debugContainerId=divDebugbaseScriptUri,一般不需要设置,dojo会自动根据你引用dojo.js的路径设置这个值,比如,,自动获取的值便是../dojo/ps:如果你有多个工程需要同时引用dojo.js的话,建议也把dojo当作一个独立的工程,引用的时候采用绝对路径就可以了parseWidgets,这个是可以控制dojo是否自动解析具有dojoType的html元素为对应的widget,如果你没有使用任何Widget,建议设置为false以加快dojo的加载速度searchIds,这是一个字符串数组,定义了所有需要解析为widget的html元素的ID,如果ID不在其中的html元素是不会被解析的,当数组为空数组时,则所有具有dojoType的元素都会被解析还有一个bindEncoding,是用来设置默认的bind请求的编码方式至于其它的属性,不是用处不大,就是不知道有什么作用在实际开发中,可以把djConfig的定义放在一个js文件里,并将其作为第一个引用的js文件,这样应该是最方便的。对象方法播报编辑这里所说的基础对象和方法是指的不Require任何包就能够调用的对象和方法匿名函数在开始前,介绍一下js里的匿名函数,这个在阅读dojo的源代码的时候,会发现到处都有匿名函数;(function(){alert(123);})();//前面的分号是一个空语句,是可以不要的匿名函数。一个匿名函数就是一个没有名字的函数。可以认为他们是一次性函数。当你只需要用一次某个函数时,他们就特别有用。通过使用匿名函数,没有必要把函数一直放在内存中,所以使用匿名函数更加有效率。当然你也可以根本不定义函数,但是使用匿名函数可以把你的代码分段,就像C#中的#region一样dojo.byId非常有用的一个方法,与prototype.js的著名的$一样,似乎以前的版本还有dojo.byIdArray,不过最新的版本已经找不到这个函数了(除了srccompat.2.2.js)。如果有多个元素具有指定的id,则返回的是一个集合UsageExample:dojo.byId("divTest");dojo.byId("divTest",document);dojo.byId(document.getElementById("divTest"));dojo.versiondojo的版本,可以取得major,minor,patch,flag和revision这个对象没什么太大用处,除非你要根据dojo的版本选择执行你的代码dojo.raise??抛出一个异常dojo.errorToString??将异常转换为字符串??UsageExample:try{dojo.raise("打印失败",newError("文件不存在"));}catch(e){alert(dojo.errorToString(e));}dojo.render??系统环境对象dojo.rendere返回browser,说明是工作在浏览器下dojo.render.ver返回4,似乎没什么用dojo.os.win返回true说明操作系统是Windowsdojo.os.linux返回true说明操作系统是Linuxdojo.os.osx返回true说明操作系统是MacOSdojo.html返回true说明浏览器是InternetExplorerdojo.html.opera返回true说明浏览器是Operadojo.html.khtml返回true说明浏览器是Konquerordojo.html.safari返回true说明浏览器是Safaridojo.html.moz返回true说明浏览器是MozillaFireFoxdojo.svg.capable返回true说明浏览器支持svgdojo.vml.capable返回true说明浏览器支持vmldojo.swf.capable返回true说明浏览器支持swfdojo.swt.capable返回true说明浏览器支持swt(IBM开发的StandardWidgetToolkit)如果dojo.html为true的话dojo.html50返回true说明浏览器是IE5.0dojo.html.55返回true说明浏览器是IE5.5dojo.html.60返回true说明浏览器是IE6.0dojo.html.e70返回true说明浏览器是IE7.0dojo.addOnLoad可以加载指定函数到window.load时执行,好处就是可以很方便的在window.load时执行多个函数UsageExample:dojo.addOnLoad(init);//init是一个函数dojo.addOnLoad(myObject,init);//init是myObject对象的一个方法dojo.require如果你想调用一个模块的对象的时候,你应该首先用dojo.require来请求这个模块,dojo会根据你的请求自动取得相应的js文件,并加载到内存中,这样你才能调用或创建其中的对象dojo会自动维护已加载的模块列表,所以是不会重复加载模块的UsageExample:dojo.require("dojo.event");dojo.requireIf=dojo.requireAfterIf可以根据指定的条件来决定是否加载指定的模块UsageExample:dojo.requireIf(dojo.htmle,"dojo.html");//如果dojo.html.为true,才会加载dojo.html模块dojo.provide除非你要开发自己的模块,不然是用不到这个方法的,你可以这句看成是向系统注册这个模块名称。UsageExample:dojo.provide("dojo.custom");dojo.exists判断指定对象是否具有指定名称的方法UsageExample:dojo.exists(dojo,"exists");//willreturntruedojo.hostenv.getText返回指定url的内容PS:由于浏览器的安全限制,因此只能用于取得同域名的url的内容,否则会报告权限不够UsageExample:aSync=false;//同步,确保返回内容不为nullsilent=true;//不抛出错误s=dojo.hostenv.getText("http://www.googcom/",aSync,silent);//返回Google的首页的HTMLalert(s);dojo.debug输出调试信息,如果在djConfig中指定了debugContainerId,则输出到指定的console容器中,否则直接document.write。所有的调试信息均以DEBUG:开头UsageExample:dojo.debug("这是调试信息");dojo.hostenv.println与dojo.debug类似,不同的是,输出内容没有DEBUG:UsageExample:dojo.hostenv.println("这是一般的输出信息");dojo.debugShallow输出指定对象的全部信息(Shallow说明并不会遍历到下一级别的对象属性)以供调试UsageExample:dojo.debugShallow(dojo.render.html);性能优化播报编辑1.编译合适的dojo文件。dojo十分“巨大”,而且有很多文件是最终用户不需要使用的。默认情况下的dojo.js比较大,有200多k,但是如果自定义进行编译之后可能只有10多k。而且将常用的模块编译到dojo.js也能提高效率。dojo的加载顺序如下:1).浏览器加载dojo.jsdojobootstrpcodedojoloader(optionally)frequentlyusedmodules2).dojo.js激活Dojo对象,动态的载入其他的module,如果模块已经载入,那么将不会再一次重新载入。dojo提供了一系列典型的编译方案可以选择。dojo的编译可以减少文件的下载数目,可以使文件大小显著的减少。2.减少widget的使用。每加载一个dojo的widget都需要额外的时间,所以当然使用越少dojo控件,速度就越快。3.使用新版本的dojo,建议1.0以上。新版本对性能进行了优化,减少了bug,所以尽量选用新的稳定版本。4.减少htmltag,每增加一个tag,性能的负担就越重,比如使用xxxxxxx就不如用xxxxxxx5.优化widget的加载dojo在页面加载的时候将分析整个HTML文件,自动加载指定的内容为dojo控件。即使你没有定义任何dojo控件。所以优化widget的控件能够显著的提升一个页面加载的性能。如果页面载入花费的时间比较多,你觉得不正常,可以用Firebug看看是不是页面载入的时候花费很多时间在dj_load_init()或者modulesLoaded()这些地方,这些都是明显的信号表明我们需要留意widget的加载问题。dojo提供了多种方式来控制widget的加载。其中最重要的就是它提供了跳过所有widget解析的方法,只需要加入下面的代码到dojo.js引入之前:djConfig={parseWidgets:false,searchIds:[]};djConfig={parseWidgets:false,searchIds:[]};那么如果需要解析一部分widget怎么办呢?下面的方法可以指定需要解析那些widget。只需要将需要解析的widget的id放到searchIds:djConfig={parseWidgets:false,searchIds:["info","confirmation"]};djConfig.searchIds.push("from_date");djConfig={parseWidgets:false,searchIds:["info","confirmation"]};djConfig.searchIds.push("from_date");上面的代码一共解析了3个dojowidget,其中前两个直接放到searchIds,而第三个则动态的加入到searchIds。如果你不喜欢searchIds的方式,还有一种方式提供选择,给控件加上parseWidgets='false'属性:Dojowidgetparser将不会运行到这里,因为我们已经告诉他忽略这里。通过上面的方式,相信你的dojo性能能够得到显著的提升,如果仍然达不到性能要求,那么可能你只能放弃dojo,或者让客户进行机器的升级了。。新手上路成长任务编辑入门编辑规则本人编辑我有疑问内容质疑在线客服官方贴吧意见反馈投诉建议举报不良信息未通过词条申诉投诉侵权信息封禁查询与解封©2024 Baidu 使用百度前必读 | 百科协议 | 隐私政策 | 百度百科合作平台 | 京ICP证030173号 京公网安备110000020000

Dojo

Dojo

MenuBlogLearnPlaygroundRoadmapOverviewCreating WidgetsMiddlewareBuildingI18nStylingStoresRoutingTestingIntroduction序言 - 构建企业级 web 应用程序Dojo 应用程序的组件状态管理用户体验效率和性能可访问性与国际化可适配的外观应用程序的开发生命周期介绍Dojo 提供了一套设计现代 web 应用程序的完整解决方案,项目需要时也可以逐步的模块化。Dojo 框架可以随着应用程序的复杂性而扩展,可构建的内容从简单的预渲染站点一直到企业级的单页面 web 应用,包括跨多种设备的、接近本地 app 体验的渐进式 web 应用程序。Dojo 提供了各种各样的框架组件、工具以及构建管道,它们协助解决许多端到端 web 应用程序的开发问题。管理复杂的应用程序

开发称为 Widget 的简单且模块化的组件,这些组件可通过多种方式组装,以实现日益复杂的需求。

使用响应式的状态管理和数据流来连接部件,当应用程序的状态更改时,Dojo 框架就可以高效地渲染更新。

使用集中的、面向命令的数据存储来管理高级的应用程序状态。

允许用户使用声明式路由在单页面应用程序(SPA)内导航,并支持跟踪历史记录。

通过功能切换检测来禁用处于开发阶段的功能——甚至在构建时删除未使用的模块,缩减应用程序的交付大小。编写适合在浏览器或服务器上运行的程序。

创建高效的应用程序

通过虚拟化 DOM(VDOM)声明部件结构,避免高昂的 DOM 操作和布局抖动。

简化资源分层和绑定,缩减用户实际需要的应用程序交互时间(Time-to-Interactive)。当模块及其依赖跨多个绑定时,Dojo 框架能自动将 import 转换为延迟加载。

创建全面的应用程序

开发支持主题的部件和应用程序,从而将页面外观和页面功能隔离,并通过一种极其简单的方式在整个应用程序中实现外观一致。

使用一套支持国际化(i18n)、可访问性(a11y)以及现成主题的 UI 部件

使用国际化(i18n)框架支持多套区域设置,包括通过 Unicode CLDR 实现高级的消息格式化。

创建可适配的应用程序

开发渐进式 web 应用程序(PWA),支持与本地设备 APP 类似的功能,如离线使用、后台数据同步和推送通知。

使用构建时渲染(BTR),提供可以与服务器端渲染(SSR)的应用程序媲美的预渲染功能,并且不需要托管到动态的 web 服务器上。创建完全不使用 JavaScript 的、真正的静态站点;或者借助 BTR 让应用程序实现更好的首次加载体验。

利用先进的 web 技术,如 Web Animations、Intersection Observers 和 Resize Observers。Dojo 框架为用户在多种运行环境上使用最新功能提供了一致的应用程序体验。

如果需要的话,需要定制的应用程序可以脱离 Dojo 的构建管道,转而使用自己的解决方案,并只使用框架提供的部分功能。

加快开发

使用简单的命令行界面(CLI)启动新项目,并持续的构建和验证。支持行业最佳实践且类型安全和稳健的构建管道,能立即提升开发人员的工作效率。

快速构建与 Dojo 自带的部件库具有相同功能的自定义部件,包括自定义主题。

© 2020 Open JS FoundationdocsOverviewCreating WidgetsMiddlewareBuildingI18nStylingStoresRoutingTestingcommunityCode of ConductGitHubDiscordTwitterDiscourseExamplesrepositoriesframeworkwidgetsthemesinteropclicli-create-appcli-build-appcli-build-widgetcli-create-themecli-build-themecli-upgrade-appcli-test-internwebpack-contribsiteversionsLatestv5.0languagesEnglishSimplified Chinese (简体中文)

ClassDojo

sDojoSkip contentTeachersSchoolsDistrictsResourcesDojo IslandsDojo TutorTeacher loginParent loginWhere classrooms become communitiesLoved by more than 50 million students and parents.Free for teachers, forever.Get started as a...TeacherParentStudentSchool LeaderDistrict LeaderSign up2 million+ reviewsKeeping teachers, families, and kids connectedStay connected—instantlyMessages make it easy to communicate with teachers, families and staff anytime, anywhere—and are automatically translated into more than 35 languages �Offer a window into their worldWith Stories, teachers can securely share photos, videos and updates on a private feed so parents can see the classroom magic for themselves ✨Keep everyone up-to-dateAdding Events to the calendar is easy and keeps everyone in the loop with automatic reminders 📅Help them grow their own wayClassDojo helps teachers and families collaborate to support social-emotional learning with Points and Big Ideas—and gives kids a voice of their own with Portfolios �Build the best classroom yetFrom attendance sheets to timers and everything in between, the Teacher Toolkit will save time and energy for what really matters—helping kids grow 🌱A world of adventure awaits.Learn MoreOur community is our superpowerMrs. K@artwithmrs_kHighlight of virtual teaching: being able to easily communicate with Spanish speaking families on @ClassDojo ��Julissa R.@jd_rowellLove using @ClassDojo to practice mindfulness! What a great way to start the dayMrs. K@artwithmrs_kLove using @ClassDojo to practice mindfulness! What a great way to start the dayJulissa R.@jd_rowellLove using @ClassDojo to practice mindfulness! What a great way to start the dayMrs. K@artwithmrs_kHighlight of virtual teaching: being able to easily communicate with Spanish speaking families on @ClassDojo ��Jennifer H. Ed.D@jennifermhardinDoes everyone else love Class Dojo as much as we do here at Wentworth? �Katie E.@katieerbWe love being able to use @ClassDojo to demonstrate our learning and share the results with family members using the portfolio!Mrs. W@mrswscholars� Thank you @ClassDojo for providing opportunities for scholars to not only complete lessons, but give us teachers some love!Mrs. K@artwithmrs_kHighlight of virtual teaching: being able to easily communicate with Spanish speaking families on @ClassDojo ��Jennifer H. Ed.D@jennifermhardinDoes everyone else love Class Dojo as much as we do here at Wentworth? �Katie E.@katieerbWe love being able to use @ClassDojo to demonstrate our learning and share the results with family members using the portfolio!Mrs. W@mrswscholars� Thank you @ClassDojo for providing opportunities for scholars to not only complete lessons, but give us teachers some love!See more smilesPrivacy first—alwaysFind out how we protect our community of teachers, families, and studentsLet’s get growingGet startedCompanyAbout usPressCareersEngineeringAccessibilityResourcesBig IdeasPointsResourcesTrainingRemote LearningClassDojo PlusSupportHelpdeskContactCookie SettingsTransparency Notice at CollectionPrivacy CenterCommunityTeacher CommunityFacebookTwitterInstagramWall of LoveEnglish© ClassDojo, IncTerms of ServiceProduct Privacy PolicyWebsite Privacy Pol

Dojo

Dojo

MenuBlogLearnPlaygroundRoadmapWidgetsA Progressive Framework for Modern Web AppsBuild with DojoProductiveDojo enables teams to build web applications with a deliberate approach to productivity, sustainability and code management.AdaptableIntent on not reinventing the wheel, Dojo allows for easy integration with the most powerful solutions available today on the open web.InclusiveAccessibility and internationalization are required for enterprise web applications. Dojo supports inclusivity and provides both.Get Going QuicklyGetting started with Dojo is simple. You can use your command line of choice and npm to get going quickly.npm i @dojo/cli @dojo/cli-create-app -g|dojo create app --name hello-world|import renderer, { create, tsx } from '@dojo/framework/core/vdom'; const factory = create();const App = factory(function App() {    return

Hello, Dojo World!
;});const r = renderer(() => );r.mount();✔Success!A Complete FrameworkWidgetsWrite reusable, reactive components for your page. Dojo allows composition of complex user interfaces via its widget system.RoutingRouting out-of-the-box for your application. Declare routes and create navigation flows for your web app.State ManagementManaging state can be difficult. With built-in state management via the Dojo Stores system, you can track and update your application state efficiently.Centering Modern StandardsDojo encourages the usage of Browser APIs like ResizeObserver and IntersectionObserver, rather than reinventing the wheel.Dynamic PolyfillsFor older browsers Dojo will dynamically load Polyfills for users, just shipping them the things they need.Compile to Web ComponentsAllow your Widgets to work across other frameworks by compiling them to native Web Components.Leverage the PlatformBuild for EveryoneInternationalizationDojo provides the tools to allow you to internationalize your application with ease, serving your web app in the language of your users.AccessibililityDojo Widgets, the widget library provided alongside the Dojo framework, aims to be accessible out-of-the-box.Lightweight by DefaultThe core framework for Dojo comes in at 16kb. Dojo code splits on routes, so that code is only fetched, compiled, and executed when required.© 2022 Open JS FoundationdocsOverviewCreating WidgetsMiddlewareBuildingI18nStylingStoresResourcesRoutingTestingCustom ElementscommunityCode of ConductGitHubDiscordTwitterDiscourseExamplesrepositoriesframeworkwidgetsthemesinteropclicli-create-appcli-build-appcli-build-widgetcli-create-themecli-build-themecli-upgrade-appcli-test-internwebpack-contribsiteversionsLatestv7.0v6.0v5.0languagesEnglishSimplified Chinese (简体

Dojo Building Guide

Dojo Building Guide

MenuBlogLearnPlaygroundRoadmapWidgetsOverviewCreating WidgetsMiddlewareBuildingI18nStylingStoresResourcesRoutingTestingCustom Elements介绍应用程序的根路径创建包静态资源渐进式 web 应用程序构建时渲染按条件选取代码外部依赖脱离 Dojo 构建管道介绍Dojo 提供了一套强大的命令行工具,让构建现代应用程序更加简单。可以自动创建包(Bundle),可以使用 PWA 在本地缓存文件,可以在构建阶段渲染初始的 HTML 和 CSS,也可以使用 Dojo 的 CLI 工具和 .dojorc 配置文件按条件忽略一些代码。或者脱离(eject) Dojo 的构建工具,直接使用底层的构建工具以做到完全掌控。

功能

描述

Dojo CLI

模块化的命令行工具,用于快速启动新的应用程序、创建部件和运行测试等。

开发服务器

开发时使用的本地 web 服务器,用于监听文件系统,当检测到变化时会自动重新构建。也支持 HTTPS 和设置代理。

包(bundle)

通过减少用户需要下载的内容和优化用户实际需要的应用程序交互时间(Time-to-Interactive)以提高用户体验。可以根据路由自动创建包,或者在配置文件中明确定义包。

按条件纳入代码

通过 .dojorc 配置文件可以静态方式关闭或打开使用 dojo/has 定义的功能。由于这些配置而无法访问到的代码分支会被自动忽略掉。这就很容易为特定目标(如 IE11 或 mobile)提供特定功能,而不会影响包的大小。

PWA 支持

渐进式 Web 应用程序通过缓存内容甚至脱机工作,创建更快、更可靠的用户体验。通过配置文件或者在代码中定义,dojo 很容易创建一个 service work,并将其构建为应用程序的一部分。

构建时渲染

在构建时渲染路由以生成初始的 HTML 和 CSS。在构建时渲染,Dojo 可以节省出初始渲染的成本,创建出一个响应性更高的应用程序,且不会引入额外的复杂性。

基本用法Dojo 提供了一组 CLI 命令,辅助创建和构建应用程序。本指南假设已全局安装 @dojo/cli,且在项目中安装了 @dojo/cli-build-app 和 @dojo/cli-test-intern。如果项目是使用 @dojo/cli-create-app 初始化的,那么这些依赖应该已经存在。构建Dojo 的 CLI 工具支持多种构建目标或 mode。在 dojo create app 为 package.json 生成的几个脚本(scripts)中可看到所有模式。运行以下命令,创建一个为生产环境优化过的构建。> dojo build --mode dist

此次构建使用 dist 模式创建应用程序包,并将结果输出到 output/dist 目录中。运行服务和监听变化当在 dev 或 dist 模式下运行时,可以使用 --serve 标记启动一个 web 服务器。应用程序默认运行在 9999 端口上。可以使用 --port 标记修改端口。使用 --watch 标记,Dojo 的构建工具也可以监听应用程序的变化并自动重新构建。生成的 package.json 文件中包含 dev 脚本,它使用这些标记运行应用程序的构建版本,并监听到磁盘上的文件发生变化后会自动重新构建。> dojo build --mode dev --watch --serve

应用程序也会提供 source map。这样调试器就可以将构建的 JavaScript 代码映射回位于 src/ 文件夹下原本的 TypeScript 代码上。测试Dojo 使用 Intern 运行单元和功能测试。T 运行 tests/unit 中单元测试的最快方式,是使用新建 Dojo 应用程序时创建的 NPM 脚本。

命令行

# execute unit tests

npm run test:unit

# execute functional tests locally using headless Chrome and Selenium

npm run test:functional

支持的浏览器Dojo 是一个持续演变的框架。默认情况下,发布的 dojo 版本会支持最新浏览器的最近两个版本。Dojo 要跨浏览器实现标准功能,其所需的 polyfill 都是通过 @dojo/framework/shim 按需提供的。要支持 IE11,需要打开 --legacy 标记。Dojo 配置可在 .dojorc 中添加其它配置选项。这些选项通常通过命令行扩展可用的设置,并支持更高级的功能,如国际化、代码拆分、PWA 清单和忽略代码等。.dojorc 文件中包含一个 JSON 对象,可以为能在 dojo 命令行工具上运行的任何命令配置信息。在配置对象中为每个命令分配一个节点,可在其中存储配置信息。{

"build-app": {

"pwa": {

"manifest": {

"name": "My Application",

"description": "My amazing application"

}

}

},

"test-intern": {},

"create-widget": {

"tests": "tests/unit"

}

}

本示例中,@dojo/cli-build-app、@dojo/cli-test-intern 和 @dojo/cli-create-widget 三个 CLI 命令模块各对应一个节点。配置 总是 分层的,按照 command => feature => configuration 的顺序排列。© 2022 Open JS FoundationdocsOverviewCreating WidgetsMiddlewareBuildingI18nStylingStoresResourcesRoutingTestingCustom ElementscommunityCode of ConductGitHubDiscordTwitterDiscourseExamplesrepositoriesframeworkwidgetsthemesinteropclicli-create-appcli-build-appcli-build-widgetcli-create-themecli-build-themecli-upgrade-appcli-test-internwebpack-contribsiteversionsv7.0v6.0v5.0languagesEnglishSimplified Chinese (简体

Dojo

Dojo

MenuBlogLearnPlaygroundRoadmapOverviewCreating WidgetsMiddlewareBuildingI18nStylingStoresRoutingTestingIntroduction部件的基本原理渲染部件通过属性配置部件支持交互状态管理最佳开发实践介绍Dojo 鼓励编写简单的、模块化组件,并称之为部件,它仅实现应用程序大量需求中的单一职责。部件被设计成可在各种场景中组合和复用,能以响应的方式连接在一起,以满足更复杂的 web 应用程序需求。部件使用渲染函数返回的虚拟节点描述其预期的结构。然后,在应用程序运行时,Dojo 的渲染系统会持续地将部件每一层渲染的内容转换为对应的、高效的 DOM 更新。

功能

描述

响应式设计

Dojo 部件是围绕响应式的核心原则设计的,这样在应用程序中传播变化的状态时,就可以确保可预见的、一致的行为。

封装部件

创建独立、封装的部件,这些部件可通过各种配置组合在一起,从而创建出复杂且漂亮的用户界面。

DOM 抽象

框架提供了恰当的抽象,这意味着 Dojo 应用程序不需要直接与命令式 DOM 打交道。

高效渲染

Dojo 的渲染系统可以检测出部件层次结构中特定子节点的状态变化,这样当更新发生时,只需要高效的重新渲染应用程序中受影响的部分。

企业级

跨领域的应用程序需求,如国际化、本地化和样式主题,可以轻松地添加到用户创建的部件中。

基本用法定义部件

使用 内置的 create() 将部件定义为一个渲染函数 factory

返回定义了部件结构的 虚拟 DOM 节点,这里使用 TSX 语法

src/widgets/MyWidget.tsx

import { create, tsx } from '@dojo/framework/core/vdom';

const factory = create();

export default factory(function MyWidget() {

return

Hello from a Dojo widget!
;

});

设置部件属性

为了使部件能更好的复用,需要使用类型化的属性接口来抽象出 state, 配置和事件处理函数

使用 create 工厂为部件提供中间件

通过为节点指定 key 属性,来区分同一类型的兄弟元素,此示例中是两个 div 元素。这样当应用程序中的状态发生变化,需要更新 DOM 节点时,框架就可以高效、准确地定位到相关元素

src/widgets/Greeter.tsx

import { create, tsx } from '@dojo/framework/core/vdom';

import icache from '@dojo/framework/core/middleware/icache';

const factory = create({ icache }).properties<{

name: string;

onNameChange?(newName: string): void;

}>();

export default factory(function Greeter({ middleware: { icache }, properties }) {

const { name, onNameChange } = properties();

let newName = icache.get('new-name') || '';

return (

Welcome to a Dojo application!

{name &&

Hello, {name}!
}

id="nameEntry"

type="text"

value={newName}

oninput={(e: Event) => {

icache.set('new-name', (e.target as HTMLInputElement).value);

}}

/>

onclick={() => {

icache.set('new-name', undefined);

onNameChange && onNameChange(newName);

}}

>

Set my name

);

});

组合部件

通过将部件组合在一起形成多层结构,以满足更复杂的应用程序需求

为子部件提供 state 和事件处理函数等属性(properties)

使用 icache 中间件管理 state,并当状态变更时,失效或重新渲染受影响的部件

src/widgets/NameHandler.tsx

import { create, tsx } from '@dojo/framework/core/vdom';

import icache from '@dojo/framework/core/middleware/icache';

import Greeter from './Greeter';

const factory = create({ icache });

export default factory(function NameHandler({ middleware: { icache } }) {

let currentName = icache.get('current-name') || '';

return (

name={currentName}

onNameChange={(newName) => {

icache.set('current-name', newName);

}}

/>

);

});

渲染到 DOM 中

使用框架中的 renderer 函数将部件挂载到 DOM 中

也可以对 Dojo 应用程序在页面中呈现的位置做更多控制,以便稳步地采用较小的子组件,甚至支持一个页面中存在多个应用程序或框架

src/main.tsx

import renderer, { tsx } from '@dojo/framework/core/vdom';

import NameHandler from './widgets/NameHandler';

const r = renderer(() => );

r.mount();

© 2020 Open JS FoundationdocsOverviewCreating WidgetsMiddlewareBuildingI18nStylingStoresRoutingTestingcommunityCode of ConductGitHubDiscordTwitterDiscourseExamplesrepositoriesframeworkwidgetsthemesinteropclicli-create-appcli-build-appcli-build-widgetcli-create-themecli-build-themecli-upgrade-appcli-test-internwebpack-contribsiteversionsLatestv5.0languagesEnglishSimplified Chinese (简体中文)

dojo: Dojo是一个强大的面向对象JavaScript框架。主要由三大模块组成:Core、Dijit、DojoX。Core提供Ajax,events,packaging,CSS-based querying,animations,JSON等相关操作API。

dojo: Dojo是一个强大的面向对象JavaScript框架。主要由三大模块组成:Core、Dijit、DojoX。Core提供Ajax,events,packaging,CSS-based querying,animations,JSON等相关操作API。

登录

注册

开源

企业版

高校版

搜索

帮助中心

使用条款

关于我们

开源

企业版

高校版

私有云

Gitee AI

NEW

我知道了

查看详情

登录

注册

代码拉取完成,页面将自动刷新

开源项目

>

WEB应用开发

>

JavaScript工具包

&&

捐赠

捐赠前请先登录

取消

前往登录

扫描微信二维码支付

取消

支付完成

支付提示

将跳转至支付宝完成支付

确定

取消

Watch

不关注

关注所有动态

仅关注版本发行动态

关注但不提醒动态

6

Star

9

Fork

0

Gitee 极速下载 / dojo

代码

Wiki

统计

流水线

服务

Gitee Pages

质量分析

Jenkins for Gitee

腾讯云托管

腾讯云 Serverless

悬镜安全

阿里云 SAE

Codeblitz

我知道了,不再自动展开

加入 Gitee

与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)

免费加入

已有帐号?

立即登录

返回

此仓库是为了提升国内下载速度的镜像仓库,每日同步一次。

原始仓库:

https://github.com/dojo/dojo

master

管理

管理

分支 (28)

标签 (262)

master

1.17

1.11

1.12

1.13

1.14

1.15

1.16

dependabot/npm_and_yarn/follow-redirects-1.14.8

dependabot/npm_and_yarn/follow-redirects-1.14.7

1.7

1.8

1.9

1.10

dependabot/npm_and_yarn/http-proxy-1.18.1

json5-parser

GHSA-jxfh-8wgv-vfr2-1.12

114-release-semicolon-1

114-release-semicolon

1.6

1.17.3

1.17.2

1.17.1

1.17.0

1.11.13

1.12.11

1.13.10

1.14.9

1.15.6

1.16.5

1.11.12

1.12.10

1.13.9

1.14.8

1.15.5

1.16.4

1.11.11

1.12.9

1.13.8

1.14.7

克隆/下载

克隆/下载

HTTPS

SSH

SVN

SVN+SSH

下载ZIP

登录提示

该操作需登录 Gitee 帐号,请先登录后再操作。

立即登录

没有帐号,去注册

提示

下载代码请复制以下命令到终端执行

为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置

git config --global user.name userName

git config --global user.email userEmail

初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置

1

生成 RSA 密钥

2

获取 RSA 公钥内容,并配置到 SSH公钥 中

在 Gitee 上使用 SVN,请访问 使用指南

使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作

Username for 'https://gitee.com': userName

Password for 'https://userName@gitee.com':

#

私人令牌

新建文件

新建子模块

上传文件

分支 28

标签 262

贡献代码

同步代码

创建 Pull Request

了解更多

对比差异

通过 Pull Request 同步

同步更新到分支

通过 Pull Request 同步

将会在向当前分支创建一个 Pull Request,合入后将完成同步

Ondrej Medek

Assign nom to async functions in declare.s...

185a4fb

3967 次提交

提交

取消

提示:

由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件

_base

保存

取消

_firebug

保存

取消

cldr

保存

取消

data

保存

取消

date

保存

取消

dnd

保存

取消

errors

保存

取消

fx

保存

取消

io

保存

取消

json5

保存

取消

nls

保存

取消

on

保存

取消

promise

保存

取消

request

保存

取消

resources

保存

取消

router

保存

取消

rpc

保存

取消

selector

保存

取消

store

保存

取消

tests

保存

取消

testsDOH

保存

取消

.gitattributes

保存

取消

.gitignore

保存

取消

AdapterRegistry.js

保存

取消

CONTRIBUTING.md

保存

取消

Deferred.js

保存

取消

DeferredList.js

保存

取消

Evented.js

保存

取消

LICENSE

保存

取消

NodeList-data.js

保存

取消

NodeList-dom.js

保存

取消

NodeList-fx.js

保存

取消

NodeList-html.js

保存

取消

NodeList-manipulate.js

保存

取消

NodeList-traverse.js

保存

取消

NodeList.js

保存

取消

OpenAjax.js

保存

取消

README.md

保存

取消

Stateful.js

保存

取消

aspect.js

保存

取消

back.js

保存

取消

behavior.js

保存

取消

bower.json

保存

取消

cache.js

保存

取消

colors.js

保存

取消

cookie.js

保存

取消

currency.js

保存

取消

date.js

保存

取消

debounce.js

保存

取消

dojo.js

保存

取消

dojo.profile.js

保存

取消

dom-attr.js

保存

取消

dom-class.js

保存

取消

dom-construct.js

保存

取消

dom-form.js

保存

取消

dom-geometry.js

保存

取消

dom-prop.js

保存

取消

dom-style.js

保存

取消

dom.js

保存

取消

domReady.js

保存

取消

fx.js

保存

取消

gears.js

保存

取消

global.js

保存

取消

has.js

保存

取消

hash.js

保存

取消

hccss.js

保存

取消

html.js

保存

取消

i18n.js

保存

取消

io-query.js

保存

取消

json.js

保存

取消

json5.js

保存

取消

keys.js

保存

取消

loadInit.js

保存

取消

main.js

保存

取消

mouse.js

保存

取消

node.js

保存

取消

number.js

保存

取消

on.js

保存

取消

package-lock.json

保存

取消

package.json

保存

取消

parser.js

保存

取消

query.js

保存

取消

ready.js

保存

取消

regexp.js

保存

取消

request.js

保存

取消

require.js

保存

取消

robot.js

保存

取消

robotx.js

保存

取消

router.js

保存

取消

sniff.js

保存

取消

string.js

保存

取消

tests.js

保存

取消

text.js

保存

取消

throttle.js

保存

取消

topic.js

保存

取消

touch.js

保存

取消

uacss.js

保存

取消

when.js

保存

取消

window.js

保存

取消

Loading...

README

dojo

This is the foundation package for the Dojo 1 Toolkit. While still being maintained, new development is primarily focused on modern Dojo.

Checkout the Dojo framework website or if you want a more detailed technical status and overview, checkout the Dojo roadmap.

This package is sometimes

referred to as the “core”, it contains the most generally applicable sub-packages

and modules. The dojo package covers a wide range of functionality like Ajax, DOM

manipulation, class-type programming, events, promises, data stores,

drag-and-drop and internationalization libraries.

Installing

Installation instructions are available at

dojotoolkit.org/download.

Getting Started

If you are starting out with Dojo, the following resources are available to you:

Tutorials

Reference Guide

API Documentation

Community Forum

What to Use Dojo For and When to Use It

The following is a brief sampling of some of the areas where Dojo may prove to

be the right tool for your next project:

For keeping your code fast and maintainable, Dojo offers an asynchronous

module definition (AMD) loader -- encapsulating pieces of code into useful

units, loading small JavaScript files only when they are needed, and loading

files separately even when they are dependent on one another.

When you want to easily extend existing classes, share functionality among a

number of classes, and maximize code reuse, Dojo provides class-like

inheritance and “mixins.”

For creating advanced and customizable user interfaces out of refined,

efficient, and modular pieces, Dojo’s Dijit framework offers several dozen

enterprise-ready widgets -- including buttons, textboxes, form widgets with

built-in validation, layout elements, and much more -- along with themes to

lend them a consistent look. All of this is available for mobile

environments as well.

For working with advanced vector graphics, Dojo’s GFX API can render

graphics in a wide variety of formats, with support for seamless

manipulation (skewing, rotating, resizing), gradients, responding to mouse

events, and more.

The dojox/charting library supports powerful data visualization and

dynamic charting, including a variety of 2D plots and animated charting

elements.

When you need feature-rich, lightweight, and mobile-friendly grids/tables,

Dojo offers the dgrid widget, along with customizable default themes and

accompanying features such as in-cell editing, row/cell selection, column

resizing/reordering, keyboard handling, pagination, and more.

Dojo is the officially supported framework for the ArcGIS API for

JavaScript, one of the most widely used enterprise-grade APIs for web

mapping and spatial analysis -- learning to use Dojo will open doors to

creating richer web mapping applications using that API.

License and Copyright

The Dojo Toolkit (including this package) is dual licensed under BSD 3-Clause

and AFL. For more information on the license please see the License

Information. The Dojo Toolkit is Copyright

(c) 2005-2018, JS Foundation. All rights reserved.

空文件

Starred

9

Star

9

Fork

0

捐赠

0 人次

举报

举报成功

我们将于2个工作日内通过站内信反馈结果给你!

请认真填写举报原因,尽可能描述详细。

举报类型

请选择举报类型

举报原因

取消

发送

误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消

提交

简介

Dojo是一个强大的面向对象JavaScript框架。主要由三大模块组成:Core、Dijit、DojoX。Core提供Ajax,events,packaging,CSS-based querying,animations,JSON等相关操作API。

展开

收起

暂无标签

JavaScript

等 4 种语言

JavaScript

94.4%

HTML

5.0%

PHP

0.5%

CSS

0.1%

保存更改

取消

发行版

暂无发行版

开源评估指数源自 OSS-Compass 评估体系,评估体系围绕以下三个维度对项目展开评估:

1. 开源生态

生产力:来评估开源项目输出软件制品和开源价值的能力。

创新力:用于评估开源软件及其生态系统的多样化程度。

稳健性:用于评估开源项目面对多变的发展环境,抵御内外干扰并自我恢复的能力。

2. 协作、人、软件

协作:代表了开源开发行为中协作的程度和深度。

人:观察开源项目核心人员在开源项目中的影响力,并通过第三方视角考察用户和开发者对开源项目的评价。

软件:从开源项目对外输出的制品评估其价值最终落脚点。也是开源评估最“古老”的主流方向之一“开源软件” 的具体表现。

3. 评估模型

基于“开源生态”与“协作、人、软件”的维度,找到与该目标直接或间接相关的可量化指标,对开源项目健康与生态进行量化评估,最终形成开源评估指数。

贡献者

全部

近期动态

加载更多

不能加载更多了

编辑仓库简介

简介内容

Dojo是一个强大的面向对象JavaScript框架。主要由三大模块组成:Core、Dijit、DojoX。Core提供Ajax,events,packaging,CSS-based querying,animations,JSON等相关操作API。

主页

取消

保存更改

JavaScript

1

https://gitee.com/mirrors/dojo.git

git@gitee.com:mirrors/dojo.git

mirrors

dojo

dojo

master

深圳市奥思网络科技有限公司版权所有

Git 大全

Git 命令学习

CopyCat 代码克隆检测

APP与插件下载

Gitee Reward

Gitee 封面人物

GVP 项目

Gitee 博客

Gitee 公益计划

Gitee 持续集成

OpenAPI

帮助文档

在线自助服务

更新日志

关于我们

加入我们

使用条款

意见建议

合作伙伴

售前咨询客服

技术交流QQ群

微信服务号

client#oschina.cn

企业版在线使用:400-606-0201

专业版私有部署:

13670252304

13352947997

开放原子开源基金会

合作代码托管平台

违法和不良信息举报中心

粤ICP备12009483号

简 体

/

繁 體

/

English

点此查找更多帮助

搜索帮助

Git 命令在线学习

如何在 Gitee 导入 GitHub 仓库

Git 仓库基础操作

企业版和社区版功能对比

SSH 公钥设置

如何处理代码冲突

仓库体积过大,如何减小?

如何找回被删除的仓库数据

Gitee 产品配额说明

GitHub仓库快速导入Gitee及同步更新

什么是 Release(发行版)

将 PHP 项目自动发布到 packagist.org

评论

仓库举报

回到顶部

登录提示

该操作需登录 Gitee 帐号,请先登录后再操作。

立即登录

没有帐号,去注册