JavaScript题型第二天

本文讨论了CSR与SSR在网页加载速度和交互能力上的差异,以及在微前端中如何实现应用间的js执行环境和CSS样式隔离。通过沙箱机制控制微应用对全局环境的影响,解释了特定代码示例中的行为。

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

一,CSR和SSR的区别

对于html加载,以React为例,我们习惯的做法是加载文件中的React代码,去生成页面渲染,同时,js也完成页面交互事件的绑定,这样的一个过程是CSR(客户端渲染)

但如果这个js文件比较大,加载起来会比较慢,到达页面渲染的时间就会比较长,导致首屏白屏,这时候,SSR(服务端渲染)就会出来:由服务端直接生成html内容返回给浏览器渲染首屏内容

但是服务端渲染的页面交互能力有限,如果要实现复杂交互,还是要通过引入js文件来辅助实现,我们把页面展示内容和交互写在一起,让代码执行两次,这种方式叫做同构

CSR和SSR区别在于,最终的html代码是由客户端添加还是由服务端添加

二,微前端中的应用隔离是什么,一般怎么实现

应用隔离分为:

主应用和微应用,微应用和微应用之间的js执行环境隔离,css样式隔离

css样式隔离

当主应用和微应用同屏渲染时,就可能会有一些样式相互污染,如果要彻底隔离css污染,可以采用css module或者命名空间的方式,给每个微应用模块以特定前缀,即可保证不会互相干扰,可以采用webpack的postcss插件,在打包时添加特定的前缀

而微应用与微应用之间的css隔离就非常简单,在每次应用加载时,将该应用所有的link和style内容进行标记,在应用卸载后,同步卸载页面上对应的linek和style即可

js执行环境隔离

每当微应用的js被加载运行时,它的核心实际是对全局对象window的修改以及一些全局事件的改变

为消除这种影响,需要采用沙箱机制

核心是让局部的js运行时,对外部对象的访问和修改处在可控范围内

三,下面代码输出

for(var i = 0 ; i <= 5; i++){
setTimeout(function timer(){
console.log(i)
},0)
}

输出5个6

因为setTimeout为宏任务,由于js中单线程eventLoop机制,在主线程同步任务执行完成后才去执行宏任务,因此循环结束后,setTimeout中的回调才会依次执行,输出会向上查找,发现i是,循环结束,i变成6,因此会全部输出6

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

撼地小牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值