当前位置: 首页 > news >正文

wordpress企业网站入门嘉兴网站建设多少钱

wordpress企业网站入门,嘉兴网站建设多少钱,国内新闻最新消息10条简短2022,中国交通建设集团官方网站文章目录1. 分批上传(Batch Upload)2. 并发控制3. 图片压缩4. 进度显示与状态管理5. 暂停/恢复功能6. 预加载与预览7. 错误处理与重试机制8. Web Workers优化9. 使用现代API10. 内存管理1. 分批上传(Batch Upload) 将大量图片分成…

文章目录

    • 1. 分批上传(Batch Upload)
    • 2. 并发控制
    • 3. 图片压缩
    • 4. 进度显示与状态管理
    • 5. 暂停/恢复功能
    • 6. 预加载与预览
    • 7. 错误处理与重试机制
    • 8. Web Workers优化
    • 9. 使用现代API
    • 10. 内存管理

1. 分批上传(Batch Upload)

将大量图片分成小批次上传,而不是一次性全部上传:

async function batchUpload(files, batchSize = 5) {for (let i = 0; i < files.length; i += batchSize) {const batch = files.slice(i, i + batchSize);await Promise.all(batch.map(file => uploadFile(file)));}
}

2. 并发控制

限制同时上传的文件数量,避免浏览器连接数限制和服务器压力:

class UploadManager {constructor(concurrency = 3) {this.concurrency = concurrency;this.running = 0;this.queue = [];}async upload(file) {return new Promise((resolve, reject) => {this.queue.push({ file, resolve, reject });this.process();});}async process() {if (this.running >= this.concurrency || this.queue.length === 0) {return;}this.running++;const { file, resolve, reject } = this.queue.shift();try {const result = await this.uploadFile(file);resolve(result);} catch (error) {reject(error);} finally {this.running--;this.process();}}
}

3. 图片压缩

在上传前对图片进行压缩,减小文件大小:

function compressImage(file, quality = 0.8) {return new Promise((resolve) => {const canvas = document.createElement('canvas');const ctx = canvas.getContext('2d');const img = new Image();img.onload = () => {canvas.width = img.width;canvas.height = img.height;ctx.drawImage(img, 0, 0);canvas.toBlob(resolve, 'image/jpeg', quality);};img.src = URL.createObjectURL(file);});
}

4. 进度显示与状态管理

提供清晰的上传进度反馈:

function uploadWithProgress(file, onProgress) {const xhr = new XMLHttpRequest();xhr.upload.addEventListener('progress', (event) => {if (event.lengthComputable) {const percentComplete = (event.loaded / event.total) * 100;onProgress(percentComplete);}});// 配置并发送请求xhr.open('POST', '/upload');const formData = new FormData();formData.append('file', file);xhr.send(formData);
}

5. 暂停/恢复功能

实现断点续传功能,支持暂停和恢复:

class ResumableUpload {constructor(file) {this.file = file;this.chunkSize = 1024 * 1024; // 1MB chunksthis.chunks = Math.ceil(file.size / this.chunkSize);this.uploadedChunks = new Set();}async uploadChunk(chunkIndex) {const start = chunkIndex * this.chunkSize;const end = Math.min(start + this.chunkSize, this.file.size);const chunk = this.file.slice(start, end);// 上传分片逻辑await this.sendChunk(chunk, chunkIndex);this.uploadedChunks.add(chunkIndex);}async resume() {for (let i = 0; i < this.chunks; i++) {if (!this.uploadedChunks.has(i)) {await this.uploadChunk(i);}}}
}

6. 预加载与预览

在上传前提供图片预览功能:

function previewImages(files) {const previewContainer = document.getElementById('preview');Array.from(files).forEach(file => {if (!file.type.startsWith('image/')) return;const reader = new FileReader();reader.onload = (e) => {const img = document.createElement('img');img.src = e.target.result;img.style.maxWidth = '200px';img.style.maxHeight = '200px';previewContainer.appendChild(img);};reader.readAsDataURL(file);});
}

7. 错误处理与重试机制

实现错误处理和自动重试机制:

async function uploadWithRetry(file, maxRetries = 3) {for (let i = 0; i <= maxRetries; i++) {try {return await uploadFile(file);} catch (error) {if (i === maxRetries) throw error;// 指数退避策略await new Promise(resolve => setTimeout(resolve, 2 ** i * 1000));}}
}

8. Web Workers优化

对于图片处理等计算密集型任务,使用Web Workers避免阻塞主线程:

// main.js
const worker = new Worker('image-processor.js');
worker.postMessage({ file, quality: 0.8 });
worker.onmessage = (e) => {// 处理压缩后的图片uploadFile(e.data.compressedFile);
};// image-processor.js
self.onmessage = async (e) => {const { file, quality } = e.data;const compressedFile = await compressImage(file, quality);self.postMessage({ compressedFile });
};

9. 使用现代API

利用现代浏览器提供的API提升性能:

// 使用 Promise.allSettled 处理部分失败的情况
async function uploadAll(files) {const uploadPromises = Array.from(files).map(file => uploadFile(file));const results = await Promise.allSettled(uploadPromises);const successful = results.filter(result => result.status === 'fulfilled');const failed = results.filter(result => result.status === 'rejected');return { successful, failed };
}

10. 内存管理

及时释放不需要的对象和URL引用:

function cleanupObjectURL(url) {URL.revokeObjectURL(url);
}// 在图片预览后,适时清理
const objectURL = URL.createObjectURL(file);
// 使用完后
cleanupObjectURL(objectURL);
http://www.dtcms.com/a/573579.html

相关文章:

  • 国外网站为啥速度慢为企业规划网络促销方案
  • 25微软MOS认证考试|时间 + 科目 + 备考攻略全梳理
  • 数控直流电流源设计指南:基于MCU+FPGA的精密控制与低功耗优化
  • mlir 编译器学习笔记之五 -- 开发避坑
  • 对接网站建设是什么意思网站的实用性
  • 深圳网站优化页面全功能多国语言企业网站
  • web开发之前后端分离的优势
  • 外贸网站推广平台有哪些网站建设公司南京
  • Linux 常用命令大全:从入门到精通
  • Linux-通过端口转发访问数据库
  • IPD PDT 团队月例会
  • 网站如何被百度收录之探索笔记
  • 番茄小说畅听红果短剧提示“低版本不安全“解决方案 【巨魔篇】
  • 付网站建设服务费什么科目查关键词排名软件
  • k8s——service详解
  • 【高阶数据结构】map,set,multiset,multimap的使用和介绍
  • Spring Boot + Spring Security ACL实现对特定领域对象的细粒度权限控制
  • 大模型应用03 || 函数调用 Function Calling || 概念、思想、流程
  • 从 Spring Boot 到 NestJS:模块化设计的哲学差异
  • WebSocket 使用
  • 郑州网络营销网站app上架应用市场需要什么条件
  • 百度网站官方认证怎么做郑州网站建设贴吧
  • Spring定时任务cron表达式解析
  • 做网站通过什么赚钱wordpress 主题 下载
  • MATLAB视觉检测系统详细介绍
  • 网络工程基础
  • 【NXP i.MX91】 RT-Linux移植
  • 怕随身 WiFi 虚量断连?格行随身wifi拆箱测评:1500G 真不虚标?
  • 门户网站建设摘要强大的wordpress瀑布流主题
  • Kubernetes1.23版本搭建(三台机器)