gpt4 book ai didi

javascript - 我将如何设计客户端队列系统?

转载 作者:数据小太阳 更新时间:2023-10-29 04:44:56 24 4
gpt4 key购买 nike

概览

我正在做一个项目,我遇到了一些问题,因为事情没有按照我希望的顺序发生。所以我一直在考虑设计某种队列,我可以用它来组织函数调用和在启动期间使用的其他杂项 JavaScript/jQuery 指令,即在加载页面时。我正在寻找的不一定是队列数据结构,而是一些系统可以确保事情按照我指定的顺序执行,并且只有当前一个任务完成时新任务才能开始。

我简要地查看了 jQuery QueueAjaxQueue但我真的不知道它们是如何工作的,所以我不确定这是否是我想要采用的方法……但我会继续阅读有关这些工具的更多信息。

具体内容

目前,我已经设置好一些工作在 $(document).ready(function() {...}); 中进行,而其他工作在 $(窗口).load(函数() {...});.例如,

<head>
<script type="text/javascript">

// I want this to happen 1st
$().LoadJavaScript();
// ... do some basic configuration for the stuff that needs to happen later...

// I want this to happen 2nd
$(document).ready(function() {

// ... do some work that depends on the previous work do have been completed
var script = document.createElement("script");
// ... do some more work...
});

// I want this to happen 3rd
$(window).load(function() {

// ... do some work that depends on the previous work do have been completed
$().InitializeSymbols();
$().InitializeBlock();
// ... other work ... etc...
});
</script>
</head>

...这真的很乏味和丑陋,更不用说糟糕的设计了。因此,我不想处理那些乱七八糟的事情,而是想设计一个非常通用的系统,这样我就可以入队 $().LoadJavaScript();,然后是 var script = document。 createElement("script");,然后是 $().InitializeSymbols();,然后是 $().InitializeBlock();,等等...然后 Queue 将执行函数调用和指令,以便在一条指令执行完毕后,另一条可以开始,直到 Queue 为空,而不是我重复调用 dequeue。

这背后的原因是一些工作需要先进行,例如配置和初始化,然后才能开始其他工作,因为依赖于配置和初始化步骤的完成。如果这听起来不是一个好的解决方案,请告诉我:)

一些基础工作

我已经为基本队列编写了一些代码,which can be found here ,但我希望扩展它的功能,以便我可以存储各种类型的“对象”,例如单独的 JavaScript/jQuery 指令和函数调用,本质上是我想要执行的代码片段。

更新

使用我已经实现的当前队列,看起来我可以存储函数并在以后执行它们,例如:

// a JS file... 
$.fn.LoadJavaScript = function() {

$.getScript("js/Symbols/Symbol.js");
$.getScript("js/Structures/Structure.js");
};

// another JS file...
function init() { // symbols and structures };

// index.html
var theQueue = new Queue();
theQueue.enqueue($().LoadJavaScript);
theQueue.enqueue(init);

var LJS = theQueue.dequeue();
var INIT = theQueue.dequeue();

LJS();
INIT();

我还认为我已经弄清楚如何存储单个指令,例如 $('#equation').html(""); 或者甚至 if-else 语句或循环,通过这样包装它们:

theQueue.enqueue(function() { $('#equation').html(""); // other instructions, etc... });

但是这种方法需要我等到 Queue 完成它的工作,然后才能继续我的工作。这似乎是一个不正确的设计。有没有更聪明的方法呢?另外,我怎么知道某个函数已经完成执行,以便 Queue 可以知道继续前进?是否有某种我可以等待的返回值或我可以为队列中的每个任务指定的回调函数?

总结

因为我在客户端做所有事情,我不能让队列独立地做它自己的事情(根据下面的答案),有没有比我等待队列完成它的工作更聪明的解决方案?

因为这更像是一个设计问题而不是一个特定的代码问题,我正在寻找解决我的问题的方法的建议,关于我应该如何设计这个系统的建议,但我绝对欢迎,并且很乐意看到,支持建议的代码 :) 我也欢迎对上面链接的 Queue.js 文件和/或我对问题的描述以及我计划采取的解决方法的任何批评。

谢谢,赫里斯托

最佳答案

我建议使用 http://headjs.com/它允许您并行加载 js 文件,但按顺序执行它们,本质上与您想做的事情相同。它非常小,您可以随时用它来获取灵感。

我还要提到依赖执行顺序的处理程序不是好的设计。我总是能够将我所有的 Bootstrap 代码放在就绪事件处理程序中。在某些情况下,如果您需要访问图像,则需要使用负载处理程序,但这对我来说并不常见。

关于javascript - 我将如何设计客户端队列系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4666130/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com