1. Voordat je kan participeren op het forum dien je je eerst te registreren.

    Druk hier om je te registreren!
    Ontzet Notitie

Ajax requests - Openen tabs

Discussie in 'Info voor ontwikkelaars' gestart door Unfriendly Sander, 12. apr 2016.

Deel Deze Pagina

  1. Unfriendly Sander

    Unfriendly Sander

    Lid geworden:
    2. feb 2014
    Berichten:
    1.403
    Leuk Bevonden:
    62
    Beste medescripters en forumgenoten,

    Met de recente update waarin teveel aanvragen nu geblokkeerd worden, zijn er een aantal scripts die een fix nodig hebben. De eenvoudigste fix is een timeout. Hierover zijn zowel Hardcode als ikzelf het niet eens dat dit de beste oplossing is. We hebben de koppen bij elkaar gestoken, wat gebrainstormt en we hebben voor zowel het sturen van ajax requests als het openen van tabs een geschikt alternatief op de timeout gevonden.

    Mocht je opmerkingen/verbeteringen hebben op de voorgestelde code, aarzel niet om deze hier te plaatsen, we willen dit zogoed als mogelijk implementeren zodat je amper merkt dat je moet rekening houden met de requestlimiet. Imho is dit al aardig gelukt.

    Ajax Requests
    De code voor de ajaxrequests:
    Code:
    if (typeof window.$.twAjax === 'undefined') {
       window.$.twAjax = (function () {
           let Ajax = function (options, promise) {
               this.options = options;
               this.promise = promise;
           };
    
       let Queue = (() => {
           let Queue = function () {
           this.list = [];
           this.working = false;
           this.length = 0;
           };
    
           Queue.prototype.doNext = function () {
           let item = this.dequeue(),
               self = this;
    
           $.ajax(item.options).done(function () {
               item.promise.resolve.apply(null, arguments);
               self.start();
           }).fail(function () {
               item.promise.reject.apply(null, arguments);
               self.start();
           });
           };
    
           Queue.prototype.start = function () {
           if (this.length) {
               this.working = true;
               this.doNext();
           } else {
               this.working = false;
           }
           };
    
           Queue.prototype.dequeue = function () {
           this.length -= 1;
           return this.list.shift();
           };
    
           Queue.prototype.enqueue = function (item) {
           this.list.push(item);
           this.length += 1;
    
           if (!this.working) {
               this.start();
           }
           };
    
           return Queue;
       })();
    
       let orchestrator = (() => {
           // Create 5 queues to distribute requests on
           let queues = (() => {
           const needed = 5;
           let arr = [];
    
           for (let i = 0; i < needed; i++) {
               arr[i] = new Queue();
           }
    
           return arr;
           })();
    
           let distribute = (item) => {
           let leastBusyQueue = queues.map(q => q.length).
               reduce((next, curr) => (curr < next) ? curr : next, 0);
           queues[leastBusyQueue].enqueue(item);
           };
    
           return distribute;
       })();
    
           return function(options) {
               let promise = $.Deferred(),
           item = new Ajax(options, promise);
    
           orchestrator(item);
    
           return promise;
           };
       })();
    }
    

    Plaats deze code in je script. Daarna hoef je alleen maar de $.ajax naar $.twAjax te veranderen. That's it.

    Openen tabs

    We zijn hier dicht bij een volledige fix, we merken nog enkele issues die we aan het oplossen zijn. Van zodra dit af is (asap uiteraard) plaatsen we de code hiervoor ook in deze post.

    Mvg,

    Unfriendly Sander & Hardcode
     
    Laatst bewerkt: 15. apr 2018
    .Sadye vindt dit leuk.
  2. Fichtme

    Fichtme

    Lid geworden:
    30. apr 2014
    Berichten:
    335
    Leuk Bevonden:
    1
    thnxxx :D
     
  3. Tuam

    Tuam

    Lid geworden:
    9. mrt 2011
    Berichten:
    2.022
    Leuk Bevonden:
    31
    @Jimmy en Sander: Top dat jullie aan een perfecte oplossing werken

    Dat zou ik idd moeten doen dan, maar ik krijg het idee dat de oplossing in de openingspost nog niet definitief is.
    1C voor Chrome krijgt overigens een aangepaste functionaliteit, maar daar post ik tegen die tijd in het topic van het script meer over.
     
  4. Conceived by Communism

    Conceived by Communism Casanova W36

    Lid geworden:
    13. jan 2012
    Berichten:
    5.478
    Leuk Bevonden:
    186
    Bedankt. :)
     
  5. hardcode

    hardcode

    Lid geworden:
    14. sep 2011
    Berichten:
    6.126
    Leuk Bevonden:
    6
    Ik zal even kijken of ik de code voor tabs deze week nog kan publiceren, maar wat ik begreep van Sander is dat bovenstaande code perfect werkt voor requests.

    Hij is er deze week niet, maar zal even kijken of ik hem alsnog kan bereiken hierover :p
     
  6. warre

    warre

    Lid geworden:
    19. feb 2008
    Berichten:
    4.139
    Leuk Bevonden:
    336
    Prachtig werk :) Nice job Sander & Hardcode ! Ik kijk al uit naar de oplossing voor tabs ;)
     
  7. warre

    warre

    Lid geworden:
    19. feb 2008
    Berichten:
    4.139
    Leuk Bevonden:
    336
    Lange dichtbij :D
     
  8. Unfriendly Sander

    Unfriendly Sander

    Lid geworden:
    2. feb 2014
    Berichten:
    1.403
    Leuk Bevonden:
    62
    Het is in testfase, doet soms wat raar in Firefox. :p
     
  9. warre

    warre

    Lid geworden:
    19. feb 2008
    Berichten:
    4.139
    Leuk Bevonden:
    336
    Doet het vurig vosje nog steeds raar ?
     
  10. warre

    warre

    Lid geworden:
    19. feb 2008
    Berichten:
    4.139
    Leuk Bevonden:
    336
    Is er al een propere oplossing voor tabs of moeten we terugvallen op een time-out ?
     
  11. Rise Against

    Rise Against

    Lid geworden:
    24. sep 2008
    Berichten:
    9.574
    Leuk Bevonden:
    813
    Die mag jij niet eens gebruiken - Auteurs recht
     
  12. warre

    warre

    Lid geworden:
    19. feb 2008
    Berichten:
    4.139
    Leuk Bevonden:
    336
    Als dat de wens is van de schrijver en hij mij daar geen toestemming voor wilt geven zal ik mij daar zeker aan houden. Kunnen we van jou hetzelfde zeggen ?
     
  13. Unfriendly Sander

    Unfriendly Sander

    Lid geworden:
    2. feb 2014
    Berichten:
    1.403
    Leuk Bevonden:
    62
    Voorlopig timeout. Moet nog iets oplossen in firefox voor ik het kan publiceren. ;)
     
  14. Rise Against

    Rise Against

    Lid geworden:
    24. sep 2008
    Berichten:
    9.574
    Leuk Bevonden:
    813
    Zolang ik niet speel, sure waarom niet :)

    Voor de rest boeit het me vrij weinig
     
  15. warre

    warre

    Lid geworden:
    19. feb 2008
    Berichten:
    4.139
    Leuk Bevonden:
    336
    Ik weet dat het je weinig boeit. Nooit een respectvol speler geweest he ;)

    Thx Sander.
     
  16. Rise Against

    Rise Against

    Lid geworden:
    24. sep 2008
    Berichten:
    9.574
    Leuk Bevonden:
    813
    Dat jij spelletjes met TW wilt spelen is niet mijn probleem :)
    En ach, dat iemand als jij mij uitmaakt voor een respectloze speler maakt me vrij weinig uit :p
     
  17. hardcode

    hardcode

    Lid geworden:
    14. sep 2011
    Berichten:
    6.126
    Leuk Bevonden:
    6
    Jongens de discussie is geweest. Warre heeft geen recht op zijn auteursrecht en kan dat sowieso niet hard maken. Wil hij dat wel doen weet hij de stappen welke hij moet ondernemen.
    Heeft geen nut om die discussie hier opnieuw te voeren en zal ook op berispt worden.
     
  18. Merlock.

    Merlock.

    Lid geworden:
    29. jun 2010
    Berichten:
    100
    Leuk Bevonden:
    7
    Hoe staat het intussen met die fix voor het openen van meerdere tabs?
     
  19. warre

    warre

    Lid geworden:
    19. feb 2008
    Berichten:
    4.139
    Leuk Bevonden:
    336
    Gebruik maar gewoon een timeout daarvoor xd Zou niet wachten op een meer cleane fix :D
     
  20. Unfriendly Sander

    Unfriendly Sander

    Lid geworden:
    2. feb 2014
    Berichten:
    1.403
    Leuk Bevonden:
    62
    Update aan code snippet voor ajax requests. Deze maakt nu volledig gebruik van het feit dat er max 5 workers beschikbaar zijn per speler. (is goedgekeurd door Poo.)
    In verstaanbare mensentaal: is dus sneller/performanter.
     
    warre en jack12071983 vinden dit leuk.