使用 BIG 动态 DOM 树创建 BIG 稳定的 Web 应用程序
Creating BIG stable web apps with BIG dynamic DOM Tree
这个项目的DOM树很大,节点必须动态创建。有两种方法:
1)在父元素中插入子元素作为字符串,让浏览器推断子元素,即
.html:
<div id="parent"></div>
和JavaScript:
str='<input type="text" id="child" size="30">';
documen.getElementById("parent").innerHTML=str;
2)让JS创建子项,即
parentElement=document.getElementById('parent');
childElement=document.createElement('input');
childElement.setAttribute('id','child');
parentElement.appendChild('childElement);
我一直在使用 1,当树变大而应用程序数据变大时,我开始出现非常奇怪的行为。比如,例如
aValue="hi";
str='<input type="text" id="child" size="30" value='+aValue+'>';
documen.getElementById("parent").innerHTML=str;
结果将是一个包含 hi 的文本行输入元素,以及一些添加到 DOM 树和数据到应用程序数据的数据,突然间文本行将读取
+aValue+
并假设在chrome调试器下,您会看到与所述结果没有因果关系。我尝试删除以前的孩子然后插入新的孩子,但没有效果。此外,我在chrome,ff和opera中得到了完全相同的行为。因此,似乎在通用核心浏览器c ++代码中的内存已损坏。
所以问题是:有没有人开发了一个稳定的 BIG Web 应用程序(订购 100k 行),其中包含 BIG 动态 DOM 树(1000 个节点的顺序)和 BIG 应用程序数据(许多 Meg 的顺序)。如果是这样,您究竟使用了哪种动态 DOM 节点创建方法。有关内存管理的任何其他提示将不胜感激。
与其使用所有这些额外的调用来构建 DOM,不如研究 jQuery。它使动态创建和操作 DOM 数据变得非常容易,并且应该独立于浏览器。
这篇文章讨论了创建新元素:使用 jQuery 创建新元素的首选方法
这是jQuery的链接:https://jquery.com/
我认为我的问题是,随着内存越来越重,它会在mem<==>file_sys数据交换中暴露某种错误。假设我有 8 MB 内存,当 Web 应用程序使用 6 mb 时,底层 c+(浏览器)代码应该将其余数据添加到某个临时文件中。我在其中暴露了一个错误。所以jquery或其他东西仍然会弹出,我想。而且它在多个浏览器中弹出,它强化了这种思路。
我现在的方法是模块化代码。我正在构建一个应用程序树,其中每个节点(浏览器实例)都包含自己的功能,当功能完成后,数据将传递到父节点(如果需要,则传递到其他子节点)并且实例关闭。这样,100,000 行被分解为 20 个实例,每个实例有 5000 行。同样的粒度化也发生在 DOM 树上。我正在做的另一件事是根据需要动态加载.js功能(ala c+ dll)。
然后是应用程序数据。在那里,我将整个平台移动到节点.js并且我将Web应用程序作为对等方(而不是客户端-服务器)运行,即所有io都像这样:
本地应用程序 JS<==ajax==>local node js <==local io ==> 本地应用程序数据
因此,应用数据是本地化和分块(尽可能多)异步的。
这有点晚了,但你可能想研究一下 facebook 开发的 react 库。
不确定你脑海中有多少"许多 Megs",但 devtools 在他们的网站上向我展示了一个 ~35Mb 的堆。因此,值得检查他们在做什么。
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- Emberjs应用程序加载在除Index之外的所有路由上
- 使用电话间隙在Android应用程序中显示SQL Lite的数据
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- angular 1.5应用程序中的导航栏
- 在Web应用程序中使用Highcharts javascript
- angularjs+rails应用程序中未显示模板
- 使用acess代币登录Facebook,并通过网络应用程序离线发布
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- 科尔多瓦页面类应用程序中的多个谷歌地图
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- Angularjs-utils高亮过滤器在搜索时破坏应用程序
- 在phonegap应用程序内部重定向不起作用
- 使用谷歌应用程序脚本从工作表中获取值并将其显示在文本框中
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- Node.js正在更改应用程序以使用集群模块
- 在openshift node js应用程序中获取请求
- 使用 BIG 动态 DOM 树创建 BIG 稳定的 Web 应用程序
- 应用程序脚本写入Big Query未知错误