Heim  >  Fragen und Antworten  >  Hauptteil

Welche Möglichkeiten gibt es, JS-Anfragen zu beenden?

Ich bin während des Interviews auf ein ähnliches Problem gestoßen. Die allgemeine Idee ist, dass beim Laden der Seite einige JS-Dateiressourcen mithilfe von Skript-Tags geladen werden. Wenn diese Ressourcen längere Zeit nicht zurückgefordert werden, wie kann die Anforderung manuell beendet werden?

Ich weiß, dass Ajax-Anfragen eine Abbruchmethode haben. Ich frage mich, ob der Interviewer dies fragen möchte, und gibt es eine andere Möglichkeit, die Anfrage abzubrechen?

typechotypecho2670 Tage vor1005

Antworte allen(3)Ich werde antworten

  • 我想大声告诉你

    我想大声告诉你2017-06-28 09:30:55

    谢邀。
    像 @小溪流 说的一样,是考察timeout。

    大致实现思路这样:

    var sequence = ['foo', 'bar', 'baz', 'base', 'ball', 'hello', 'world', '100k more'],
        start = Date.now();
    
    setTimeout(function _worker() {
        do {
           var element = sequence.shift();
           // do something with element
        } while( sequence.length && (Date.now() - start < 100) );
    
        if( sequence.length )
            setTimeout(_worker, 25);
    }, 25);

    以上例子,25毫秒间隔执行队列加载,加载时间在100ms内。

    Antwort
    0
  • 给我你的怀抱

    给我你的怀抱2017-06-28 09:30:55

    考察的应该是加载资源的timeout

    Antwort
    0
  • typecho

    typecho2017-06-28 09:30:55

    <script>的加载总是同步(阻塞性)的,也不能用DOM操作去影响。题主需要的是独立于页面加载与渲染的异步JS加载。工具有很多,这里举一个RequireJS的例子:

    HTML页面:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>Test Page</title>
    <script src="//cdn.staticfile.org/require.js/2.1.15/require.min.js" data-main="test1"></script>
    </head>
    <body></body>
    </html>
    

    保存为test1.js

    require.config({
        paths: {
            'jquery': '//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery',
            'underscore': '//cdn.bootcss.com/underscore.js/1.7.0/underscore'
        },    
        waitSeconds: 20
    });
    require(['jquery'], function (module) {
        console.log("jQuery " + $.fn.jquery + " successfully loaded. ");
    }, function (err) {
        console.log("SHIT happened while loading jQuery! ");
    });
    require(['underscore'], function (module) {
        console.log(_.last([1, 2, 3, "Underscore.js successfully loaded. "]));
    }, function (err) {
        console.log("SHIT happened while loading Underscore.js! ");
    });

    Antwort
    0
  • StornierenAntwort