在SPA中堆叠页面,好主意或坏主意
stacking pages in SPA, good idea or bad?
我已经在javascript中为我的个人单页应用程序创建了一个框架,我正在尝试向其添加堆叠页面功能。
如果您曾经使用过 Android,您已经看到在 Android 中创建的每个新活动或页面都会将前一个活动或页面推回堆栈中,一旦用户按下后退按钮即可访问该堆栈或页面,就像浏览器中的历史记录一样。
唯一的区别是,在Android中,被推送到堆栈的页面会一直保留在那里,直到操作系统用完RAM或其他东西,但是在浏览器中,无论如何页面都会被破坏。
现在,在我的框架中,我想出了一个非常简单的解决方案来将页面保存在内存中,以便当用户按下后退按钮时,我只是在堆栈中找到页面,如果它存在,我只是将其带到前面并将当前页面推回堆栈。
但是这种方法存在一些问题:
-
如果你将堆叠的页面保存在 JavaScript 变量中,或者你把它保存在 DOM 中,只显示:none; 应用于它的样式,将其放在前面并使其可见需要再次绘制整个页面,如果页面太大,这意味着大量的过程,并且使页面之间的过渡非常慢, 特别是如果您在页面过渡时正在进行一些动画。
-
如果堆叠的页面是可见的,并且只是使用 z-index 向后推,那么滚动会导致问题,因为前一页的滚动仍然可用。 如果你使页面溢出:隐藏; 然后,如果您堆叠多个页面,滚动将变得非常缓慢和断断续续,因为浏览器必须在多层彩绘页面上滚动。
所以我的问题是,堆叠有这些问题的页面甚至是一个好主意吗?还是它只是不打算在浏览器中发生?
根据您的 SPA,我认为将所有页面保留在 DOM 中并使用 display: none;
或不同的 z 索引隐藏它们不是一个好主意。您可以尝试做的是将页面的状态/信息保留在变量中,并从 DOM 中删除所有相关元素。当用户返回一页时,您使用以前存储在变量中的信息重新创建了元素。这样,您可以防止从服务器加载信息,并且返回任何状态都不会有任何问题。
您可以通过将最后一页保留在 DOM 中并简单地隐藏它并将之前页面的状态保留在变量中来进一步优化它。
- 将脚本缓存到本地存储的basket.js概念仍然是一个好主意吗
- 使用每500ms运行一次的jquery函数是个好主意吗
- 在debounce函数中使用requestAnimationFrame是个好主意吗
- 通过进程使用 NodeJS 全局事件是个好主意吗?
- 将我所有的.js分组到一个文件中-好主意
- 与AMD共享库是个好主意吗
- 模块是打字的好主意吗?或者它们只是增加了复杂性
- 在Coffeescription中使用一个自调用函数来隐藏其余代码中的函数和变量,这是一个好主意吗
- 开发两个单独的节点应用程序来提供 Web 服务和使用 Web 服务以在浏览器上呈现它是一个好主意吗?
- Meteor:为集合服务器端创建筛选器,并将其存储在本地集合中.好主意
- 修改 yii.activeForm 是个好主意吗.js如果不是,另一种方法是什么
- Javascript中的异步类是一个好主意吗?
- 将 with-语句与上下文一起使用是个好主意吗?
- 在 JavaScript 中将小数字合并为一个是个好主意吗?(作为存储优化解决方案)
- 在第一次触摸启动事件时禁用所有点击事件是个好主意吗?
- 我可以定义一个函数来处理在 2 个输入标签上定义的“更改键控”事件吗?这是个好主意吗
- 使用经典继承,在 JavaScript 中使用“类级”/成员变量是一个好主意还是坏主意
- Cron Job是执行此任务的好主意吗?PHP
- 在JS模板中添加逻辑?好主意还是不行
- 在SPA中堆叠页面,好主意或坏主意