3.4.0 YUI和装载机变化

2011年7月1日起,在6:34上午DAV玻璃| 发展性能 | 10评论

在3.4.0中,我们开始转向装载机的逻辑左右,不仅使其更高性能的过程,但更强大和更容易使用,在其他地方(如在服务器上)。 我们将推出更多的变化在今后的修订,但我想需要一些时间,并解释了什么变化,为什么它被改变,它可能会如何影响开发。 对于大多数用例,开发人员会发现什么不同,但事情快一点,他们的要求下载是有点小。

种子文件

我要解决的第一件事是YUI种子文件。 在以前版本的锐,我们的种子文件是非常微小的,并没有包含Loader或任何其元数据。 我们发现这是高性能,并非如我们所希望,在90%的使用情况。 普通用户包括种子文件,然后请他们的模块,这反过来又意味着,种子需要先取装载机,然后计算其所有依赖项,然后取他们所有。 现在,我们觉得,这个额外的HTTP请求是错误的事情,所以新标准的种子文件包含装载机和元数据。 是的,这将使稍大的初始请求,但它会使加载的模块,更快,因为其元数据的要求,现在已经在页面上。

如果你想使用它的老办法,你可以只是包括YUI基地种子文件,而不是。 它包含了所需的一切,使锐在单机模式下运行,再加上它包含的能力,以获取需求的装载机。 如果您需要更精细的细粒度的依赖,我们已经创建了一个YUI的核心正是YUI老基地种子的种子文件。

     /构建/ YUI /的锐min.js / / YUI的种子+装载机/构建/ YUI基/ YUI基min.js的/ / YUI的旧装载机种子获取支持/ build/yui-core/yui-core- min.js / /旧YUI基地没有装载机获取支持 

应当指出的是,这些网址是比以前的URL不同。 任何使用yui/yui-base.js文件需要repoint到yui-core/yui-core.js 如果你想加载的种子和提取装载机的旧方式,你会使用的yui-base/yui-base.js种子文件。

这种变化的理由是我们YUI的运行在尽可能多的地方的路线图。 旧的种子文件,加上装载机是在一个单一的组合服务器的请求都很好,如果你有一个组合在您的应用程序的服务器, 但在服务器上呢? 或在移动设备上的脱机应用程序?这些地方需要,以尽量减少文件的访问,同时还得到他们所需要的信息。

汇总

接下来的事情,我们改变了从系统中删除汇总和拖欠allowRollup在装载机配置为false。 这是什么意思你?好了,希望什么都没有。 之前,我解释变化的影响,让我解释一下它背后的推理。 再次,首要原因是,性能,随着有效载荷交付。 以这个例子:

     模块A:需要事件,事件-B
     模块B:需要事件C,事件-D

当您要求,汇总逻辑到3.4.0之前用来确定你应该得到的事件汇总。 这实际上意味着,你得到:

      event.a,event.b,event.c,event.d,event.e,event.f,event.g,event.h

你结束了与您的网页上比你更实际需要。 通过关闭汇总支持,YUI将现在要求只有你真正要求,仅此而已。 在大多数情况下, 你不会注意到这一点 模块开发,可能会遇到的情况,在过去工作的事情,可能现在还没有工作。 这样做的原因是,他们实际上是由事故工作过。 让我用一个真实的例子: 拨号

3.3.0,拨号需要这个:

    要求:[
         “部件”,
         'DD-阻力,
         “替代”
         “事件的MouseEnter, 
         “过渡”,
         “国际机场”
     ]

在大多数情况下,在3.4.0拨号工作,但是键盘的支持没有奏效。 做一些简单的调查后,事实证明,汇总的支持实际上是要求整个事件汇总(包括移动事件和事件的关键)。 3.4.0拨号没有在所有的事件汇总拉动逻辑,不再有其所有要求。 使拨号的要求更加具体和正确定义所有的实际依赖,使得它如预期般运作。

    要求:[
         “部件”,
         'DD-阻力,
         “替代”
         “事件的MouseEnter,
         “事件的举动”,
         “事件的关键,
         “过渡”,
         “国际机场”
     ]

对于模块的开发,这是最好的做法是确保,正是它需要的功能模块需要。 不要以为上游模块的要求是有。 它总是更好,以确保你问你需要什么。

这也意味着,模块的要求更明确界定。 例如, datatype-date有国际机场建立在以前的版本中,您将访问这样的国际机场英寸支持:

     Y.Intl.getAvailableLangs(“数据类型的日期”);

