精华内容
下载资源
问答
  • Deferred

    2019-09-27 19:09:19
    上文中提到了Promise构造函数,就不得不提Deferred(延迟)对象了,其实,让Deferred对象得到推广的便是其在jQuery中的使用,本文就jQuery中对Deferred对象的使用进行探讨。 1、Deferred的概念 延迟对象,在jQuery...

    上文中提到了Promise构造函数,就不得不提Deferred(延迟)对象了,其实,让Deferred对象得到推广的便是其在jQuery中的使用,本文就jQuery中对Deferred对象的使用进行探讨。

    1、Deferred的概念

    延迟对象,在jQuery的1.5引入,是通过调用jQuery.Deferred()方法创建一个可链式调用的工具对象。 它可以注册多个回调到回调队列, 调用回调队列,准备代替任何同步或异步函数的成功或失败状态。

    延迟对象是可链式调用的,类似于jQuery对象是可链接的方式,  但它有其自己的方法。 创建一个Deferred(延迟)对象后,你可以通过方法 直接从对象创建或者链式调用 或 保存对象的一个变量,调用该变量的一个或多个方法。

     jQuery.Deferred()基于Promises/A规范实现,因为jQuery本身的设计风格,jQuery.Deferred()并没有完全遵循Promises/A规范。
    jQuery在1.5版本中首次引入了Deferred。你可以通过jQuery.Deferred() 在未来某个时候 得到 ‘延时’返回值。 在此之前是无法单独使用的,Deferred作为对ajax模块较大重写的一部分添加进来。1.5和1.6版本包含Deferred功能,可以使$.ajax() 接收调用完成及请求出错的回调,但却存在严重的耦合。新版本的jQuery提供了一些增强的方式来管理回调,提供更加灵活的方式建立回调,而不用关心原始的回调是否已经触发。 jQuery的Deferred对象支持多个回调绑定多个任务,任务本身既可以是同步也可以是异步的。
    Deferred对象有三种状态,pending:未完成,resolved:已完成,rejected:未完成。(注:和Promise对象中的状态一模一样呢!)
     
    2、初试牛刀

     先看看$.Deferred是 什么?

    可以看出Deferred只是一个定义在jQuery上的普通方法,没有太多的信息,那我们调用一下试试。

    我们又可以看出,其实Deferred函数其实返回的是一个对象,这个对象也有always、catch、done、fail、notity、notifyWith、pipe、promise、progress、reject、rejectWith、resolve、resolveWith、state、then方法。

    Deferred有三个状态,pending:未完成,resolved:操作成功,rejected: 操作失败

    当deferred1对象调用resolved时,deferred1中的done方法会被调用,当deferred1对象调用rejected时,deferred1的fail方法会被调用,比如

    var deferred1 = $.Deferred();
    deferred1.done(function (data) {
        console.log('success: ',  data)
    })
    deferred1.fail(function (err) {
        console.log('err: ', err)
    })
    setTimeout(function(){
      deferred1.resolve('victory')
    },200)

    //输出success: victory

    3、Promise对象的方法

    我们接着聊notify和progress。

    progress()用来指定一个回调函数,当调用notify()方法时,该回调函数将执行。它的用意是提供一个接口,使得在非同步操作执行过程中,可以执行某些操作,比如定期返回进度条的进度。

    var userProgress = $.Deferred();
    var $profileFields = $("input");
    var totalFields = $profileFields.length;
    userProgress.progress(function (filledFields) {
        var pctComplete = (filledFields/totalFields)*100;
        $("#progress").html(pctComplete.toFixed(0));
    }); 
    userProgress.done(function () {
        $("#thanks").html("Thanks for completing your profile!").show();
    });
    $("input").on("change", function () {
        var filledFields = $profileFields.filter("[value!='']").length;
        userProgress.notify(filledFields);
        if (filledFields == totalFields) {
            userProgress.resolve();
        }
    });

     

    现在接着聊then方法,then方法接收三个回调函数,第一个参数是resolve时调用的回调函数,第二个参数是reject时调用的回调函数,第三个参数是progress()方法调用的回调函数。

     

    和谈Promise一样,现在我们也Deferred来封装一个getJSON函数,实现AJAX的例子

    var getJSON = function(url) {
        var deferred = $.Deferred();
       var client = new XMLHttpRequest(); client.open('GET', url); client.onreadystatechange = function(){ if (this.readyState !== 4) { return } if (this.status === 200) { deferred.resolve(this.response) } else { deferred.reject(new Error(this.statusText)) } } return deferred } getJSON('/db.json').then(function(json){ console.log('Result:', json) }, function(error){ console.log('error:', error) })

     

    4、Deferred中的promise对象

    大多数情况下,我们不想让用户从外部更改deferred对象的状态。这时,你可以在deferred对象的基础上,返回一个针对它的promise对象。我们可以把后者理解成,promise是deferred的只读版,或者更通俗地理解成promise是一个对将要完成的任务的承诺。

    你可以通过promise对象,为原始的deferred对象添加回调函数,查询它的状态,但是无法改变它的状态,也就是说promise对象不允许你调用resolve和reject方法。

    function getPromise(){
        return $.Deferred().promise();
    }
    try{
        getPromise().resolve("a");
    } catch(err) {
        console.log(err);
    }
    //会进入catch方法,显示TypeError {}

    jQuery的ajax() 方法返回的就是一个promise对象。

     

    
    

    转载于:https://www.cnblogs.com/wbxjiayou/p/7205056.html

    展开全文
  • deferred

    2018-10-24 18:01:57
  • deferred对象

    2015-04-01 18:37:35
    deferred

    deferred

    deferred对象是什么

    deferred对象就是jQuery的回调函数解决方案

    开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。
    其中,既有异步的操作,
    也有同步的操作,它们都不是立即能得
    到结果的。通常的做法是,为它们指定回调函数(callback)。
    即事先规定,一旦它们运行结束,应该调用哪些函数。

    它解决了如何处理耗时操作的问题,对那些操作提供了更好的控制,以及统一的编程接口。

    主要功能

    ajax操作的链式写法

    jQuery的ajax操作的传统写法见demo1

    新的写法 demo2
    1.5以上版本返回deferred对象,可以进行链式操作,提高可读性

    指定同一操作的多个回调函数

    deferred对象的一大好处,就是它允许你自由添加多个回调函数。
    demo2 中 如果ajax操作成功后,除了原来的回调函数,我还想再运行一个回调函数,怎么办?
    很简单,直接把它加在后面就行了。

    为多个操作指定回调函数

    deferred对象的另一大好处,就是它允许你为多个事件指定一个回调函数,这是传统写法做不到的。
    demo3

    普通操作的回调函数接口

    deferred对象的最大优点,就是它把这一套回调函数接口,
    从ajax操作扩展到了所有操作。也就是说,任何一个操作—-
    不管是ajax操作还是本地操作,也不管是异步操作还是同步操作—-
    都可以使用deferred对象的各种方法,指定回调函数。

    demo4 有问题
    改成 demo5

    deferred.resolve()方法和deferred.reject()方法

    jQuery规定,deferred对象有三种执行状态—-未完成,
    已完成和已失败。如果执行状态是”已完成”(resolved),deferred
    对象立刻调用done()方法指定的回调函数;如果执行状态是”已失败”
    ,调用fail()方法指定的回调函数;如果执行状态是”未完成”,
    则继续等待,或者调用progress()方法指定的回调函数

    resolve()将dtd对象的执行状态从”未完成”改为”已完成”,从而触发done()方法。
    reject()方法将dtd对象的执行状态从”未完成”改为”已失败”,从而触发fail()方法。见demo6

    deferred.promise()方法

    上面这种写法,还是有问题。那就是dtd是一个全局对象,
    所以它的执行状态可以从外部改变。见demo7

    为了避免这种情况,jQuery提供了deferred.promise()方法。
    它的作用是,在原来的deferred对象上返回另一个deferred对象。
    后者只开放与改变执行状态无关的方法(比如done()方法和fail()方法),
    屏蔽与改变执行状态有关的方法(比如resolve()方法和reject()方法)
    demo8

    还可以直接在wait对象上部署deferred接口
    demo9

    总结

    (1) $.Deferred() 生成一个deferred对象。
    (2) deferred.done() 指定操作成功时的回调函数
    (3) deferred.fail() 指定操作失败时的回调函数
    (4) deferred.promise() 没有参数时,返回一个新的deferred对象,该对象的运行状态无法被改变;接受参数时,作用为在参数对象上部署deferred接口。
    (5) deferred.resolve() 手动改变deferred对象的运行状态为"已完成",从而立即触发done()方法。
    (6)deferred.reject() 这个方法与deferred.resolve()正好相反,调用后将deferred对象的运行状态变为"已失败",从而立即触发fail()方法。
    (7) $.when() 为多个操作指定回调函数。
    (8)deferred.then()可以把done()和fail()合在一起写如果then()有两个参数,那么第一个参数是done()方法的回调函数,第二个参数是fail()方法的回调方法。如果then()只有一个参数,那么等同于done()。
    (9)deferred.always()这个方法也是用来指定回调函数的,它的作用是,不管调用的是deferred.resolve()还是deferred.reject(),最后总是执行。
    

    转自阮一峰的博客

    展开全文
  • Deferred support

    2020-12-09 01:53:53
    <p>Deferred allows me to return a deferred object and resolve it later. $.when can detect when people are using sync callbacks and everything still works as expected. <p>This change does require ...
  • 一个Deferred.Promise对象可以理解为是deferred对象的一个视图,它只包含deferred对象的一组方法,包括:done(),then(),fail(),isResolved(), isRejected(), always(),这些方法只能观察一个deferred的状态,而无法...
  • Deferred Core

    2021-01-08 13:47:08
    <div><p>Logically grouped alterations to the prepass lighting subsystem to shift it to a more fully deferred pipeline based upon https://github.com/andr3wmac/Torque3D/tree/deferred_shading, and ...
  • Anti deferred

    2020-12-31 11:13:24
    <div><p>Removes all refs to the deferred object in geostore, mem store, and localstorage stores </p><p>该提问来源于开源项目:Esri/terraformer</p></div>
  • Deferred renderering

    2020-12-05 18:21:24
    <div><p>The deferred rendering pipeline isn't merged with the main development branch yet</p><p>该提问来源于开源项目:rwengine/openrw</p></div>
  • Deferred init

    2020-12-02 04:58:04
    <div><p>This is a PR made with help from to allow for deferred init for widgets when e.g. dynamically loaded into JLab using https://github.com/wolfv/jupyterlab-dynext</p><p>该提问来源于开源项目ÿ...
  • Deferred resolvers

    2020-12-08 19:20:58
    <div><ul><li>This illustrate how to use React\Promise (as deferred resolver) to solve N+1 problem</li></ul> <p>Not sure if this is enough to close issue #287 </p><p>该提问来源于开源项目:...
  • - deferred shading - attribute stage:画所有geometry。把depth, normal, specular color, diffuse color, emissive color都写到G-buffer上 - deferred stage:画光源。把算出来的irradiance累加的output ...
    # brief
    - 所谓tile based deferred shading(渲染算法,非mobile gpu的tbdr架构),就是把deferred shading的shading阶段的二层循环的顺序换一下,不再是一个个光源地draw,而是一个个tile地draw(每个tile有light list)
    - tile based forward shading,就是先把影响每个tile的lightlist搞出来,然后用texture来存。接下来就是正常的forward shading,唯一的不同是shader上去找当前fragment所在的tile的light list,然后循环算光照叠加
    - clustered shading使劲吹,但是需要compute shader,而且自己都承认了有时候light assign的消耗offset了更少的光源计算的消耗

    # 17.1 introduction
    - deferred shading的优势
        - decouple shading&lighting from geometry management, allow efficient submission
        - minimize lighting computation, 文中说这点变得不重要了(我觉得胡扯吧,啥时候不重要了)
    - deferred shading的劣势
        - bandwidth(如果一个pixel被N个光源照到,那这个点的gbuffer要被访问N次,而这点可以被tiled deferred shading优化)
        - memory占用(tiled deferred shading对此无任何作用)
    - tiled deferred shading
        - tile based deferred 在没MSAA和transparency的情况下比tile based forward shading有效率优势
        - 支持transparency
        - 不再有GBuffer的要求
        - 能用MSAA(deferred说是在同等MSAA quality下效率就差很多了),另外在8x情况下deferred还有memory contraint的问题


    # 17.2 Recap: Forward, Deferred, and Tiled Shading
    - deferred的tiled和非tiled区别
        - 在shading阶段,是个2层循环,loop over light和loop over pixel
        - tiled的外层loop是pixel:把屏幕划分成tile,要找出影响每个tile的light。渲染每个tile的时候就是对pixel来loop light
        - 非tiled的外层是light:loop over light,对每个light cover到的区域算光照然后累加到extant radiance buffer上
        - key difference:tiled deferred shading只需要读gbuffer once、framebuffer也只要写1次,common term可以缓存使用(在shader的local变量种),执行更coherent
    - cluster shading
        - 随便一提:说是能更rebust地处理complex的geometry和light configuration
        - 是tiled shading的改进,更复杂


    # 17.3 Tiled Forward Shading: Why?
    - deferred shading的weakness
        - transparency/blend没法直接搞
        - memory和bandwidth,再加上MSAA memory就更不好搞了
        - 多种shader支持
    - tiled forward shading硬件支持要求低

    # 17.4 Basic Tiled Forward Shading
    - walkthrough
        - subdivide screen into tiles
        - optional pre-Z pass
        - optional find minZ,maxZ of each tile
            - 通过loop来reduce出每个tile的min max,用来判断light到底是否影响这个tile
        - assign lights to tile
            - 可以cpu上做,比如1080p 32x32 tile的时候只有2k个tile,而且light的数量一般也少(书上说几k个light还少。。。)
            - 也可以GPU上用compute shader
        - render geometry, compute shading

    # 17.5 Supporting Transparency
    - tile min max做文章

    # 17.6 Support for MSAA
    - 强行用带宽、memory、高MSAA倍数来对比deferred和forward

    # 17.7 Supporting Different Shaders
    - deferred shading只能用material id + dynamic branch来搞了吗?

    # 17.8 Conclusion and Further Improvements
    - 吹clustered shading

    # after thought
    - 如果我们能在纯forward shading里,把primitive也按照tile做排序,会有性能提升嘛?在mobile上
    展开全文
  • Deferred jobs

    2020-12-09 03:44:51
    <p>The simplest way I can see to solve this is when picking up a job, check whether there is already a job in progress or deferred within the category. If so, defer the current job. Each time a job ...
  • jquery ajax deferred

    2014-04-09 16:21:04
    deferred
  • GoldenEye strikes deferred

    2020-12-29 06:46:51
    0 GoldenEye strikes deferred. (258 Failed) 0 GoldenEye strikes deferred. (554 Failed) 0 GoldenEye strikes deferred. (890 Failed) 0 GoldenEye strikes deferred. (1125 Failed) 0 GoldenEye strikes ...
  • Deferred总结

    2016-03-07 18:39:29
    Deferred总结
  • Deferred Shading vs. Deferred Lighting

    千次阅读 2016-10-17 20:55:01
    Deferred Shading VS Deferred Lighting http://www.realtimerendering.com/blog/deferred-lighting-approaches/
  • Deferred Lighting

    2019-09-24 04:24:25
    Deferred lighting separate lighting from rendering and make lighting a completely image-space technique. This is very different from the forward rendering. At first as the limitation of the hardw...
  • jq deferred

    2015-03-22 21:05:45
    deferred promise
  • Implement deferred object

    2020-12-06 11:40:10
    <div><p>Implement jQuery's <a href="http://api.jquery.com/category/deferred-object/">deferred object</a> for callbacks.</p><p>该提问来源于开源项目:alexanderdickson/waitForImages</p></div>
  • Deferred before support

    2020-12-25 17:36:01
    <div><p>Returning a $.Deferred</code> object from the <code>before</code> callback will respect the deferred object's promise when it comes to calling the main route & after callbacks.</p><p>...
  • 比如Deferred Shading以及其之后的Deferred Lighting。Deferred方法相对于传统Forward Rendering最主要区别都是提高了对多光源渲染时的效率,它是是将光源的计算转到屏幕空间来进行,进而不浪费无效的光源着色。
  • var deferred = promiscuous.deferred(); deferred.promise.then(function(result) { console.log(result); }); var nextDeferred = promiscuous.deferred(); deferred.resolve(nextDeferred.promise...
  • jQuery Deferred

    2016-01-21 15:30:00
    Deferred是从1.5版本引入的一个核心特性之一,主要是为了解决Callback Hell,老生常谈的问题,这里就不多赘述了。本文旨在剖析Deferred的内部实现,让大家能够深入了解Deferred。 API $.Deferred 通过调用$.Deferred...
  • Deferred deeplinking

    2020-12-30 19:24:21
    <div><p>hi, we are getting reports that some times, the deferred deeplinking after an install does not work. but sometimes it does. from our logs, when it does not work, looks like the app did not ...
  • jquery deferred

    2019-04-22 16:06:09
    http://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html https://blog.csdn.net/lihongxun945/article/details/11581579 http://www.ruanyifeng.com/blog/201...
  • 主要介绍了jQuery之Deferred对象详解,本文深入剖析了jQuery Deferred对象的方法属性等内容,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,299
精华内容 3,719
关键字:

deferred