目前,我们有一个基于网络的办公应用程序,用PHP编写,javascript来管理各种流程(计费,订购,用户管理,报告,订阅管理,文章管理,仓储等)。
应用程序使用iframe加载在主应用程序界面中执行各种功能的页面。从主页面创建选项卡,以便您可以根据需要访问所有打开的页面。每个页面都有自己的javascript包含文件,css等来执行复杂的任务。所有iframed页面(大约600个)都位于同一个域/主机上。
由于许多人将iframe描述为“邪恶”,我正在研究如何将应用程序转换为仅使用div。
我的问题是:
1)在没有iframe的情况下,我是否需要在主起始页面上包含所有使用过的javascript文件?或者是否可以根据您访问的页面将javascript文件动态加载到内存中? (包括新的函数声明等。)
2)当有人关闭页面时,这些包含文件是否可以完全从内存中删除? (在这种情况下是一个div)。这是为了避免功能名称和不同文件的变量,也不会增加浏览器的内存使用量。
3)或者也许iframe不是那种“邪恶”的,这是使用iframe的正确方法吗?
感谢您的建议
奶酪 帕特里克
答案 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的内存。此外,通常的做法是首先制作一个工作程序,并且只有在滞后的情况下才能进行优化。否则,您可能会花费一个月的时间来完成一些用户无法注意到的事情。