但因为这个模块实际上并没有一种语言( datatype-date-format模块一样),这将失败。 它需要更具体和实际要求语言正确的模块:

     Y.Intl.getAvailableLangs(“数据类型的日期格式”);

构建文件的爆炸和子模块去除

进行此更改后,未来的变化,我们提出了爆炸生成目录,并从核心系统子模块。 子模块的逻辑是不能完全取消,只有我们的元数据结构被改变。 这将提供当前安装的向后兼容性。

在核心系统的子模块,我们需要解决的问题,引起了情侣。 第一个原因是性能。 每次加载所需的计算依赖关系,它需要走的每个模块的子模块/插件结构。 这数千次受伤了,我们在装载机的性能计算程序。 通过消除为核心系统的子模块的支持,我们挽救了数以万计的函数调用和迭代。

装载机被改变,所以,如果一个use在一个模块的元数据属性定义多个模块,它会使用这些模块,而不是试图加载原始的模块。 所以,如果你要求“ dd “装载机将检查dd DD “的元数据,并看到一个使用属性,看起来像这样:

     “DD-DD-DDM的基础上,DDM,DD-DDM下降,DD-阻力,DD-代理,DD-约束,DD-下降,滚动DD-DD-下拉插件”

在核心YUI种子文件,我们也包括我们调用虚拟汇总别名 正是这些模块的定义是相同的元数据在装载机。 这种方式可以包括从我们的依赖配置出口的所有文件,仍然可以使用,而无需在页面上的装载机目前这些汇总。 在未来的版本中,我们将完善这种方法更。

进行此更改后,我们再preceeded爆炸我们的构建文件。 在以前的版本中,确定的子模块的模块文件的路径。 例如:

     “DD”:{
         “子模块”:{
             “DD-拖”: 
             / /模块数据
         }
     }

在3.3.0当您建立“DD”,文件的结构看起来像这样:

     /构建/月/ DD-drag.js的
     /构建/月/ DD-ddm.js的
     /构建/月/ DD-drop.js的

3.4.0爆炸生成系统,“DD”的构建文件现在看起来像这样:

     /构建/ DD-拖/ DD-drag.js的的
     /构建/ DD-DDM / DD-ddm.js的的
     /构建/ DD-滴/ DD-drop.js的的

这使我们从我们的模块元数据全部删除“路径”属性,保存文件的大小,并减少所需的组装模块的URL路径的逻辑。

如果包括一个预配置的组合URL,则必须重新计算您的网址,当您升级。

这种变化的缺点是,如果你是其中的“准备”您的网页模块组合URL,你可以不只是改变了版本号和升级。 您将需要重新配置依赖 ,并产生一个新的模块结构的新的URL。

未来

我将继续完善,重构,并最大限度地提高我们的装载机和种子战略的各个方面。 这些步骤需要帮助需要的不仅是我们的客户端的策略,而且我们的服务器,命令行和移动设备的策略,以及未来变化。

共享和扩展: 书签del.icio.us Digg它! | reddit!

10评论»

