vue 子组件加载策略
很多同学在进行编程学习时缺乏系统学习的资料。本页面基于vue 子组件加载策略内容,从基础理论到综合实战,通过实用的知识类文章,标准的编程教程,丰富的视频课程,为您在vue 子组件加载策略相关知识领域提供全面立体的资料补充。同时还包含 vagrant、val、validationgroup 的知识内容,欢迎查阅!
vue 子组件加载策略相关知识
-
vue 子组件懒加载功能懒加载功能子组件扩展参数参数功能备注WatchScroll是否需要懒加载true必需winHeight父元素高度window.screen.availHeight必需ScrollState滚动监听+new Date()必需需要父组件做处理操作代码样例引入子组件<hfq-img :imgs="scope.row.thumb_img" :resourceUrl="resourceUrl" &nbs
-
Vue子组件与父组件之间的通信1.环境搭建下载 vue-cli:npm install -g vue-cli初始化项目:vue init webpack vue-demo进入vue-demo文件夹:cd vue-demo下载安装依赖:npm install运行该项目:npm run dev2.父组件向子组件传值src/components/文件夹下建一个组件,Home.vue创建子组件,在src/components/文件夹下新建一个文件夹,在新建文件夹中新建一个组件Child.vue在Child.vue中创建props,用于接收父组件传递的值<template> <div> <div v-for="(item,key) of c" :key="key">
-
Vue子组件与父组件之间的通信1.环境搭建下载 vue-cli:npm install -g vue-cli初始化项目:vue init webpack vue-demo进入vue-demo文件夹:cd vue-demo下载安装依赖:npm install运行该项目:npm run dev2.父组件向子组件传值src/components/文件夹下建一个组件,Home.vue创建子组件,在src/components/文件夹下新建一个文件夹,在新建文件夹中新建一个组件Child.vue在Child.vue中创建props,用于接收父组件传递的值<template> <div> <div v-for="(item,key) of c" :key="key">
-
【死磕 Spring】----- IOC 之 Spring 统一资源加载策略原文出自:http://cmsblogs.com在学 Java SE 的时候我们学习了一个标准类 java.net.URL,该类在 Java SE 中的定位为统一资源定位器(Uniform Resource Locator),但是我们知道它的实现基本只限于网络形式发布的资源的查找和定位。然而,实际上资源的定义比较广泛,除了网络形式的资源,还有以二进制形式存在的、以文件形式存在的、以字节流形式存在的等等。而且它可以存在于任何场所,比如网络、文件系统、应用程序中。所以 java.net.URL 的局限性迫使 Spring 必须实现自己的资源加载策略,该资源加载策略需要满足如下要求:职能划分清楚。资源的定义和资源的加载应该要有一个清晰的界限;统一的抽象。统一的资源定义和资源加载策略。资源加载后要返回统一的抽象给客户端,客户端要对资源进行怎样的处理,应该由抽象资源接口来界定。统一资源:Resourceorg.springframework.core.io.Resource 为 Spring 框架所有资源的抽象和访问
vue 子组件加载策略相关课程
vue 子组件加载策略相关教程
- 2. 策略模式 策略模式是软件运行时,根据实际情况改变软件的算法行为。常见的策略模式就是文件压缩软件,通常一个压缩软件可以支持多种压缩算法如 zip 、gzip、rar 等,通过策略模式可以让压缩软件根据我们具体的操作来实现不同的压缩算法。我们来看一个压缩数据的策略模式的例子://定义压缩策略接口 public interface CompressionStrategy{ public OutputStream compress(OutputStream data) throws IOException; } //gzip压缩策略 public class GzipStrategy implements CompressionStrategy{ @Override public OutputStream compress(OutputStream data) throws IOException { return new GZIPOutputStream(data); } } //zip压缩策略 public class ZipStrategy implements CompressionStrategy{ @Override public OutputStream compress(OutputStream data) throws IOException { return new ZipOutputStream(data); } } //在构造类时提供压缩策略 public class Compressor{ private final CompressionStrategy strategy; public Compressor(CompressionStrategy strategy){ this.strategy = strategy; } public void compress(Path inFiles, File outputFile) throws IOException{ try(OutputStream outputStream = new FileOutputStream(outputFile)){ Files.copy(inFiles,strategy.compress(outputStream)); } } } //使用具体的策略初始化压缩策略 //gzip策略 Compressor gzipCompressor = new Compressor(new GzipStrategy()); //zip策略 Compressor zipCompressor = new Compressor(new ZipStrategy());以上就是一个完整的 zip 和 gzip 的压缩策略。现在我们用 Lambda 表达式来优化初始化压缩策略//使用构造器引用优化初始化压缩策略 //gzip策略 Compressor gzipCompressor = new Compressor(GzipStrategy::new); //zip策略 Compressor zipCompressor = new Compressor(ZipStrategy::new);
- 2. 负载均衡的策略 当我们使用集群的方式部署的服务在不同的机器上时,根据机器的性能以及网络环境,我们可能需要使用负载均衡策略来分配请求到不同的机器,这里我们就开始讲解负载均衡的策略。Round Robin 轮询策略轮询策略,按照集群的服务列表的顺序,依次进行请求的分配,直到列表中所有的服务都分配了一次请求,就完成了一轮的请求分配,然后再从第一个服务开始分配请求。轮询策略是很多负载均衡技术的默认策略,这样的方式保证了的每个服务所承受的请求压力是平均的,我们可以把服务列表按照顺序放到一个数组来循环分配请求。/** * 轮询策略 Demo */public class RoundRobinStrategy { public static void main(String[] args) { // 模拟 Server 地址列表 String[] serverList = {"192.168.0.77","192.168.0.88","192.168.0.99"}; // 模拟 5 次请求 for (int i = 0; i < 5; i++) { // 根据数组长度取模,顺序获取地址索引 int i1 = i % serverList.length; // 根据索引获取服务器地址 System.out.println(serverList[i1]); } }}执行 main 方法,查看控制台输出:192.168.0.77192.168.0.88192.168.0.99192.168.0.77192.168.0.88我们可以观察到控制台输出的服务地址是顺序的。Random 随机策略随机策略,顾名思义就是根据随机算法把请求随机的分配给服务列表中的任意一个服务。随机策略的实现方式:我们可以把服务列表放到一个数组,然后根据数组的长度来获取随机数,取到的随机数就是服务在数组中的索引,根据这个索引,我们就可以拿到服务地址来发送请求了。/** * 随机策略 Demo */public class RandomStrategy { public static void main(String[] args) { // 服务地址数组 String[] serverList = {"192.168.0.77","192.168.0.88","192.168.0.99"}; // 模拟发送 5 次请求 for (int j = 0; j < 5; j++) { // 随机获取数组的索引 int i = new Random().nextInt(serverList.length); // 根据索引获取服务器地址 System.out.println(serverList[i]); } }}执行 main 方法,查看控制台输出:192.168.0.88192.168.0.88192.168.0.99192.168.0.77192.168.0.77我们可以观察到控制台输出的服务地址是随机的,还有可能会出现多次请求连续随机到同一个服务的情况。Consistent Hashing 一致性哈希策略一致性哈希策略的实现方式:我们先把服务列表中的地址进行哈希计算,把计算后的值放到哈希环上,接收到请求后,根据请求的固定属性值来进行哈希计算,然后根据请求的哈希值在哈希环上顺时针寻找服务地址的哈希值,寻找到哪个服务地址的哈希值,就把请求分配给哪个服务。Tips: 哈希环的范围,从 0 开始,到 2 的32 次方减 1 结束,也就是到 Integer 的最大取值范围。在示例的图中,哈希环上有 3 个 Server 的 Hash 值,每个请求的 Hash 值都顺时针去寻找 Server 的 Hash 值,找到哪个就将请求分配给哪个服务。接下来我们用 Java 实现一致性哈希策略,使用 IP 地址进行 Hash 计算:/** * 一致性哈希策略 Demo */public class ConsistentHashingStrategy { public static void main(String[] args) { // 模拟 Server 地址列表 String[] serverList = {"192.168.0.15", "192.168.0.30", "192.168.0.45"}; // 新建 TreeMap 集合 ,以 Key,Value 的方式绑定 Hash 值与地址 SortedMap<Integer, String> serverHashMap = new TreeMap<>(); // 计算 Server 地址的 Hash 值 for (String address : serverList) { int serverHash = Math.abs(address.hashCode()); // 绑定 Hash 值与地址 serverHashMap.put(serverHash, address); } // 模拟 Request 地址 String[] requestList = {"192.168.0.10", "192.168.0.20", "192.168.0.40", "192.168.0.50"}; // 计算 Request 地址的 Hash 值 for (String request : requestList) { int requestHash = Math.abs(request.hashCode()); // 在 serverHashMap 中寻找所有大于 requestHash 的 key SortedMap<Integer, String> tailMap = serverHashMap.tailMap(requestHash); //如果有大于 requestHash 的 key, 第一个 key 就是离 requestHash 最近的 serverHash if (!tailMap.isEmpty()) { Integer key = tailMap.firstKey(); // 根据 key 获取 Server address String address = serverHashMap.get(key); System.out.println("请求 " + request + " 被分配给服务 " + address); } else { // 如果 serverHashMap 中没有比 requestHash 大的 key // 则直接在 serverHashMap 取第一个服务 Integer key = serverHashMap.firstKey(); // 根据 key 获取 Server address String address = serverHashMap.get(key); System.out.println("请求 " + request + " 被分配给服务 " + address); } } }}执行 main 方法,查看控制台输出:请求 192.168.0.10 被分配给服务 192.168.0.15请求 192.168.0.20 被分配给服务 192.168.0.30请求 192.168.0.40 被分配给服务 192.168.0.45请求 192.168.0.50 被分配给服务 192.168.0.15加权轮询策略加权轮询策略就是在轮询策略的基础上,对 Server 地址进行加权处理,除了按照服务地址列表的顺序来分配请求外,还要按照权重大小来决定请求的分配次数。加权的目的是为了让性能和网络较好的服务多承担请求分配的压力。比如 Server_1 的权重是 3,Server_2 的权重是 2,Server_3 的权重是 1,那么在进行请求分配时,Server_1 会被分配 3 次请求,Server_2 会被分配 2 次请求,Server_3 会被分配 1 次请求,就这样完成一轮请求的分配,然后再从 Server_1 开始进行分配。加权随机策略加权随机策略就是在随机策略的基础上,对 Server 地址进行加权处理,Server 地址的加权有多少,那么 Server 地址的数组中的地址就会有几个,然后再从这个数组中进行随机选址。Least Connection 最小连接数策略最小连接数策略,就是根据客户端与服务端会话数量来决定请求的分配情况,它会把请求分配到会话数量小的服务,会话的数量越少,也能说明服务的性能和网络较好。学习完负载均衡的策略,接下来我们使用 Zookeeper 实现负载均衡。
- 策略模式 大家一定都使用过电子地图。在地图中输入出发地和目的地,然后再选取你的出行方式,就可以计算出最优线路以及预估的时长。出行方式有驾车、公交、步行、骑行等。出行方式不同,计算的线路和时间当然也不同。其实出行方式换个词就是出行策略。而策略模式就是针对此类问题的设计模式。生活中这种例子太多了,比如购物促销打折的策略、计算税费的策略等等。相应的策略模式也是一种常用的设计模式。本节我们会以电子地图为例,比较工厂模式和策略模式,讲解策略模式的原理。最后结合工厂模式改造策略模式的代码实现,以达到更高的设计目标。
- 3.3 JOINED 策略 JOINED: 将父类、子类分别存放在不同的表中,并且建立相应的外键,以确定相互之间的关系。将来的数据应该和下面一样:第三种策略的映射代码和第二种策略唯一不同的地方,就在 person 中的策略改成了:@Inheritance(strategy=InheritanceType.JOINED)好吧,跑一下测试实例:HibernateTemplate<Student> hibernateTemplate = new HibernateTemplate<Student>(); hibernateTemplate.template(new Notify<Student>() { @Override public Student action(Session session) { return null; } });进入 MySql 查看生成的表结构:这种策略从表内容来讲,会把学生和老师共同的字段信息保存到一张表中,两个子表只分别保存属于自己的信息。JOINED 策略从使用角度上讲增加了查询时间,对学生、老师信息进行保存和查询操作时需要连接 person 表,显然增加了操作时间。并且,表中的数据不完善,有点残缺不全的感觉。相信各自还是有自己的优缺点:SINGLE_TABLE: 除了速度杠杆的,但不分你我,数据挤在一起,只怕数据多了,迟早会出现异常;TABLE_PER_CLASS: 类结构符合 OOP 标准,表结构符合关系型数据库范式。数据之间分界线清晰,操作速度也还可以;JOINED: 和 SINGLE_TABLE 有点类似,原来是全部挤在一起。为了缓解空间,一部分数据挤在一起,另一部分放在自己的表中,速度不会提升,数据表完整性得不到保存。客观上对 3 种策略进行纵横比较,最后选择使用哪一种策略,还是由项目需求决定吧。存在,就有合理性。
- 2. 主键策略 Hibernate 进行数据库操作时,可依靠主键生成器组件更快速、准确地进行一系列操作。这便是主键策略。
- 1.2 策略模式实现电子地图 使用策略模式,需要增加一个策略上下文类(Context)。Context类持有策略实现的引用,并且对外提供计算方法。Context类根据持有策略的不同,实现不同的计算逻辑。客户端代码只需要调用 Context 类的计算方法即可。如果想切换策略实现,那么只需要改变Context类持有的策略实现即可。TravelStrategy 接口和实现的代码不变,请参照上面工厂模式中给出的代码。其他代码如下:StrategyContext 类:public class StrategyContext { private TravelStrategy strategy; public StrategyContext(TravelStrategy strategy) { this.strategy = strategy; } public int calculateMinCost(){ return strategy.calculateMinCost(); }StrategyContext 持有某种 TravelStrategy 的实现,它对外提供的calculateMinCost 方法,实际是对 TravelStrategy 做了一层代理。想切换不同算法的时候,只需更改 StrategyContext 持有的 TravelStrategy 实现。TravelService 对外提供计算方法,代码如下:public class TravelService { private StrategyContext strategyContext; public int calculateMinCost(String travelWay){ if ("selfDriving".equals(travelWay)) { strategyContext = new StrategyContext(new SelfDrivingStrategy()); } if ("bicycle".equals(travelWay)) { strategyContext = new StrategyContext(new BicycleStrategy()); } else { strategyContext = new StrategyContext(new PublicTransportStrategy()); } return strategyContext.calculateMinCost(); }}可以看到 TravelService 中只会和 Context 打交道,初始化 Context 时,根据不同的出行方式,设置不同的策略。看到这里你是不是会有疑问,使用工厂模式消除了客户端代码的条件语句。怎么使用策略模式,条件语句又回来了?别急,我们继续向下看。最后我们看一下策略模式的类图:
vue 子组件加载策略相关搜索
-
vacuum
vagrant
val
validationgroup
validationsummary
vals
valueof
values
vant
variables
vb
vb if else
vb if语句
vb net
vb net 教程
vb net 数据库
vb net教程
vb net下载
vb 教程
vb 数组