页面上的图片太多?快试试懒加载!

          今天在项目开发的过程中,调用后台提供的一个接口的时候,返回了93张图片,并且每张图片都是700*700,真叫人头大!结果自然是打开页面的时候卡的比较严重。显然,作为一名合格的前端工程师,我们必须采取一些措施,以提高用户体验。 一方面向后台同事反应问题,提醒他们将图片的规格修改成比较小的,另一方面,我们前端也可以通过懒加载来减缓服务器压力,优化网页性能。就算是后台提供的图片很小,一下子加载那么多图片,用户的手机也会受不了,卡顿就在所难免了。 下面介绍一种比较简单的懒加载方案:使用echo.js来实现懒加载,优化多图片网页的性能。

 使用方法:

 html部分:

<img class="lazy" src="/New_bbc/public/wap/static/images/loading.gif"  
data-echo='+d.data[i].imgurl+' alt='+d.data[i].name+' />
注:data-echo 是真正要加载进去的图片  src可以用占位图代替 这里图片路径按照自己的文件夹的来写

css部分:

.lazy{width:100%;height:100%;background: url('../images/loading.gif') center center no-repeat;}


js部分:先引入文件

<script type="text/javascript" src="__STATIC__/js/echo.js"></script>
//设置懒加载的参数
  echo.init({
    offset: 740,//离可视区域多少像素的图片可以被加载
   throttle: 150 //图片延时多少毫秒加载
  }); 

OK,自此我们就完成了使用echo.js来实现懒加载的过程,懒加载就是这么简单。


