管理javascript包含文件

时间:2013-05-08 10:24:18

标签: javascript iframe

目前,我们有一个基于网络的办公应用程序,用PHP编写,javascript来管理各种流程(计费,订购,用户管理,报告,订阅管理,文章管理,仓储等)。

应用程序使用iframe加载在主应用程序界面中执行各种功能的页面。从主页面创建选项卡,以便您可以根据需要访问所有打开的页面。每个页面都有自己的javascript包含文件,css等来执行复杂的任务。所有iframed页面(大约600个)都位于同一个域/主机上。

由于许多人将iframe描述为“邪恶”,我正在研究如何将应用程序转换为仅使用div。

我的问题是:

1)在没有iframe的情况下,我是否需要在主起始页面上包含所有使用过的javascript文件?或者是否可以根据您访问的页面将javascript文件动态加载到内存中? (包括新的函数声明等。)

2)当有人关闭页面时,这些包含文件是否可以完全从内存中删除? (在这种情况下是一个div)。这是为了避免功能名称和不同文件的变量,也不会增加浏览器的内存使用量。

3)或者也许iframe不是那种“邪恶”的,这是使用iframe的正确方法吗?

感谢您的建议

奶酪 帕特里克

2 个答案:

答案 0 :(得分:0)

你试过任何代码还是只是问?

你可以使用jquery(see here

$.getScript("ajax/test.js", function(data, textStatus, jqxhr) {
   console.log(data); //data returned
   console.log(textStatus); //success
   console.log(jqxhr.status); //200
   console.log('Load was performed.');
});

答案 1 :(得分:0)

只要您的javascript是模块化的,您就可以随时卸载它。

如果您不知道,在Javascript函数中是对象。使用对象,您可以执行此操作:

var a = {b:10, c:20, d:30}; //Some memory is allocated for object a
a = null; //Object a will be deleted, and no longer need any memory

如何使用它来处理功能?这是最简单的解释:

var myFunction = function(a,b,c) {
    alert(a+b+c);
}; //Here we have a function stored in memory
myFunction = null; //And now we don't

您可以通过这种方式创建整个函数库,然后通过一个操作将其删除。例如:

var MyMath = {};
MyMath.abs = function(a) {
    return (a<0)?-a:a;
};
MyMath.min = function(a,b) {
    return a>b?b:a;
}; //MyMath uses some memory.
alert(MyMath.min(5,10));
MyMath = null; //Now it does not

因此,将所有库包装到对象中,并在需要时卸载这些对象。

<强>加了:

当您的浏览器看到一些新的Javascript代码时 - 它会立即执行所有操作。它也会将其保存在内存中,但从不再使用它(基本上它以hello存储<div>hello</div>的方式存储。因此,最好的解决方案是:

1)动态添加<script>标签以按需加载所需的Javascript文件。它看起来像:

if (MyMathLibrary == null || MyMathLibrary == undefined) {
    createScriptElementForMathLibrary();
}

alert(MyMathLibrary.calculateEnthropyOfTheUniverse());

2)每当您不再需要图书馆时,您只需MyMathLibrary = null。你也可以在这一点上从DOM中删除它,它不会造成任何伤害,正如我所说,它只不过是看不见的div。

但说实话,你确定这值得烦恼吗?现在人们纯粹用Javascript编写3D shooters,计算机带有4-16 GB的内存。此外,通常的做法是首先制作一个工作程序,并且只有在滞后的情况下才能进行优化。否则,您可能会花费一个月的时间来完成一些用户无法注意到的事情。