首页 > 编程语言 >[Javascript] Import the Same JavaScript Module Multiple Times with Cache Busting

[Javascript] Import the Same JavaScript Module Multiple Times with Cache Busting

时间:2024-11-25 15:35:46浏览次数:11  
标签:Busting JavaScript Multiple random ts Math timeout import await

When attempting to load the same module twice in JavaScript you'll hit a cache and code won't re-run. In scenarios where you actually do want to have state in your modules, you'll have to use a cache-busting technique by passing a query parameter to a dynamic import. This lesson walks through how to add a query parameter, how to add the appropriate types for loading dynamic modules in TypeScript, and when these techniques are valuable.

// file: timeout.ts
await new Promise(res => setTimeout(res, 1000));

console.log(`Timeout done ${new Date()}`)

// file: index.ts
import "./timeout";
import "./timeout";

 

Run bun run index.ts, we only see the output once, even we have import the timeout.tsfile twice

Timeout done Mon Nov 25 2024 09:17:15 GMT+0200 (Eastern European Standard Time)

 This is due to the caching.

 

If we tried to change import by using dynamic importing:

await import("./timeout");
await import("./timeout");

It still behiavor the same.

 

What we need to do is adding some query param:

await import(`./timeout?random=${Math.random()}`);
await import(`./timeout?random=${Math.random()}`);

 

Code:

// file: timeout.ts
await new Promise((res) => setTimeout(res, 1000));

const date = new Date();

export const sayHi = () => console.log(`Hi ${date.toISOString()}`);


// file: index.ts
type TimeoutModule = typeof import("./timeout");
const { sayHi }: TimeoutModule = await import(
  `./timeout?random=${Math.random()}`
);
sayHi();
const { sayHi: sayHi2 }: TimeoutModule = await import(
  `./timeout?random=${Math.random()}`
);
sayHi2();

 

标签:Busting,JavaScript,Multiple,random,ts,Math,timeout,import,await
From: https://www.cnblogs.com/Answer1215/p/18567653

相关文章

  • javascript-语句
    1.对象时不可迭代访问的。尝试使用for/of循环会throwTypeErrorleto={x:1,y:2,z:3};for(letelementofo){console.log(element);}//throwtypeError2.可以使用Object.keys()方法实现对象迭代leto={x:1,y:2,z:3};letkeys="";for(letkofObject.keys(o)){keys+=k;}......
  • JavaScript有几种类型值?能否画出它们的内存图?
    JavaScript有七种原始数据类型和一种引用类型:原始数据类型(PrimitiveDataTypes):存储在栈(Stack)内存中,值直接存储在变量访问的位置。Boolean:true或falseNull:只有一个值null,表示空或不存在的值。Undefined:变量声明了但未赋值时的默认值undefined。Number:所......
  • 【分享】这篇教程助力你成为 JavaScript 糕手!(十一)
    第十一章:异步编程11.1异步编程的概念在JavaScript中,异步编程是一种非常重要的编程模式,它用于处理那些不会立即完成的操作,而是在一段时间后才会返回结果的任务。传统的同步编程模式下,代码是按照从上到下的顺序依次执行的,每一行代码都必须等待前一行代码执行完毕后才会......
  • 前端必知必会-JavaScript 按位运算
    文章目录JavaScript按位运算JavaScript使用32位按位操作数JavaScript按位与JavaScript按位或JavaScript按位异或JavaScript按位与(&)JavaScript按位或(|)JavaScript按位异或(^)JavaScript按位非(~)JavaScript(零填充)按位左移(<<)JavaScript(零填充)右移......
  • 前端必知必会-JavaScript 运算符优先级
    文章目录JavaScript运算符优先级运算符优先级值增量运算符算术运算符移位运算符关系运算符比较运算符按位运算符逻辑运算符条件(三元)运算符赋值运算符总结JavaScript运算符优先级运算符优先级描述算术表达式中执行运算的顺序。乘法(*)和除法(/)的优先级高于......
  • [Javascript] Is Array? Symbol.toStringTag
    Duringthepast,thiswasaworkingsolutionfunctionisArray(obj){returnObject.prototype.toString.call(obj)==='[objectArray]'} Butnowitdoesn'tworkanymore,thereasonisbecauseES6hasabuilt-inSymbol:constobj={[......
  • 【JavaScript】关于对象解构赋值
    概念对象解构赋值是JavaScript中的一种语法特性,它提供了一种简洁的方式来从对象中提取属性值,并将这些值赋给变量。这种方式使得代码在处理对象数据时更加直观和高效,避免了传统的通过对象属性访问(如object.property)来逐个获取和赋值的繁琐过程。对象就像是一个装满各种......
  • 3的倍数(multiple)
    chuck有一个正整数n,现在他需要把这个正整数拆分为两个正整数x,y,使得满足以下条件:x+y=n(x*y)%3=0请找出有多少种不同的(x,y)满足以上条件。(1,2)和(2,1)是不同的。输入格式:第一行一个正整数n(1<=n<=10^17)。输出格式:一个整数,表示不同的个数。输入样例:......
  • 第十章 JavaScript的应用
     JavaScript概述与核心特性深度解析在当今的网页开发领域,HTML和CSS技术构建出了信息丰富且样式美观的网页框架,但在交互性方面却存在明显局限。JavaScript的出现恰好弥补了这一短板,作为一种强大的脚本语言,它为网页注入了灵动的交互性与绚丽的特效,极大地提升了用户体验。......
  • 第十章 JavaScript的课后练习
    1.在网页中显示一个工作中的“数字时钟”。<!DOCTYPEhtml><html> <head> <metacharset="utf-8"> <title>数字时钟</title> <styletype="text/css"> div{ font-size:150px; text-align:center; } .div{......