太好了!你已经成功 **连接到了串口 COM3**,并且没有报错 👏 现在的问题是: > ✅ 串口打开了(`🟢 成功打开串口 COM3`) > ❌ 但 **没有看到任何数据输出**(比如 `📦 收到原始数据: ...`) > ❌ 前端也没有反应 → 说明:**设备没发数据?或发的数据格式不对?** --- ## 🔍 当前状态分析 | 状态 | 结论 | |------|------| | `Opening COM3` → 成功 | 串口驱动正常,物理连接 OK ✅ | | 没有 `data` 事件触发 | 单片机可能:未上电 / 未发送 / 波特率不匹配 / 接线反了 ❓ | | WebSocket 客户端已接入 | 前端能连上来,通信链路 OK ✅ | --- ## ✅ 第一步:确认是否真的收到了数据 我们现在要在 `port.on('data')` 中加日志,看有没有触发。 ### 修改 `openSerialPort()` 函数,在里面加上 `console.log('📦 收到数据')` ```js port.on('data', (chunk) => { console.log('📦 收到原始数据:', Array.from(chunk).map(b => b.toString(16).padStart(2, '0')).join(' ')); }); ``` 完整替换如下部分: ```js // ========== 🔌 串口操作 ========== function openSerialPort() { if (reconnectInterval) return; console.log(`📡 正在尝试连接串口 ${SERIAL_PORT} @ ${BAUD_RATE}bps...`); try { port = new SerialPort({ path: SERIAL_PORT, baudRate: BAUD_RATE, dataBits: 8, stopBits: 1, parity: 'none' }); port.on('open', () => { console.log(`🟢 成功打开串口 ${SERIAL_PORT}`); if (reconnectInterval) clearInterval(reconnectInterval); reconnectInterval = null; }); // ✅ 关键:监听收到的数据 port.on('data', (chunk) => { console.log('📦 收到原始数据:', Array.from(chunk).map(b => b.toString(16).padStart(2, '0')).join(' ')); }); port.on('error', (err) => { console.error('🔴 串口错误:', err.message); closeAndReconnect(); }); port.on('close', () => { console.log('🔌 串口已关闭'); closeAndReconnect(); }); } catch (err) { console.error('❌ 打开串口失败:', err.message); closeAndReconnect(); } } ``` 然后重新运行: ```bash npx electron . ``` --- ## 🧪 测试场景一:如果仍然 **没有任何 `📦 收到原始数据` 输出** 👉 说明:你的电脑根本没收到任何字节! ### 可能原因及解决方案: | 原因 | 检查方法 | 解决方案 | |------|----------|-----------| | 🔌 单片机没供电/没烧录程序 | 观察板子 LED 是否亮?上传测试程序 | 重新下载固件 | | 📏 波特率不匹配 | 单片机发的是 115200,你设的是 9600 → 对不上 | 改成 `115200` 试试 | | 🧵 TX/RX 接反了 | 板子 TX 接电脑 RX,你却接成 TX→TX | 交叉连接:板子 TX → USB转TTL RX | | 💣 驱动问题(CH340/CP210x) | 设备管理器显示感叹号 | 下载 CH340 驱动 | | 🧩 使用的是 USB HUB 或延长线 | 供电不足或信号弱 | 直插主板 USB 口 | --- ## ✅ 第二步:尝试修改波特率为 115200(常见于 Arduino) 很多开发板默认用高波特率通信。 ### 修改 `config.json`: ```json { "serialPort": "COM3", "baudRate": 115200, "websocketPort": 8080, "windowWidth": 1200, "windowHeight": 800, "fullscreen": true, "kiosk": true } ``` 保存后重启 Electron,观察是否有数据? --- ## ✅ 第三步:用串口助手验证硬件是否正常工作 推荐工具:**[XCOM](https://xcom.serial-communication.com/)**(国产免费、绿色免装) ### 使用步骤: 1. 下载 XCOM 并打开 2. 设置: - 串口:`COM3` - 波特率:`9600` 或 `115200` - 数据位:8 - 停止位:1 - 校验:无 3. 点击「打开串口」 4. 观察「接收区」是否有十六进制数据显示? 👉 如果 XCOM 也收不到数据 → 问题出在 **硬件端** --- ## ✅ 第四步:给单片机上传一个测试程序(以 Arduino 为例) 确保它正在发送数据。上传以下代码到你的 Arduino: ```cpp // Arduino 测试程序:每 200ms 发送一个 9 字节摇杆包 void setup() { Serial.begin(115200); // 注意这里波特率 } void loop() { // 模拟一组数据:X=300, Y=400, 按钮按下 byte frame[9] = { 0xFF, // 起始符 0x01, 0x2C, // X = 300 (0x012C) 0x01, 0x90, // Y = 400 (0x0190) 0x00, 0x00, // Z 和预留 0x20 // 按钮按下 }; // 计算校验和:前8字节和 +1 取模256 byte sum = 0; for (int i = 0; i < 8; i++) sum += frame[i]; frame[8] = (sum + 1) % 256; Serial.write(frame, 9); delay(200); } ``` > ⚠️ 注意:`Serial.begin(115200)` 必须和你在 `config.json` 中设置的一致! 上传后,再运行 Electron,你应该会看到: ``` 📦 收到原始数据: ff 01 2c 01 90 00 00 20 xx ``` → 然后自动解析并推送到前端! --- ## ✅ 第五步:检查前端是否监听了 WebSocket 消息 在浏览器中按 `F12` 打开控制台,看看有没有收到消息。 ### 在 `index.html` 或前端 JS 中添加调试: ```js const ws = new WebSocket('ws://localhost:8080'); ws.onmessage = function(event) { const data = JSON.parse(event.data); console.log('🎮 收到摇杆数据:', data); // 可视化测试 if (data.type === 'joystick') { document.getElementById('output').innerHTML = ` X: ${data.x}<br> Y: ${data.y}<br> Button: ${data.btn ? 'Pressed' : 'Released'} `; } }; ``` 并在页面加个 div 显示结果: ```html <div id="output" style="color: white; font-size: 20px;">等待数据...</div> ``` --- ## ✅ 总结排查流程图 ```text [串口打开成功] ↓ 有 data 事件? ↓ 是 ↓ 否 解析帧 → 推送前端 → 检查: - 波特率? - TX/RX 接反? - 单片机是否运行? - 用 XCOM 能收到吗? ``` --- ## 📌 下一步请你回复: 1. 加了 `port.on('data')` 日志后,有没有打印出任何 `📦 收到原始数据`? 2. 你用的是什么开发板?(Arduino UNO?STM32?自定义?) 3. 单片机程序里 `Serial.begin(...)` 设置的是多少波特率? 4. 用 XCOM 或其他串口助手能看到数据吗? 我将根据答案告诉你: - 是改波特率? - 还是重烧程序? - 还是换线? ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值