原生图片懒加载以及node起服务

谷歌浏览器原生懒加载
本文介绍谷歌高版本浏览器支持的原生图片懒加载功能,只需在img标签中添加loading=lazy属性即可实现。但需注意,必须为图片设置宽高,否则懒加载将失效。文章提供了一个示例代码,并附上了查看demo的方法。

谷歌高版本浏览器支持原生图片懒加载

  1. 只需要加上一个loading="lazy"属性
    	<img src="./images/1.png" alt="" loading="lazy">
    
  2. 必须给图片设置宽高,不然不会懒加载,浏览器无法计算出当前浏览器高度需要预加载多少张照片
  3. 应该起服务查看,本地查看不行

git地址

相关代码已经上传到git上,如果需要查看demo,可直接clone查看

参考链接(更详细可查看张鑫旭大神的文章)

<think>我们正在讨论Node.js中的懒加载(LazyLoading)。懒加载是一种设计模式,它延迟了对象的创建、数据的计算或其他昂贵操作的执行,直到真正需要它们的时候。在Node.js中,懒加载通常用于模块加载、资源初始化等场景,以提高应用的启动性能和减少不必要的资源消耗。###Node.js懒加载定义懒加载(LazyLoading),也称为延迟加载,是一种将资源的加载或初始化推迟到实际需要时才执行的策略。在Node.js中,懒加载常用于模块系统,即只有在真正使用到某个模块时,才去加载和执行该模块的代码。这与Node.js默认的同步加载方式(在require时立即加载并执行整个模块)形成对比。###懒加载实现方式在Node.js中实现懒加载主要有以下几种方式:####1.使用函数封装将需要懒加载的模块放在一个函数内部,通过调用该函数来触发加载。这样,模块的加载会延迟到函数被调用时。```javascript//懒加载函数封装示例functionlazyLoadModule(){//在需要时才加载模块constmodule=require('./module');returnmodule.doSomething();}//当调用lazyLoadModule时,才会加载'./module'模块lazyLoadModule();```####2.结合`import()`动态导入(ES模块)在Node.js中支持ES模块后,可以使用`import()`函数进行动态导入,实现懒加载。`import()`返回一个Promise,可以在需要时异步加载模块。```javascript//动态导入示例(异步懒加载)asyncfunctionuseLazyModule(){constmodule=awaitimport('./module.mjs');//注意:动态导入适用于ES模块module.doSomething();}useLazyModule();```####3.使用代理或工厂模式通过代理对象或工厂函数来封装模块的加载,在第一次访问时加载模块并缓存。```javascript//工厂模式实现懒加载functioncreateLazyModule(){letmoduleCache=null;return{doSomething:function(){if(!moduleCache){moduleCache=require('./module');}returnmoduleCache.doSomething();}};}constlazyModule=createLazyModule();//直到调用doSomething时,才会加载模块lazyModule.doSomething();```####4.使用`Object.defineProperty`通过`Object.defineProperty`在对象上定义getter,当访问属性时才加载模块。```javascriptconstlazyLoader={getmodule(){//当访问module属性时,加载模块if(!this._module){this._module=require('./module');}returnthis._module;}};//当访问lazyLoader.module时,才会加载模块lazyLoader.module.doSomething();```###懒加载的优势与注意事项**优势**:-提高应用启动速度:避免在启动时加载所有模块。-节省资源:只加载实际使用的模块,减少内存占用。-按需加载:特别适用于大型应用中某些可能不会立即使用到的功能。**注意事项**:-避免过度使用:懒加载可能会导致运行时的性能波动(当首次加载模块时)。-错误处理:懒加载的模块如果在加载时出错,可能会在应用运行时才暴露问题,需要妥善处理错误。-循环依赖:懒加载可能改变模块加载顺序,需注意循环依赖问题。###总结懒加载Node.js中是一种优化技术,特别适合在大型应用或需要快速启动的场景中使用。开发者可以根据具体需求选择不同的实现方式。§§相关问题§§1.Node.js中懒加载和预加载(EagerLoading)的主要区别是什么?2.在Node.js中使用动态导入(`import()`)时有哪些注意事项?3.懒加载模式在哪些场景下最为适用?4.如何避免懒加载可能导致的循环依赖问题?</think>### Node.js懒加载详解 #### **定义** 懒加载(Lazy Loading)是一种延迟加载资源的策略,在Node.js中特指**推迟模块加载直到真正需要时执行**。这与默认的同步`require()`机制(模块在首次引用时立即加载)形成对比,核心目标是: 1. **优化启动性能**:减少初始化时的模块加载量 2. **降低内存开销**:仅加载实际使用的模块 3. **避免循环依赖**:动态加载可打破模块间的强依赖链 4. **按需加载**:特别适合大型应用中非核心功能模块[^1][^5] --- #### **实现方式** ##### **1. 动态`require()`封装** ```javascript // 懒加载工具函数 function lazyRequire(modulePath) { let module = null; return () => { if (!module) module = require(modulePath); return module; }; } // 使用示例 const getDbModule = lazyRequire('./database'); router.get('/data', () => { const db = getDbModule(); // 实际调用时才加载模块 db.query(...); }); ``` **原理**:通过闭包延迟执行`require()`,首次调用时加载并缓存模块[^5] ##### **2. ES动态导入(Node.js v12+推荐)** ```javascript // 异步懒加载 async function loadFeature() { const { advancedFeature } = await import('./advanced-feature.mjs'); advancedFeature(); } // 按条件加载 if (user.isPremium) { loadFeature(); // 仅高级用户触发加载 } ``` **优势**: - 原生支持ES模块 - 返回Promise实现异步加载 - 避免阻塞事件循环[^1][^4] ##### **3. 代理模式(Proxy)** ```javascript const lazyModule = new Proxy({}, { get(target, prop) { const module = require('./heavy-module'); return module[prop]; } }); // 实际访问属性时才加载 lazyModule.calculate(); ``` ##### **4. 工厂函数 + 缓存** ```javascript const loaders = new Map(); function loadModule(name) { if (!loaders.has(name)) { loaders.set(name, require(name)); } return loaders.get(name); } // 业务逻辑中动态调用 const utils = loadModule('lodash'); ``` --- #### **性能对比** | 加载方式 | 加载时机 | 内存占用 | 适用场景 | |----------------|------------------|----------|-------------------| | 标准`require()`| 初始化同步加载 | 高 | 核心基础模块 | | 懒加载 | 运行时按需加载 | 低 | 非核心/重型模块 | --- #### **最佳实践** 1. **重型库处理**:对如`ExcelJS`、`PDFKit`等大型库使用懒加载 ```javascript const generateReport = async () => { const excel = await import('exceljs'); // ...生成报表 } ``` 2. **路由级分割**:Web框架中按路由加载模块 ```javascript // Express示例 app.get('/admin', (req, res) => { import('./admin-panel').then(module => module.handler(req, res)); }); ``` 3. **避免陷阱**: - 循环依赖需用`module.parent`检测调用栈 - 动态导入路径需用`path.resolve()`处理相对路径 - 浏览器环境需配合Webpack等打包工具[^2][^3] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值