同步加载、异步加载、延迟加载

一、同步加载
  平常默认用的都是同步加载。如:<script src="http://yourdomain.com/script.js"></script> 
  同步模式又称阻塞模式,会阻止浏览器的后续处理,停止了后续的文件的解析,执行,如图像的渲染。流览器之所以会采用同步模式,是因为加载的js文件中有对dom的操作,重定向,输出document等默认行为,所以同步才是最安全的。通常会把要加载的js放到body结束标签之前,使得js可在页面最后加载,尽量减少阻塞页面的渲染。这样可以先让页面显示出来

二、异步加载

(function() {
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = 'http://yourdomain.com/script.js';
var x = document.getElementsByTagName('script')[0];
 x.parentNode.insertBefore(s, x);
})();

异步加载也叫非阻塞模式加载,浏览器在下载js的同时,同时还会执行后续的页面处理。
在script标签内,用js创建一个script元素并插入到document中,这种就是异步加载js文件了。

同步加载流程是瀑布模型,异步加载流程是并发模型。

三、延迟加载(lazy loading)

前面解决了异步加载(async loading)问题,再谈谈什么是延迟加载。
延迟加载:有些 js 代码并不是页面初始化的时候就立刻需要的,而稍后的某些情况才需要的。延迟加载就是一开始并不加载这些暂时不用的js,而是在需要的时候或稍后再通过js 的控制来异步加载。
也就是将 js 切分成许多模块,页面初始化时只加载需要立即执行的 js ,然后其它 js 的加载延迟到第一次需要用到的时候再加载。
特别是页面有大量不同的模块组成,很多可能暂时不用或根本就没用到。
就像图片的延迟加载,在图片出现在可视区域内时(在滚动条下拉)才加载显示图片

四、预加载

预加载是一种浏览器机制,使用浏览器空闲时间来预先下载/加载用户接下来很可能会浏览的页面/资源,当用户访问某个预加载的链接时,如果从缓存命中,页面就得以快速呈现。




 

转载于:https://www.cnblogs.com/mylanguage/p/5635971.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用OpenTK异步加载纹理时,确实可能会遇到线程冲突的问题。这是因为OpenGL的渲染上下文(rendering context)是与特定的线程绑定的,而不能在多个线程之间共享。因此,如果你在一个线程上加载纹理,并且尝试在另一个线程上使用它进行渲染,就会导致线程冲突。 为了解决这个问题,你可以使用以下方法之一: 1. 在OpenGL渲染上下文所在的线程中加载纹理:将纹理加载的代码放在OpenGL渲染上下文所在的线程中执行。这样可以确保纹理加载和渲染都在同一个线程中进行,避免线程冲突。 2. 使用OpenGL纹理延迟加载:在需要渲染纹理之前,只加载纹理的必要数据(如文件路径、尺寸等),而不是直接加载完整的纹理数据。然后,在OpenGL渲染上下文所在的线程中,根据需要异步加载纹理的实际数据,并将其绑定到纹理对象上。这样可以避免在不同线程间直接操作OpenGL对象,减少线程冲突的可能性。 3. 使用线程同步机制:如果你必须在不同的线程上进行纹理加载和渲染,可以使用线程同步机制来确保线程安全。例如,你可以使用互斥锁(mutex)或信号量(semaphore)来控制对OpenGL渲染上下文的访问,以避免线程冲突。 无论你选择哪种方法,都需要注意正确地管理OpenGL渲染上下文和线程之间的交互。确保在加载纹理之前,OpenGL渲染上下文已经被创建,并且在使用纹理进行渲染之前,纹理数据已经加载完毕。另外,也要小心避免在不同线程间频繁切换OpenGL渲染上下文,以避免性能损失。 总结来说,为了解决OpenTK异步加载纹理时的线程冲突问题,你可以将纹理加载和渲染都放在同一个线程中,或者使用纹理延迟加载和线程同步机制来确保线程安全。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值