利用享元模式来解决DOM元素过多导致的网页解析慢、卡死的问题

我也不知道应该为本文的思路取一个什么比较恰当的标题,但是感觉符合享元模式的思路。

在一些网页应用中,有时会碰到一个超级巨大的列表,成千上万行,这时大部份浏览器解析起来就非常痛苦了(有可能直接卡死)。

也许你们会说可以分页或动态加载啊?但是有可能需求不允许分页,动态加载?网络的延迟也会造成体验不好。

那么适时候介绍本文的实现思路了,有需要的同学可以参考去实现。

首先上最终的效果:

主要思路如下:

首先,创建如上图所示的三个DIV,scrollbar用于显示具体的滚动条(CSS需要设置zindex,要显示在demo-list的底层),real-panel用于计算列表的实际高度(每一个li的高度是固定的,有多少项数据也是知道的,由此可以计算出列表的实际高度),demo-list主要用于当前滚动条高度对应的实际数据(css需要设置zindex,显示于scrollbar的上层,需要使用JS计算宽度等于real-panel的宽度,这样就刚好覆盖掉底层滚动条外的区域)。

然后,使用KO对数据实现绑定,由于KO的双向绑定,我们可以不用再去实现滚动滚动条时数据变化时带来的更新操作。

最后,就是兼容性了。本文的具体实现在IE6\7\8\9\10\11,FireFox,Chrome,Edge上效果完美。

时间: 2024-08-07 06:04:47

利用享元模式来解决DOM元素过多导致的网页解析慢、卡死的问题的相关文章

java 之 享元模式(大话设计模式)

笔者很少用到享元模式,在笔者看来,享元模式解决内存问题用的应该会比较多,java中我们常用的String就是利用享元模式的思想来解决内存问题的 先看下类图 大话设计模式-类图 在看下笔者的demo /** * 网站接口 */ public interface IWeb { public void sayMyself(); } /** * 网站实现类 */ public class CurrentWeb implements IWeb{ private String name; public Cu

深入理解设计模式(22):享元模式

一.引言 大家都知道单例模式,通过一个全局变量来避免重复创建对象而产生的消耗,若系统存在大量的相似对象时,又该如何处理?参照单例模式,可通过对象池缓存可共享的对象,避免创建多对象,尽可能减少内存的使用,提升性能,防止内存溢出. 在软件开发过程,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非常严重,然而享元模式可以解决这个问题,下面具体看看享元模式是如何去解决这个问题的.

java/android 设计模式学习笔记(13)---享元模式

这篇我们来介绍一下享元模式(Flyweight Pattern),Flyweight 代表轻量级的意思,享元模式是对象池的一种实现.享元模式用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,缓存可共享的对象,来达到对象共享和避免创建过多对象的效果,这样一来就可以提升性能,避免内存移除和频繁 GC 等. 享元模式的一个经典使用案例是文本系统中图形显示所用的数据结构,一个文本系统能够显示的字符种类就是那么几十上百个,那么就定义这么些基础字符对象,存储每个字符的显示外形和其他的格式化数据

12.享元模式(Flyweight Pattern)

using System; using System.Collections; namespace ConsoleApplication5 { class Program { /// <summary> /// 在软件开发过程,如果我们需要重复使用某个对象的时候, /// 如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内存空间了, /// 这样可能会出现内存使用越来越多的情况,这样的问题是非常严重,然而享元模式可以解决这个问题, /// 下面具体看看享元模式是如何去

12.设计模式_享元模式

一.引言 在软件开发过程,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非常严重,然而享元模式可以解决这个问题,下面具体看看享元模式是如何去解决这个问题的. 二.享元模式的详细介绍 在前面说了,享元模式可以解决上面的问题了,在介绍享元模式之前,让我们先要分析下如果去解决上面那个问题,上面的问题就是重复创建了同一个对象,如果让我们去解决这个问题肯定会这样想:"既然都是同一个

三分钟理解“享元模式”——设计模式轻松掌握

享原模式的官方定义: 运用共享技术有效地支持大量细粒度的对象. 大白话讲: 一个类它可能生成好多对象,但这些对象根据属性值的不同一共分成N类,每种类型中属性值都是一样的.在这种情况下,如果创建好多对象,那么这些对象中很多属性值都是重复的,从而造成了大量的内存浪费. 而享元模式能够解决重复对象的内存浪费的问题. 享元模式使用一个工厂类,在工厂类中为每种类型创建一个对象,而且每种类型的对象只有一个. 当客户端需要某种类型的对象的时候,工厂将已创建好的对象给客户端.由于不创建新的对象了,所以节省了内存

设计模式(十二)享元模式(Flyweight Pattern)

一.引言 在软件开发过程,如果我们需要重复使用某个对象的时候,如果我们重复地使用new创建这个对象的话,这样我们在内存就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非常严重,然而享元模式可以解决这个问题,下面具体看看享元模式是如何去解决这个问题的. 二.享元模式的详细介绍 在前面说了,享元模式可以解决上面的问题了,在介绍享元模式之前,让我们先要分析下如果去解决上面那个问题,上面的问题就是重复创建了同一个对象,如果让我们去解决这个问题肯定会这样想:“既然都是同一个

设计模式(十)享元模式(Flyweight)-结构型

享元模式Flyweight 组合模式解决了对象时树形结构时的处理方式.当系统需要大量使用重复的对象,而这些对象要消耗很大的资源时就需要使用享元模式来解决. 单例模式,一个类只有一个唯一的对象.也就是说,不管new多少次,只需要创建这个类的一个对象,如果不采用单例模式,没new一次就会创建一个对象,这对于系统需要使用大量重复的对象,而这些对象需要消耗很大的资源时,是很不划算的,这时就需要使用享元模式. 数据库连接池就是享元模式的典型应用. 享元模式实现原理 享元模式的实现原理图 享元模式的优缺点

【13】享元模式(FlyWeight Pattern)

一.引言 在软件开发过程,如果我们需要重复使用某个对象的时候,若重复地使用new创建这个对象的话,就需要多次地去申请内存空间了,这样可能会出现内存使用越来越多的情况,这样的问题是非常严重.享元模式可以解决这个问题,下面具体看看享元模式是如何去解决这个问题的. 二.享元模式的详细介绍 在前面说了,享元模式可以解决上面的问题了.在介绍享元模式之前,让我们先要分析下如果去解决上面那个问题.上面的问题就是重复创建了同一个对象,如果让我们去解决这个问题肯定会这样想:"既然都是同一个对象,能不能只创建一个对