在Quorus loader用法

2011年3月24日,在9:49上午由彼得Abrahamsen | 发展YUI实现 2评论

今天,我想谈谈锐装载机和我们如何在Quorus公司 ,用它来 ​​提供第三方网站的新功能需求。

quorus截图

写上其他民族的页面的代码,我们的权力特征,这意味着我们是吃力不讨好的位置在我们如何使用文件本身不仅没有控制在浏览器环境,但沉重的限制。 我们的客户在其网页上Quorus引导脚本;我们的功能所需的一切动态加载和需求。 我们去英雄的长度,以确保我们的元素,样式和脚本不会改变什么我们是不负责的行为。

两年前,我们开始了我们目前的代码库,当锐3只是初具雏形。 这是一个冒险的决定时,承诺不会打几个月的beta代码库。 现在回想起来,我不能想象我们如何将我们没有它已经完成了。 我没有看到任何其他的框架具有组件装载机,功率接近, 属性自定义事件

我们提供给客户的Quorus 引导脚本几乎没有。 它的工作是我们的核心平台,只是没有阻止页面加载的其余部分加载和队列,直到我们已经这样做的任何API调用。 这个核心的脚本文件,称为stage2文件 ,内嵌yuiloaderoop ,以及足够的智慧来加载额外的库API调用,用户点击,其他条件和经营环境。 大多数其他资源提供一个自定义的组合服务器提供定制Quorus和股票锐模块。

Bootstrap队列中最多的API调用在主机站点的,当它加载,当我们准备在一个数组中去,我们的全局对象,QUORUS之间的代码:

 QUORUS._callbacks = []; QUORUS.use = function () { // turn the arguments object into a regular array, // so that it can be stored safely var args = Array.prototype.slice.call(arguments, 0); QUORUS._callbacks.push(args); }; 

一旦我们准备好处理API调用, stage2运行,他们一个个在超时。 这将确保我们定期回浏览器,这使得用户体验响应产量控制。 该行为是很多,但像Y.AsyncQueue简单,并不需要YUI的加载:

 // Put the real 'use' function in place for any subsequent calls: QUORUS.use = function (feature, callback) { YUI.use('module-that-provides-the-feature', function (Y) { // find the API for the requested feature, and pass it to the callback callback(Y.APIs[feature]); // process another pending API call, if any: setTimeout(processAPICall, 0); }); }; // Play catch-up, running each callback in sequence: function processAPICall () { var callback = QUORUS._callbacks.shift(); if (callback) { QUORUS.use.apply(QUORUS, callback); } } // Start processing the queue: processAPICall(); 

bootstrap文件,通过这一点,主要是不可改变的,这是值得我们手给客户,他们可能需要一个月或更长时间部署任何新的版本中,我们给了他们敏捷的初创公司不可能长时间。 同时, stage2文件,是小的,从我们自己的服务器的负载,并有一个很短的缓存一生。 这将确保没有终端用户将有超过几分钟的旧版本。 几乎所有我们所需要的其他资源是永久缓存的JavaScript库和CSS文件。

当我们释放了我们的代码的新版本, stage2自动指示浏览器开始下载一个新的位置,确保他们只使用最新的代码。 这种设置使我们能够快速部署服务资产超过必要更经常的变化。 这不仅使我们的带宽成本低,但它提供了一个更好的用户体验:缓存的资源加载速度非常快,页面加载时。

quorus的JS加载流程图

如果我们开始我们今天的codebase的利益, YUI库 ,有若干组成部分,我们可能会使用,使我们的生活更轻松。 其中之一是埃里克Ferraiuolo 相应的组件管理器 ,其中有高达组件需求(通常部件)接线协助。 另一种可能是存储精简版 ,以帮助我们保持整个页面加载应用程序的状态。

YUI团队为他们的伟大的工作,和社会的贡献非常感谢。 如果你想阅读有关我们的沙箱或协调异步加载的组件的方法,请让我知道在评论!

彼得Abrahamsen 作者简介:彼得·Abrahamsen写Ruby和JavaScript,管理服务器基础设施,并研究在美国华盛顿州西雅图,以用户为中心设计的。 他可以发现在IRC上为Rainhead。

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

2评论

  1. 您好彼得,
    我其实很好奇的关于您QUORUS.use调用。 你似乎要交换与YUI使用调用加载一个特定的模块。
    我没有看到如何关联到具体的API调用。 如何通过“功能”为YUI使用的模块的QUORUS.use领带,除非它是一个全球性的模块(但不适合与图形显示菜单栏和部件)?

    此外,你做了任何测试使用排队的setTimeout方法,你已经比刚才所有的模块放置在一个使用语句?
    它看来,喜欢的setTimeout会更好地释放控制浏览器的理论,但1页普遍较高的TTI(因为它是调用一个新的用每10-15ms的和做1的依赖关系树计算每个模块的不同设置) ,但我只是好奇,如果你们有测试与其他?

    否则,感谢伟大的文章。 我喜欢看到类似这样的表现的例子,人们是如何使用其特定的应用程序:)装载机

    Nate 卡瓦诺 - 4月16日,2011年

  2. 彼得,
    我想从网页框架扩展HTML元素的提取。 它看起来像我可以用这种方法完成​​的。

    如果你可以将我行,将是巨大的 - 所以我们有离线的对话。

    谢谢,
    GS

    由GS - 12月29日,2011年

很抱歉,评论已被封闭,在这个时候。

主办雅虎

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

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