解决图片预装载问题

本文探讨了网页中根据图片尺寸动态调整显示大小的方法,并提供了解决方案,包括使用JavaScript进行图片预加载技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天有人在群里提出了 这么个问题



<script language="javascript" type="text/javascript">
function bigimage(imageurl)
{
var varname = new Image();
varname.src = imageurl;
if (varname.width>99)
{
document.write ( " <IMG SRC= "+varname.src+ " border=0 width=230 height=320> ");
alert("datu")
}
else
{
document.write ( " <IMG SRC= "+varname.src+ " width = 120 height = 180 border=0> ");
alert( " xiaotu");
}
}
</script>



为什么只会显示小图.。。。。。。。

这是因为在获得image的width属性时 图片还没预装完!!
通过alert("varname.width")可以让图片装载完毕.........


解决方法是

<script <script language="javascript" type="text/javascript">
function loadImage(url)
{
var varname = new Image();
varname.src =url;
bigimage(url);
}

function bigimage(imageurl)
{
var varname = new Image();
varname.src =imageurl;
if (varname.width>99)
{
document.write("<IMG SRC="+imageurl+"border=0 width=230 height=320> ");
alert("datu")
}
else
{
document.write("<IMG SRC= "+imageurl+ " width = 120 height = 180 border=0> ");
alert( " xiaotu");
}
}
</script>


或者不用 添加的函数

把加载的图片在函数外面 执行页面时就加载.......

一些浏览器试图通过在本地缓存中保存这些图片来解决此问题。这样一来可以顺序调用这些图片——但对于首次使用这些图片的时候仍然会存在延时。预装载就是一种在需要图片之前就将图片下载到缓存的技术。采用这样的方式可以使当确实需要显示图片时迅速将其从缓存中恢复回来并立即显示。

看了java精粹这本书 得到启示

function bigimage(imageurl)
{
var varname = new Image();
var target=new Image();
varname.onload=function()
{
target.src=varname.src;
}
varname.src=imageurl;
if (target.width>99)
{
document.write("<IMG SRC="+target.src+" border=0 width=230 height=320> ");
alert("datu")
}
else
{
document.write("<IMG SRC= "+imageurl+ " width = 120 height = 180 border=0> ");
alert( " xiaotu");
}
}
</script>


原文是

[img]http://dl.iteye.com/upload/picture/pic/64714/37ce4740-112d-3cfb-9802-b01306d5635c.jpg[/img]
### DMA预装载的工作原理及实现方法 DMA(Direct Memory Access,直接内存访问)是一种允许外设与内存之间直接进行数据传输的技术,无需CPU的干。DMA预装载技术通过在DMA传输开始前将数据加载到DMA控制器的内部缓冲区,从而减少等待时间并提高传输效率[^1]。 #### 配置预装载寄存器 在实现DMA预装载的过程中,首先需要配置预装载寄存器。该寄存器用于指定预装载的数据量。通过设置适当的值,可以确保在DMA传输开始时,足够的数据已经被加载到缓冲区中,从而减少传输过程中的延迟[^1]。 #### 启动预装载 在DMA传输开始之前,启动预装载过程是关键步骤之一。此过程会将数据从源地址加载到DMA控制器的内部缓冲区。预装载完成后,实际的DMA传输可以立即开始,而无需等待数据加载完成,从而显著提高了传输效率。 #### 监控预装载效果 为了评估预装载对传输速度的提升效果,可以通过性能测试来监控预装载的效果。这包括测量传输前后的延迟、带宽利用率以及整体系统性能等指标。如果发现预装载未能显著改善性能,可能需要重新调整预装载寄存器的配置或优化硬件设计[^1]。 #### 自动重载寄存器的预装载机制 在某些特定的DMA实现中,自动重载寄存器(auto-reload register)也支持预装载功能。写入或读自动重载寄存器时,实际上访问的是预装载寄存器。预装载寄存器的内容会在每次更新事件(UEV)发生时被转移到影子寄存器中,具体决于TIMx_CR1寄存器中的自动重载预装载使能位(ARPE)。更新事件可以在计数器达到溢出或下溢时生成,也可以由软件触发[^2]。 #### 代码示例:配置DMA预装载 以下是一个简单的代码示例,展示如何配置和启动DMA预装载: ```c // 配置DMA预装载寄存器 void configure_dma_preload(DMA_HandleTypeDef *hdma, uint32_t preload_value) { hdma->Instance->CNDTR = preload_value; // 设置预装载数据量 } // 启动DMA预装载 void start_dma_preload(DMA_HandleTypeDef *hdma) { __HAL_DMA_ENABLE(hdma); // 启用DMA通道 } ``` #### 总结 DMA预装载技术通过在传输开始前将数据加载到内部缓冲区,减少了等待时间并提高了传输效率。其实现涉及配置预装载寄存器、启动预装载过程以及监控预装载效果等关键步骤。此外,某些硬件架构还支持自动重载寄存器的预装载机制,进一步增强了系统的灵活性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值