评论对这个职位的RSS 引用地址

  1. 我不太这样一段话:

    “装载机被改变,所以,如果在使用一个模块的元数据属性定义多个模块,它会使用这些模块,而不是试图加载原始的模块。 所以,如果你要求“DD”装载机将检查“DD”的元数据,并看到一个使用属性,看起来像这样:

    “DD-DD-DDM的基础上,DDM,DD-DDM下降,DD-阻力,DD-代理,DD-约束,DD-下降,滚动DD-DD-下拉插件”

    相反你能解释这个有说服力的,在当前版本中发生的事情吗?

    THX
    /保罗

    评论由保罗NESTI - 2011年7月4日,

  2. @保罗

    在之前的版本3.4.0 PR2的,我们创建了静态的汇总文件。 因此,在DD的情况下,有一个名为:

    /构建/日/ dd.js

    和包含所有相关模块的DD。

    评论由DAV玻璃 - 7月4日,2011年

  3. 我很高兴你们都这样做。 我总是避免像瘟疫辊UPS。 然而,因为一些基类现在似乎被删除,如节点基地成为核心节点,这将是一件好事,这种方式已过时的所有类的列表。

    马克 - 7月5日,2011年

  4. @马克

    3.4.0被释放时,应该有大量的文件,改变周围的模块。

    评论由DAV玻璃 - 7月5日,2011年

  5. 这个评论是不是这个职位具体而言,但我仍然觉得YUI的理念,对我的信念,在良好的设计,“简单的事情,应该是简单的,复杂的事情应该是可能的”。

    因为我发现自己又再次通读与YUI3个月后,如节点和事件的最根本的模块文件。

    新的应用程序/ MVC模块似乎适合我的应用程序在第一,然后我开始写很多自定义的逻辑来解决由于巨大的内存开销的默认行为。 当我扔掉模块查看完全,我结束了一个更短,结构紧凑的逻辑,只有更快!

    另一种情况是上下文菜单,这在YUI3我没有找到。 一些YUI的专家建议,建立一个新的类的基础上叠加,然后添加各种自定义属性和渲染方法...我只需要一个上下文菜单,我终于得到它做原料的JS + CSS的不到10线。

    我从来没有怀疑YUI3可以支持复杂的情况,但非常简单的情况下,像一个Hello World应用程序? 与C,你只要调用printf(“世界您好!”)在main()。 对于Java,你需要先定义一个HelloWorld类,然后一个public static void方法称为(),最后,请致电(“世界你好!”)... OMG,任何人都意识到它需要多少必备的知识像这样简单的东西写吗? 这是我觉得锐究竟如何!

    任何,我不认为YUI3永远不会变得更简单,但我还是希望你们能使其尽可能简单。

    韦恩- 7月16日,2011年

  6. 韦恩:你不需要锐写一个Hello World应用程序。 这听起来像你也并不需要YUI的你试图建立使用模型和视图组件来构建应用程序。

    没关系!

    YUI的不会是每个任务的理想工具。 如果你能写10行JavaScript,完成你需要做的,然后通过各种手段,这样做,而不是使用一个部件,它远远比你更需要的。

    这并不意味着该部件是无用的,或不必要的复杂。 这意味着它是没有合适的工具,你想要做的工作。

    我们绝对要简单实用,使锐,但有一个简单性和实用性之间取得平衡。 最简单的代码是没有代码,但如果我们去那么远,我们也不会提供任何价值。 因此,我们的目标是平衡:我们试图使复杂的事情变得更简单,但没有简单化他们的地步,我们的抽象是没有用的。

    我同意你的理念,简单的事情,应该是简单和复杂的事情应该是可能的。 而且我相信这正是锐确实不使简单的事情没有那么简单,它可能使复杂的事情。 YUI的模块化架构的优点是,如果你发现简单推出自己的代码,而不是使用一个特定的widget,你不会被迫加载该widget代码。 和Loader在3.4.0的变化使这个更简单。

    评论由瑞安格罗夫 - 2011年7月20日,

  7. [...]装载机有重大更新为3.4.0。 如果你正在做通过手动负载规格使用(“*”)或利用子模块的配置,我们会非常感激你想用你的代码,新的加载程序,以确保我们正确处理所有的用例。 如需对本新闻稿中的装载机变化的详细信息,请参阅博客文章描述3.4.0装载机变化。 [...]

    pingback的YUI的3.4.0预览版现已在CDN»雅虎用户界面博客(YUIBlog)的 - 2011年7月28日,

  8. @瑞安,

    刚才看到您的评论。 我是维护一个老锐3.1编写1000行代码的项目,我只是想添加一个上下文菜单。 但我没有找到任何可行的方法来获取模块/做快速和容易。 预见这个小小的功能可能需要数百面向YUI的代码行,我用,而不是原始的JS。

    顺便说一句:有一些小问题,当切换到3.2,但整个系统停止工作时切换到3.3。 所以我不认为有必要尝试为这个项目3.4。

    韦恩- 2011年8月18日,

  9. [...]在计算装载机的依赖所执行的迭代数。 你可以参考3.4.0的有关装载机变化的博客后,[...]

    pingback的公布3.4.0锐和新YUILibrary.com»雅虎用户界面博客(YUIBlog)的 - 2011年8月18日,

  10. 所有这些装载机的变化似乎非常有前途和去除子模块计算是伟大的。 这是可能的原因,我们看到的功能吨调用IE中做依赖计算时,IE浏览器会八九不离十呛了几秒钟。

    与装载机的变化和元数据 - 是YUI服务器端的装载机影响。 是,正在更新中考虑到这一变化的起飞。 原因那我们结束了使用。

    阿里ð - 2011年8月19日,

发表评论

注:评论定时器主持。 垃圾邮件删除。

的XHTML:<a“<abbr title=""> <acronym title=""> <B> <blockquote◎欢迎参与讨论的<code> <del时间不用重新输入个人cite="">!

主办雅虎

©2006-2012雅虎公司所有权利保留。 隐私政策 - 服务条款

支持WordPress的关于雅虎 虚拟主机