Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 加快网站建设';将多个图像从客户端浏览器上载到服务器_Javascript_Php - Fatal编程技术网

Javascript 加快网站建设';将多个图像从客户端浏览器上载到服务器

Javascript 加快网站建设';将多个图像从客户端浏览器上载到服务器,javascript,php,Javascript,Php,我知道有很多方法可以将多个图像从浏览器上传到服务器,而且上传速度取决于服务器和网络的速度。 标准方法是: 单击网站中的上载按钮->选择要上载的图像 ->点击提交按钮将所有图片上传到服务器(提示用户“请稍候)->上传成功 但就编码部分而言,我只是想知道是否有一种更快的方法可以有效地将图像从客户端设备上传到服务器?(使用Javascript和php) 目前我正在做的是首先“削减”客户端的图像,然后将图像发送回服务器。 但这是非常缓慢的,因为javascript需要时间来“减少”图像的大小。 通过“削

我知道有很多方法可以将多个图像从浏览器上传到服务器,而且上传速度取决于服务器和网络的速度。 标准方法是:

单击网站中的上载按钮->选择要上载的图像 ->点击提交按钮将所有图片上传到服务器(提示用户“请稍候)->上传成功

但就编码部分而言,我只是想知道是否有一种更快的方法可以有效地将图像从客户端设备上传到服务器?(使用Javascript和php)

目前我正在做的是首先“削减”客户端的图像,然后将图像发送回服务器。 但这是非常缓慢的,因为javascript需要时间来“减少”图像的大小。 通过“削减”,我的意思是使图像的宽度和高度更小。 有没有更快的方法


(一些javascript和php编码示例也会有所帮助。)

在这种情况下,如果停止缩小图像大小,整个过程可能会更快

图像有多大,宽度/高度和大小(mb,kb)? 上传一张图片需要多长时间? 你为什么要把图像剪下来


我认为javascript中的某些内容不正确-这是一种方法,在上传图像之前,使用画布和文件API调整图像大小。

这是一个很好的解决方案,它在上传之前减小了图像的大小


你没有说你是否反对使用jQuery,如果你反对的话,你可能会找到一个与之等价的纯JavaScript解决方案。

简短回答:,JavaScript不慢,PHP也不慢

如果图像很大(几兆字节),则需要一些时间才能在javascript/php中裁剪/调整图像大小。这是无法避免的

我认为您存在性能问题,因为:

  • 您正在同时上载多个图像,并且
  • 其中一些是大的(以兆字节计)
  • 在上传图像之前考虑优化图像。我建议您使用,它可以在不改变图像质量的情况下减小图像的大小(loseless模式)

    也可以考虑用块来上传图像,即:

  • 允许您跟踪上载进度
  • AJAX驱动
  • 有许多区块上传插件,下面是其中之一:


    最后但并非最不重要的一点,看看Krkun.IO本身,也许你在加速图像上传方面学到了一些东西。

    < P>我想,即使你在一天结束的时候发现一个更好的优化算法,如果我们谈论手机,你也应该认为网络可能相当慢,CPU也可以。我的建议是尝试一下,可能会很有帮助

    web工作人员在后台独立于用户交互运行脚本,这对于避免对用户造成影响以及在后台管理图像处理和上载非常有用

    两大优势:

    • 您可以并行运行多个线程/web Worker
    • web工作人员不会阻止主线程和用户体验

    优点不仅可以加快图像处理速度,而且总体上可以避免冻结用户界面。

    我以前必须解决一个类似的问题,尽管我的解决方案是优化客户端的图像,您声称这很慢。因为我自己的经验告诉我,我很想知道你已经尝试了哪些解决方案

    我的解决办法是:

  • 使用读取客户端上的图像。看来没必要
  • 使用缩放和设置质量来优化每个图像。如果由于某种原因此过程变慢,则始终可以使用将负载拆分为多个后台进程。好处是优化过程中的性能问题不会影响您的UI(不会使其卡住)
  • 使用画布将所有图像合并到单个精灵中,并将精灵的元数据(每个图像:x、y、宽度、高度)保存在单独的对象中
  • 使用Canvas
    toDataURL
    提取精灵的base64
  • 将压缩的精灵文件与精灵的元数据一起上载到服务器。在服务器上解压缩文件,然后根据元数据将其拆分并保存到单独的图像文件中
  • 这应该可以利用客户端,在大多数情况下,这将减少您的网络使用和带宽需求

    更新:

    下面是客户端代码的一个示例。 在使用“输入”字段中选择所需数量的文件,然后仅拾取图像、调整图像大小、将图像打包为精灵并导出为包含精灵base64版本以及其中每个图像的元数据的对象。 我将base64数据uri设置为可单击,这样您就可以立即看到结果

    缺少的是服务器端部分,您可以在其中获取对象并使用它。我建议您使用base64数据uri创建一个图像,但任何这样的库都可以做到这一点,然后根据精灵的元数据使用您选择的库裁剪图像,并分别保存每个图像(或其他)


    您可以在客户端进行许多小而酷的优化,以减少服务器上的负载。

    不,上载速度仍然很慢。速度几乎与代码无关。它速度慢的主要原因是图像会占用很多空间。通常高达许多兆字节。如果要上传一个文本字符串进行比较,速度会快得多,因为该文本字符串只有几个字节或千字节。有一种方法可以让这个过程稍微快一点,那就是在上传到服务器之前将图像放在一个压缩的.zip文件夹中。但这仍然需要很长时间。

    让我们试着系统地面对这一挑战!你的任务很简单