1. 问题描述

文件大小 部署环境 平均上传速度
5M 外网 28s-36s
5M 公司局域内网 秒传,很快

2. 问题分析 
在网上搜索“测速网”测试了一下公司外网的带宽情况: 
上传带宽 = 1.04 Mbps = 133.2 kb/s 
下载带宽 = 1.25 Mbps = 160 kb/s

单位换算: 
1 Mbps(带宽速率)= 128 kb/s 
1M = 1024 kb

为什么公司内网环境的上传那么快呢?由于对网络不是很了解,我特意问了一下公司的网络管理员辉哥,我们公司办理的企业级100M光纤带宽。所以在公司的局域内网环境下,上传速率和下载速率都是100Mbps。因为是光纤,所以上传速率和下载速率是对等的,都是100Mbps。所以在内网环境的上传,是很快的。我们来算一下内网的上传: 
5M的上传文件,大小 = 5 * 1024 = 5120 KB; 
100Mbps = 100 * 128 KB/S 
上传用时 = 5120/12800 = 0.4S

为什么在外网上传就特别慢呢?因为公司对员工访问外网做了带宽限制,大概1-2Mbps的带宽; 
按照3Mbps的带宽我们来算一下公司的外网上传: 
5M上传文件, 大小 = 5*1024 = 5120 KB 
公司外网上传带宽 = 2 Mbps = 2* 128 KB/S = 256 KB/s 
上传用时 = 5120/256 = 20s 
由于上传带宽是300多号员工共享的,实际上传带宽会低于2 Mbps,所以导致外网环境的上传大概30s左右。

3. 带宽知识普及 
通常我们在运营商办理的带宽种类有如下集几种:

常见宽带 理论最高速率(Mbps) 理论最高速率(KB/S) 常见下载速率(供参考)
1M 1 Mbps 128 KB/S 77~128 KB/S
2M 2 Mbps 256 KB/S 154~256 KB/S
3M 3 Mbps 384 KB/S 231~384 KB/S
4M 4 Mbps 512 KB/S 307~512 KB/S
6M 6 Mbps 620 KB/S 462~620 KB/S
8M 8 Mbps 1024 KB/S 614~1024 KB/S
10M 10 Mbps 1280 KB/S 768~1280 KB/S
30M 30 Mbps 3840 KB/S 2560~3840 KB/S
50M 50 Mbps 6400 KB/S 3840~6400 KB/S
100M 100 Mbps 12800 KB/S 7680~12800 KB/S

从列表可见,我们【使用时的真实速率】通常达不到运营商支持的【最高速率】。 
运营商所谓的【最高速率】通常指我们使用的【下载速率】。为什么没有【上传速率】呢?

(1)上传带宽不一定等于下载带宽。

  • 宽带是ADSL接入(电话线接入)的话,由于ADSL使用的技术是一种不对称数字用户线,所以ADSL是不对等带宽,通常上传速度只有下载速度的1/8左右,可以说是国际标准了。
  • 光纤接入带宽的话,技术上是利用两条光纤分别负责上行和下行。所以原则上,上传下载速度是对等的。实际上呢,光纤用户依然被宽带运营商限制了上行带宽,即使是光纤入户的百兆带宽,上传带宽也不足4M。

(2)为什么宽带运营商要限制家庭用户的上行宽带 
主要原因可能就是为了省钱,毕竟公司都是以利益为主嘛。网民长期以来的网络使用习惯,使他们已经习惯了上行带宽慢,而且也没有用户死气白咧的要求提高上行带宽。如果宽带运营商给予上下行相同的速度,会造成资源浪费。但如果把上行带宽资源销售给机房的企业专线租用客户,则会获得更多的利益。托管在机房的服务器需要大量上行带宽,并不需要太多下行带宽。而且带宽价格非常昂贵,往往机房10M上行专线租用的费用就是家庭100M费用的5、6倍。由此看来,运营商很可能把亏欠我们的上行带宽拿去高价卖给企业机房了,你大爷!

4. 总结 
综上所述,国内的上行带宽(光纤接入)最大值4Mbps,然而通常也就 2Mbps 左右的上行带宽。 
所以互联网上传文件,很慢的。不要再盲目的改你的代码了,没用的。

互联网开发-web文件上传性能问题的更多相关文章

  1. web文件上传大小限制

    最近在项目中遇到上传文件,对上传文件的大小需要进行限制,这里学习和整理了一下一些常规的文件大小限制的方法. 一般分为两种方式,一种是服务器端判断文件大小进行限制,这种方法的存在明显的缺陷,当用户过多后 ...

  2. Java开发系列-文件上传

    概述 Java开发中文件上传的方式有很多,常见的有servlet3.0.common-fileUpload.框架.不管哪种方式,对于文件上传的本质是不变的. 文件上传的准备 文件上传需要客户端跟服务都 ...

  3. servlet web文件上传

    web文件上传也是一种POST方式,特别之处在于,需设置FORM的enctype属性为multipart/form-data. 并且需要使用文件域. servlet的代码比较关键是这几句: // 使用 ...

  4. Java Web文件上传

    参考资料:http://www.cnblogs.com/xdp-gacl/p/4200090.html 一.问题描述 Java Web文件上传需要借助一些第三方库,常用的是借助Apache的包,有两个 ...

  5. WEB文件上传下载功能

    WEB文件上传下载在日常工作中经常用到的功能 这里用到JS库 http://files.cnblogs.com/meilibao/ajaxupload.3.5.js 上传代码段(HTML) <% ...

  6. Web 文件上传 目录

    0. SpringMVC -- 梗概--源码--贰--上传 1. Web上传文件的原理及实现 2. Web文件上传方法总结大全 3. SpringMVC 文件上传配置,多文件上传,使用的Multipa ...

  7. Java Web文件上传原理分析(不借助开源fileupload上传jar包)

    Java Web文件上传原理分析(不借助开源fileupload上传jar包) 博客分类: Java Web   最近在面试IBM时,面试官突然问到:如果让你自己实现一个文件上传,你的代码要如何写,不 ...

  8. SpringBoot | 第十七章:web应用开发之文件上传

    前言 上一章节,我们讲解了利用模版引擎实现前端页面渲染,从而实现动态网页的功能,同时也提出了兼容jsp项目的解决方案.既然开始讲解web开发了,我们就接着继续往web这个方向继续吧.通常,我们在做we ...

  9. SpringBoot --web 应用开发之文件上传

    原文出处: oKong 前言 上一章节,我们讲解了利用模版引擎实现前端页面渲染,从而实现动态网页的功能,同时也提出了兼容jsp项目的解决方案.既然开始讲解web开发了,我们就接着继续往web这个方向继 ...

随机推荐

  1. python取一个字符串中最多出现次数的词

    #-*- coding:utf-8 -*- #取一个字符串中最多出现次数的词 import re from collections import Counter my_str = "&quo ...

  2. 关于contentprovider的几个问题

    说说ContentProvider与Android数据存储的关系? contentprovider是程序之间共享数据的唯一方式,android中没有公共数据区域的说法,每个进程启动都是不同的用户,与P ...

  3. solr :term 查询, phrase查询, boolean 查询

    搜索总体有:term 查询, phrase查询, boolean 查询 1. SOLR搜索覆盖度和准确度保证的三个搜索方式: 保证准确率: AND: Search for two different ...

  4. html标签的显示模式(块级标签,行内标签,行内块标签)(转)

    html标签的显示模式(块级标签,行内标签,行内块标签)   今天讲课的时候,讲到了html中的标签的显示模式,大致分为块级标签和行内标签.那么初学者在刚使用标签的时候会发现有些属性在一些标签上不起作 ...

  5. C++面向对象类的实例题目六

    问题描述: 编写一个程序计算两个给定长方形的面积,其中在设计类成员函数addarea()(用于计算两个长方形的总面积)时使用对象作为参数. 程序代码: #include<iostream> ...

  6. Condition实现多线程顺序打印

    Condition实现多线程顺序打印: import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.R ...

  7. linux中的管道命令

    很有用的一个命令,用法如下: A | B 是把A命令的输出作为B命令的输入. 比如我想查看一下我在终端输入过的命令,可以这样: history | less

  8. MVC Controller传值到View的几种方式总结

    Controller中的代码如下 var bingo = new Web1.Models.Bingo() { Title = "测试", desc = "嘻嘻" ...

  9. Android按钮单击事件处理的几种方法(Android学习笔记)

    方法一:匿名内部类实现按钮事件处理 this.btnButton=(Button)super.findViewById(R.id.mybtn); this.btnButton.setOnClickLi ...

  10. dubbo心跳机制 (2)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 来看一下HeaderExchangeServer.this.getChannels():   1     p ...