精华内容
下载资源
问答
  • 不知不觉,我们已经讲到第五篇了,不知道听到这里,你对于秒杀系统的构建没有形成一些框架的认识,这里我再带你简单回忆下前面的主线。 前面的四篇文章里,我介绍的内容多少都和优化有关: 第一篇介绍了一些指导...

    不知不觉,我们已经讲到第五篇了,不知道听到这里,你对于秒杀系统的构建有没有形成一些框架性的认识,这里我再带你简单回忆下前面的主线。

    前面的四篇文章里,我介绍的内容多少都和优化有关:
    第一篇介绍了一些指导原则;

    第二篇和第三篇从动静分离和热点数据两个维度,介绍了如何有针对性地对数据进行区分和优化处理;

    第四篇介绍了在保证实现基本业务功能的前提下,尽量减少和过滤一些无效请求的思路。

    这几篇文章既是在讲根据指导原则实现的具体案例,也是在讲如何实现能够让整个系统更“快”。我想说的是,优化本身有很多手段,也是一个复杂的系统工程。今天,我就来结合秒杀这一场景,重点给你介绍下服务端的一些优化技巧。

    影响性能的因素

    你想要提升性能,首先肯定要知道哪些因素对于系统性能的影响最大,然后再针对这些具体的因素想办法做优化,是不是这个逻辑?

    那么,哪些因素对性能有影响呢?在回答这个问题之前,我们先定义一下“性能”,服务设备不同对性能的定义也是不一样的,例如CPU主要看主频、磁盘主要看IOPS(Input/Output Operations Per Second,即每秒进行读写操作的次数)。

    而今天我们讨论的主要是系统服务端性能,一般用QPS(Query Per Second,每秒请求数)来衡量,还有一个影响和QPS也息息相关,那就是响应时间(Response Time,RT),它可以理解为服务器处理响应的耗时。

    正常情况下响应时间(RT)越短,一秒钟处理的请求数(QPS)自然也就会越多,这在单线程处理的情况下看起来是线性的关系,即我们只要把每个请求的响应时间降到最低,那么性能就会最高。

    但是你可能想到响应时间总有一个极限,不可能无限下降,所以又出现了另外一个维度,即通过多线程,来处理请求。这样理论上就变成了“总QPS =(1000ms / 响应时间)× 线程数量”,这样性能就和两个因素相关了,一个是一次响应的服务端耗时,一个是处理请求的线程数。

    接下来,我们一起看看这个两个因素到底会造成什么样的影响。

    首先,我们先来看看响应时间和QPS有啥关系。

    对于大部分的Web系统而言,响应时间一般都是由CPU执行时间和线程等待时间(比如RPC、IO等待、Sleep、Wait等)组成,即服务器在处理一个请求时,一部分是CPU本身在做运算,还有一部分是在各种等待。

    理解了服务器处理请求的逻辑,估计你会说为什么我们不去减少这种等待时间。很遗憾,根据我们实际的测试发现,减少线程等待时间对提升性能的影响没有我们想象得那么大,它并不是线性的提升关系,这点在很多代理服务器(Proxy)上可以做验证。

    如果代理服务器本身没有CPU消耗,我们在每次给代理服务器代理的请求加个延时,即增加响应时间,但是这对代理服务器本身的吞吐量并没有多大的影响,因为代理服务器本身的资源并没有被消耗,可以通过增加代理服务器的处理线程数,来弥补响应时间对代理服务器的QPS的影响。

    其实,真正对性能有影响的是CPU的执行时间。这也很好理解,因为CPU的执行真正消耗了服务器的资源。经过实际的测试,如果减少CPU一半的执行时间,就可以增加一倍的QPS。

    也就是说,我们应该致力于减少CPU的执行时间。

    其次,我们再来看看线程数对QPS的影响。

    单看“总QPS”的计算公式,你会觉得线程数越多QPS也就会越高,但这会一直正确吗?显然不是,线程数不是越多越好,因为线程本身也消耗资源,也受到其他因素的制约。例如,线程越多系统的线程切换成本就会越高,而且每个线程也都会耗费一定内存。

    那么,设置什么样的线程数最合理呢?其实很多多线程的场景都有一个默认配置,即“线程数 = 2 * CPU核数 + 1”。除去这个配置,还有一个根据最佳实践得出来的公式:

    线程数 = [(线程等待时间 + 线程CPU时间) / 线程CPU时间] × CPU数量

    当然,最好的办法是通过性能测试来发现最佳的线程数。

    换句话说,要提升性能我们就要减少CPU的执行时间,另外就是要设置一个合理的并发线程数,通过这两方面来显著提升服务器的性能。

    现在,你知道了如何来快速提升性能,那接下来你估计会问,我应该怎么发现系统哪里最消耗CPU资源呢?

    如何发现瓶颈

    就服务器而言,会出现瓶颈的地方有很多,例如CPU、内存、磁盘以及网络等都可能会导致瓶颈。此外,不同的系统对瓶颈的关注度也不一样,例如对缓存系统而言,制约它的是内存,而对存储型系统来说I/O更容易是瓶颈。

    这个专栏中,我们定位的场景是秒杀,它的瓶颈更多地发生在CPU上。
    那么,如何发现CPU的瓶颈呢?其实有很多CPU诊断工具可以发现CPU的消耗,最常用的就是JProfiler和Yourkit这两个工具,它们可以列出整个请求中每个函数的CPU执行时间,可以发现哪个函数消耗的CPU时间最多,以便你有针对性地做优化。

    当然还有一些办法也可以近似地统计CPU的耗时,例如通过jstack定时地打印调用栈,如果某些函数调用频繁或者耗时较多,那么那些函数就会多次出现在系统调用栈里,这样相当于采样的方式也能够发现耗时较多的函数。

    虽说秒杀系统的瓶颈大部分在CPU,但这并不表示其他方面就一定不出现瓶颈。例如,如果海量请求涌过来,你的页面又比较大,那么网络就有可能出现瓶颈。

    怎样简单地判断CPU是不是瓶颈呢?一个办法就是看当QPS达到极限时,你的服务器的CPU使用率是不是超过了95%,如果没有超过,那么表示CPU还有提升的空间,要么是有锁限制,要么是有过多的本地I/O等待发生。

    现在你知道了优化哪些因素,又发现了瓶颈,那么接下来就要关注如何优化了。

    如何优化系统
    对Java系统来说,可以优化的地方很多,这里我重点说一下比较有效的几种手段,供你参考,它们是:减少编码、减少序列化、Java极致优化、并发读优化。接下来,我们分别来看一下。

    1. 减少编码
      Java的编码运行比较慢,这是Java的一大硬伤。在很多场景下,只要涉及字符串的操作(如输入输出操作、I/O操作)都比较耗CPU资源,不管它是磁盘I/O还是网络I/O,因为都需要将字符转换成字节,而这个转换必须编码。

    每个字符的编码都需要查表,而这种查表的操作非常耗资源,所以减少字符到字节或者相反的转换、减少字符编码会非常有成效。减少编码就可以大大提升性能。

    那么如何才能减少编码呢?例如,网页输出是可以直接进行流输出的,即用resp.getOutputStream()函数写数据,把一些静态的数据提前转化成字节,等到真正往外写的时候再直接用OutputStream()函数写,就可以减少静态数据的编码转换。

    我在《深入分析Java Web技术内幕》一书中介绍的“Velocity优化实践”一章的内容,就是基于把静态的字符串提前编码成字节并缓存,然后直接输出字节内容到页面,从而大大减少编码的性能消耗的,网页输出的性能比没有提前进行字符到字节转换时提升了30%左右。

    1. 减少序列化

    序列化也是Java性能的一大天敌,减少Java中的序列化操作也能大大提升性能。又因为序列化往往是和编码同时发生的,所以减少序列化也就减少了编码。

    序列化大部分是在RPC中发生的,因此避免或者减少RPC就可以减少序列化,当然当前的序列化协议也已经做了很多优化来提升性能。有一种新的方案,就是可以将多个关联性比较强的应用进行“合并部署”,而减少不同应用之间的RPC也可以减少序列化的消耗。

    所谓“合并部署”,就是把两个原本在不同机器上的不同应用合并部署到一台机器上,当然不仅仅是部署在一台机器上,还要在同一个Tomcat容器中,且不能走本机的Socket,这样才能避免序列化的产生。

    另外针对秒杀场景,我们还可以做得更极致一些,接下来我们来看第3点:Java极致优化。

    1. Java极致优化

    Java和通用的Web服务器(如Nginx或Apache服务器)相比,在处理大并发的HTTP请求时要弱一点,所以一般我们都会对大流量的Web系统做静态化改造,让大部分请求和数据直接在Nginx服务器或者Web代理服务器(如Varnish、Squid等)上直接返回(这样可以减少数据的序列化与反序列化),而Java层只需处理少量数据的动态请求。针对这些请求,我们可以使用以下手段进行优化:

    • 直接使用Servlet处理请求。避免使用传统的MVC框架,这样可以绕过一大堆复杂且用处不大的处理逻辑,节省1ms时间(具体取决于你对MVC框架的依赖程度)。
    • 直接输出流数据。使用resp.getOutputStream()而不是resp.getWriter()函数,可以省掉一些不变字符数据的编码,从而提升性能;数据输出时推荐使用JSON而不是模板引擎(一般都是解释执行)来输出页面。
    1. 并发读优化

    也许有读者会觉得这个问题很容易解决,无非就是放到Tair缓存里面。集中式缓存为了保证命中率一般都会采用一致性Hash,所以同一个key会落到同一台机器上。虽然单台缓存机器也能支撑30w/s的请求,但还是远不足以应对像“大秒”这种级别的热点商品。那么,该如何彻底解决单点的瓶颈呢?

    答案是采用应用层的LocalCache,即在秒杀系统的单机上缓存商品相关的数据。

    那么,又如何缓存(Cache)数据呢?你需要划分成动态数据和静态数据分别进行处理:

    • 像商品中的“标题”和“描述”这些本身不变的数据,会在秒杀开始之前全量推送到秒杀机器上,并一直缓存到秒杀结束;
    • 像库存这类动态数据,会采用“被动失效”的方式缓存一定时间(一般是数秒),失效后再去缓存拉取最新的数据。

    你可能还会有疑问:像库存这种频繁更新的数据,一旦数据不一致,会不会导致超卖?

    这就要用到前面介绍的读数据的分层校验原则了,读的场景可以允许一定的脏数据,因为这里的误判只会导致少量原本无库存的下单请求被误认为有库存,可以等到真正写数据时再保证最终的一致性,通过在数据的高可用性和一致性之间的平衡,来解决高并发的数据读取问题。

    总结一下

    性能优化的过程首先要从发现短板开始,除了我今天介绍的一些优化措施外,你还可以在减少数据、数据分级(动静分离),以及减少中间环节、增加预处理等这些环节上做优化。

    首先是“发现短板”,比如考虑以下因素的一些限制:光速(光速:C = 30万千米/秒;光纤:V = C/1.5=20 万千米/秒,即数据传输是有物理距离的限制的)、网速(2017年11月知名测速网站Ookla发布报告,全国平均上网带宽达到61.24 Mbps,千兆带宽下10KB数据的极限QPS 为1.25万QPS=1000Mbps/8/10KB)、网络结构(交换机/网卡的限制)、TCP/IP、虚拟机(内存/CPU/IO等资源的限制)和应用本身的一些瓶颈等。

    其次是减少数据。事实上,有两个地方特别影响性能,一是服务端在处理数据时不可避免地存在字符到字节的相互转化,二是HTTP请求时要做Gzip压缩,还有网络传输的耗时,这些都和数据大小密切相关。

    再次,就是数据分级,也就是要保证首屏为先、重要信息为先,次要信息则异步加载,以这种方式提升用户获取数据的体验。

    最后就是要减少中间环节,减少字符到字节的转换,增加预处理(提前做字符到字节的转换)去掉不需要的操作。

    此外,要做好优化,你还需要做好应用基线,比如性能基线(何时性能突然下降)、成本基线(去年双11用了多少台机器)、链路基线(我们的系统发生了哪些变化),你可以通过这些基线持续关注系统的性能,做到在代码上提升编码质量,在业务上改掉不合理的调用,在架构和调用链路上不断的改进。

    展开全文
  • 推荐系统本身也很多的组成部分,再加上整个系统所处的大环境,综合起来会很多因素影响着一个推荐系统最终效果的好坏,这里的效果指的是包括准确率、召回率、多样等等指标在内的一个整体整体效果,不做具体区分...

    在一个网站或者app中,推荐系统通常会和整个大系统的多个方面有交互,推荐系统本身也有很多的组成部分,再加上整个系统所处的大环境,综合起来会有很多因素影响着一个推荐系统最终效果的好坏,这里的效果指的是包括准确率、召回率、多样性等等指标在内的一个整体整体效果,不做具体区分。在这里我们试对其中一些主要的因素做一讨论。需要指出的是,这些因素里面并不是所有的我们都可以左右,但是了解它们究竟是什么对我们开发和优化系统还是非常有用的。

    一、用户因素

    与广告系统需要同时面对用户和广告主不同,推荐系统的服务对象只有一个,那就是用户,所以用户的因素很大程度会影响系统的效果。具体来讲,系统中新用户和老用户的比例可以说是对效果影响最大的因素之一。大家知道推荐系统是高度依赖用户行为的,而对于无任何行为或者行为非常少的新用户,效果肯定是不会太好的,所以整个系统中新用户的比例越高,系统的整体表现就会越差。

    这就是一个典型的推荐系统本身无法左右的因素,而是需要整个系统共同努力来解决。对于这个问题,有两种解决思路:一种是努力优化推荐系统的冷启动算法,这种方法肯定会有效,但是其天花板也是非常低的;而另一种方法,是努力将平台上的新用户转化为老用户,也就是说努力让他们与平台多交互,产生行为,从而脱离冷启动的阶段。这两种方法相比,可能第二种的效果要更好,这主要是因为冷启动算法的优化空间实在有限,而将其转为“热”用户之后,各种优化策略就都可以派上用场了。这也是一种可以在多种场景下借鉴的思路:将未知问题转化为已知问题,而不是创造新问题。

    二、产品设计因素

    所谓产品设计因素,指的是推荐出的物品在什么位置、以何种形式展示给用户。如果说推荐算法是一个人的内在,那么产品设计就是一个人的脸。在现在这个看脸的时代,长得好不好看会很大程度上影响算法能量的释放程度。最常见的影响效果的外在因素包括但不限于:

    图片的质量。互联网早已进入读图时代,无论任何物品的推荐,例如商品、资讯等,有图片的吸引力一定是大于无图片的。而对于都有图片的情况,图片的大小和清晰度则会对用户是否感兴趣产生很大影响。除了大小和清晰度这种基础的质量以外,图片本身传达出来的信息的质量也很关键,例如对于商品的图片,如果不能在图片中展示出该商品的主要信息和用户关心的内容,那么用户点击的概率就会大大降低,毕竟大家都很忙,点一下也是有代价的。所以对于C2C市场这样以用户自己拍摄的照片为主的场景,引导用户拍出高质量的商品图片就显得尤为重要,这个问题上Airbnb自费给房东拍照片的故事已经足够证明其重要性和意义了。

    主题的吸引程度。除了图片以外,以文字形式描述的主题也是非常重要的,毕竟文字还是人们获取信息的一个主要途径。在转转平台上,会有一些偷懒的用户在文字描述中只写类似“如图,私聊”这样的信息,可想而知这样的描述竞争力是比较弱的,同时也会让人觉得卖家对这个商品并不是很上心,所以除非你的商品在其他方面极具竞争力,否则是很难得到转化的。

    主题吸引人固然重要,但是过于“头重脚轻”,只关注主题质量,而忽略物品本身质量的话,反而会起到反作用,引起用户的反感。这里面最典型的例子就是现在充斥屏幕的各种标题党文章了,为了吸引用户的点击而在起标题上面大做文章,但用户点进去之后发现要么文章质量低下,要么文不对题,长期以往下去,会对平台的信誉度产生很大的负面影响,是一种杀鸡取卵的做法。

    所以说,在文字内容描述方面,要尽量信息周全,但也不能背离事实,单纯为了一时的点击率,而牺牲了平台的长远发展。

    关键信息是否露出。所谓关键信息,指的是能够左右或影响用户产生点击、转化的信息,除了上面提到的图片和文字描述以外,各个业务场景下都有一些有特点的关键信息,例如销量、评论数等等。一部分是因为这些信息本身就会对用户的转化产生影响,另一方面,推荐算法在召回或排序时可能用到了这些信息,那么将这些信息展现出来,一定程度上充当了推荐解释的功能。

    是否有干扰信息。这个指的是模块周围是否有影响用户注意力的其他内容,能否让用户比较专心地浏览推荐模块。典型的如一些亮闪闪的广告或者促销/活动banner之类的,放在推荐位的旁边会对用户的注意力产生不同程度的影响,进而影响转化。如果推荐系统在你的业务中是重要的一部分,那么就应该给予它足够专注(dedicated)的空间和位置,而尽量不要将其与其他内容混在一起。在这个纷繁复杂的世界里,很多时候,少就是多(lessismore)。

    三、数据因素

    推荐系统是典型算法驱动的系统,而如果说算法是系统的骨架,那么数据就是系统的血液。如果数据质量和数量不够,那么任何算法的效果都会打折扣。数据的数量不足是很容易理解的,而且数据量是否充足很多时候和整个网站或APP的发展状况有关,不是我们所能左右的,但数据质量则不同,是可以通过人为的努力而不断加强的。所以这里就简单说一下数据质量方面常见的可能存在的问题。

    关键信息缺失。信息缺失是数据质量方面最大的问题之一,尤其是影响到算法策略或排序模型的关键信息。例如曝光数据中没有具体曝光位置信息,展现日志中没有用户停留时长的信息等等,这些信息的确实会直接导致算法效果的下降,进而影响最终效果。类似这些问题的出现,很多时候是因为在最初的数据系统建设时,没有算法相关的人员参与,导致没有把这些相关信息设计进去。不过这类问题也相对好解决,只要在发现有缺失之后尽快补充进去就好了。

    数据设计欠佳,使用复杂。还有一种情况,就是关键信息都有,没有严重缺失,但是数据结构或表结构设计不够合理,导致获取一个信息要join多张表,或经过复杂的运算逻辑。这种情况下,虽然关键信息都可以获取到,但是由于获取成本高,很有可能在工程实现中被不同程度地做折中,导致数据质量打折扣,影响最终效果。这类问题的解决方法,从大的思路上来讲是要做好算法相关的数据仓库/数据集市建设,使得数据的获取、变动和维护都尽量简单化,减少数据建设的成本,从而提高数据的使用效率。

    推荐系统使用到的数据通常是整个网站的数据系统中的一个子集,所以这部分数据质量的把控需要推荐系统的开发人员和数据系统的开发人员共同的努力,才能保证数据的可用性和易用性。

    四、算法策略因素

    上面说了这么多,终于说到了推荐系统最核心的算法策略部分。算法策略对效果的影响是毋庸置疑的,但是其影响也是多方面的,具体来讲,算法可能会从以下几个方面影响效果。

    算法复杂度影响准确性。复杂度越高的算法整体上准确性较高,无论使用什么具体算法,这个大趋势整体来说是正确的。例如简单的排序模型可能干不过非线性模型,连续值特征有可能干不过离散化后的非线性特征,时序问题上vanillarnn干不过LSTM等等。在保证数据质量的前提下,用复杂度高的模型是一种能够确保收益的效果提升方式,当然前提是算法要与业务相契合,不能为了复杂而复杂。

    算法的稳定性影响效果的稳定性。我们知道在机器学习模型中有一类模型具有低偏差但同时也具有高方差,这里的高方差,指的是在训练出来的模型,在不同的数据集上表现差异会比较大,这种现象还有另外一个名字就是过拟合。如果数据量足够大的话,再加上合理的正则化手段,过拟合是比较容易避免的。所以问题更容易出现在数据量不足的情况下,在这种情况下,应该选择例如线性模型这样简单模型来保证结果的稳定性,甚至可以考虑使用基于规则的算法来保证稳定性。

    为什么要关注结果的稳定性呢?这里的原因和我们在学习算法设计分析时要关注算法的平均复杂度是类似的。我们虽然希望得到一个非常准确的模型,但是更希望这个模型在线上运行时稳定的,是可预期的,不会今天效果好,明天效果差。在实际使用中,无论准确率如何,都希望稳定性是有保证的。

    五、工程架构因素

    最后,我们再来简单说一下工程架构方面的因素。无论什么样的数据,什么样的算法,最终呈献给用户之前都需要具体的工程落地,那么这个落地过程中选择的具体工程架构也会对效果产生影响。

    效应耗时的影响。接口的响应速度无疑是工程架构对用户的最直接体现,响应速度慢肯定会导致用户的不耐烦,可能就直接流失掉了。要提高速度,通常会有几类方法,一类是对算法进行优化,减少不必要的计算;二是选择简单算法;三是使用缓存的思路,只在在线部分进行尽量少的计算,其余的计算都放到离线或近线层去做,减少实时计算的负担。

    架构设计对问题排查监控的影响。老司机们都知道,只能跑不能修的车是肯定不能上路的。同理,推荐系统的整体架构设计要对问题的排查比较友好,能够在出现问题或者需要验证猜想的时候能够快速在系统中进行定位,而不是现加debug信息现上线,导致问题排查过程被拖长。优秀的工程师会在系统设计的时候就给自己留好后路,而不是在出了问题时才临时抱佛脚。

    架构设计对迭代速度的影响。除了响应速度这种较为表面的影响以外,整个架构的设计能否支持快速的策略迭代对效果的隐形影响也是极大的。如果整体架构比较臃肿,模块分离不清晰,基础逻辑缺乏适当抽象同一,会导致数据和策略的迭代无法快速进行,每迭代一次都要走很复杂的流程,而且还不能保证正确性。这样的问题会拖累系统的发展速度,最终影响效果。

    总结

    除了上面提到的因素,还有很多细节会影响推荐系统的最终效果,所以说我们在提升推荐系统效果时,眼睛不能只盯着一处,而是要具有一定的全局观,能够从全局的角度找到当前对效果影响最大的是什么,进而进行针对性优化。对于那些暂时不能改变的因素,也要做到心里有数,在适当的时机进行干预。

    人工智能、大数据、云计算和物联网的未来发展值得重视,均为前沿产业,多智时代专注于人工智能和大数据的入门和科谱,在此为你推荐几篇优质好文:
    关联规则推荐算法的原理及实现
    http://www.duozhishidai.com/article-15567-1.html
    大数据教程视频推荐系统的常用算法概述
    http://www.duozhishidai.com/article-12484-1.html
    如何从零构建实时的个性化推荐系统?
    http://www.duozhishidai.com/article-11133-1.html


    多智时代-人工智能大数据学习入门网站|人工智能、大数据、物联网云计算的学习交流网站

    多智时代-人工智能大数据学习入门网站|人工智能、大数据、云计算、物联网的学习服务的好平台

    展开全文
  • 提出基于正交试验法的影响因素敏感评价方法,通过方差分析研究各影响因素的敏感程度,试验结果表明,各影响因素对偏心误差均显著影响,其中偏心距离的影响程度最大,不均匀度的影响程度最小。
  • 自发脊髓硬膜外出血患者神经功能预后影响因素研究
  • 针对冲击地压巷道锚固承载结构破坏机理的复杂和变形影响因素的多样,基于响应面法试验设计和数据分析功能,采用有限差分数值软件动力模块,定量化研究围岩强度、震源距离、震源强度、原岩应力、支护强度等单一因素...
  • 患者与方法:根据纳入与排除标准,选择200例在家中患癌性疼痛的患者进行治疗,观察治疗前,治疗后1周和治疗后1个月的生活质量,其影响因素为:分析。 结果:患者治疗前后身体机能,情绪功能,认知功能和社交功能...
  • 影响鱼类免疫应答的环境因素主要温度、季节以及各种水质因素等。...水质因素,如放射物质、溶解于水中的有机、无机、重金属离子等污染物,影响鱼类机体健康,同时对鱼类的免疫功能具有不同程度的毒害作用。
  • 网页打开速度是影响用户体验的首要因素。 硬件因素包括:服务器端、客户端和网速。服务器端主要包括:服务器的地 域,是否双线,处理能力等等;客户端的因素主要包括:用户的硬件配置、用户使用的浏览器、是否...
    网页打开速度是影响用户体验的首要因素。
    

    硬件因素包括:服务器端、客户端和网速。服务器端主要包括:服务器的地 域,是否双线,处理能力等等;客户端的因素主要包括:用户的硬件配置、用户使用的浏览器、是否有恶意插件病毒等等;网速当然也是一个制约网页打开速度的重 要因素。

    硬件因素的改进有其先天的障碍,比如:我们不能强制用户使用多大的带 宽,或者要求用户使用某种浏览器等。相对于网站的所有者或者开发者来说,可以选择双线、高处理能力、近地域的服务器。

    软件因素是指:制作网站采用的不同技术。主要包括:

    第一:页面是动态还是静态。动态页面.jsp或者.asp等等ASP、PHP、JSP等程序实现了网页信息的动态交互,运行起来的确非 常方便,因为它们的数据交互性好,能很方便地存取、更改数据库的内容,使网站“动”起 来,如:论坛、留言板等。但是这类程序必须先由服务器执行处理后,生成HTML页面,然后再“送”往 客户端浏览,这就不得不耗费一定的服务器资源。如果在虚拟主机上过多地使用这类程序,网页显示速度肯定会慢。

    第二:页面的HTML代 码量。浏览网页实际上是将虚拟主机中的网页内容下载到本地硬盘,再用浏览器解释查看的。下载网页的快慢在显示速度上占了很大比 重,所以,网页本身所占的空间越小,那么浏览速度就会越快。

    第三:对图片的处理。包括图片采用的格式、图片的数量、图片的大小等。根 据图片的清晰度要求、大小透明度等等分别设置不同的图片格式如jpg、gif、png,可以适当的减少图片的大小;图片的大小和代码量 一样,因为loading量 的不同会影响网页的打开速度;图片的数量是影响页面打开速度关键因素,首先:图片数量多了,需要的的loading量必然增大;其次:最重要的是,浏览器每次下载图片都要去服务器提 交一次请求,服务器响应后找到相应的图片地址,才会把图片下载到本地硬盘。图片数量越多,需要服务器请求的链接也就越多,会给服务器造成较大的压力,速度 会明显变慢。

    第四:CSS/JS的 代码量和引入方式。CSS(控制页面的显 示,JS用于制作页面的动态 效果,同样需要用户下载到机器上后再被浏览器解析执行。CSS/JS代码量也会影响网页的打开速度。而一直被大家忽视的引入方式,也是影响网速重要原因,引入方式的不同关系到解析代码中的无用代码比 例,无用代码引入越多,解析越慢。不同的引入方式也关系到整站的代码量、后期优化工作量等。

    第五:HTML制作采用的技术。用Table布局和用Div布局的同一页面,使用Table布局的页面比使用Div布局的页面打开速度要慢很多,并且用户体验差。原因是,Table布局的页面只有在整个Table里的内容都loading完成时才一下显示出来,而用Div布局的页面会逐块显示。因此用Div布局的同一页面能留住更多的用户。

    解决方案:

    1.采用背景图合并。背景图合并技术是一门DIV+CSS的熟练使用和PS合图相结合的技术。通过精确到1px的CSS设置,使用PS合成背景图片,特别是小图合并,在完全不改变原来效果的情况下,大量减少页面需loading图片数量,从而大幅降低了服务器的压力,提高页面的打开速度。

    2.外部引入CSS样式。采用这种方法,最能体现DIV+CSS中的内容与显示分离的思想。我们可以通过一个CSS文件控制多个不同的页面,对于整站而言,减少了大量的代码;同时,修改一个CSS文件就可以改变多个页面的显示效果,因此这种方式也是最易 改版维护的方法;最后,因为直接写在页面的样式控制CSS最少, 所以这种方法也是页面代码最简洁的方法,有利于前后端人员之间的配合。

    3.用div+css布局,不要用table布局.

    Div+Css布局方法相对于前两种来 说已经比较普及,优势也是对比使用Table布局而言。主要有以下的特点:

    (1)大大缩减页面代码,提高页面浏览速度,缩减带宽成本;
         (2.)结构清晰,容易被搜索引擎搜索到。是 做SEO的基础技术。
         (3.)缩短改版时间。只要简单的修改几个CSS文件就可以重新设计一个有成百上千页面的站点。
         (4)强大的字体控制和排版能力。CSS控制字体的能力比糟糕的FONT标签好多了,有了CSS,我们不再需要用FONT标签或者透明的1 px GIF图片来控制标题,改变字体颜色,字体样 式等等。
         (5)CSS非常容易编写。你可以象写html代码一样轻松地编写CSS。
         (6)提高易用性。使用CSS可以结构化HTML,例如:<p>标签只用来控制段落,heading标签只用来控制标题,table标签只用来表现格式化的数据等等。你可以增 加更多的用户而不需要建立独立的版本。
         (7)可以一次设计,随处发布。你的设计不仅仅用于web浏览器,也可以发布在其他设备上,比如PowerPoint。
         (8)更好的控制页面布局。
         (9)表现和内容相分离。将设计部分剥离出来放在一个独立样式文件中,你可以减少未 来网页无效的可能。
         (10)更方便搜索引擎的搜索。用只包含结构化内容的HTML代替嵌套的标签,搜索引擎将更有效地搜索到你的 内容,并可能给你一个较高的评价(ranking)。
         (11)Table 布局灵活性不大,你只能遵循 table tr td 的格式。而div 你可以 div ul li 也可以 ol li 还可以 ul li ……但标准语法最好有序的写。
         (12)Table布局中, 垃圾代码会很多,一些修饰的样式及布局的代码混合一起,很不利于直观。而Div更能体现样式和结构相分离,结构的重构性强。
         (13)以前一些非得通过图 片转换实现的功能,现在只要用CSS就可以轻松实现,从而更快地下载页面。
         (14)使页面的字体变得更 漂亮,更容易编排,使页面真正赏心悦目。
         (15)你可以轻松地控制页 面的布局 。
         (16)你可以将许多网页的风格格式同时更新,不用再一页一页 地更新了。你可以将站点上所有的网页风格都使用一个CSS文件进行控制,只要修改这个CSS文件中相应的行,那么整个站点的所有页面都会随之发生变动。

    4.根据需求的不同使用不同的图片格式。

    图片影响网页打开速度主要从三个方面:图片的数量、图片的大小、图片的颜色种类。常见格式有.jpg,.gif,.png。Png格式支持半透明,我们在需要半透明的情况下使 用,并且同时要注意ie6里 不兼容的情况。Jpg的颜色 值较多,一般是照片、广告图等较大效果较突出的图片使用的格式。Gif颜色值较少,最多支持256种颜色,一般是小图、边角、背景灯图片采用的格式。另外我们可以通过设置图片的质量来改变图片的大小,同样影响页面的打开速度。

    5.删除冗余代码。

    手写代码和用工具生成的代码又很大的不同,用工具生成的代码往往有好多的冗余无用的代码,用table布局实现同一效果 的代码量也比DIV+CSS实 现的代码量大很多。所以最好手写代码。

    6.优化精简代码。例:CSS代码精简写法:把background-color,background-position,background-image等合成一个background来设置。把padding-top,padding-right,padding-bottom,padding-left合成一个padding来使用

    7.动态效果尽量使用js而不用flash。

    8.使用对系统压力较小的算法。

    展开全文
  • 采用2006中国综合社会调查数据,应用BP...选择训练样本集,通过BP网络构建居民生活质量的评价模型,由网络权值计算分析得到各影响因素对居民生活质量的贡献大校实验结果表明,BP网络分析方法简便可行,具有一定的实用
  • 考虑到构造软煤电参数与其影响因素的非 线性关系,利用 Eview软件的数理统计功能,采用均方差-回归分析方法对构造软煤电性参 数的影响因素进行了定量研究。结果表明,水分和视密度是影响电阻率发生变化的主要因 素,且...
  • 性能测试---影响性能的因素

    千次阅读 2018-12-24 22:57:57
    要去测性能我们首先得知道哪些因素影响到性能,我们知道一个应用系统不是独立的,而是依赖很多因素,依赖的因素都是影响性能的变量,如果我们只关注某些因素那测试的时候一定要保持其他因素不变才会个稳定的结果...

    性能测试是软件测试中细分的一块,也是难度比较大的,大部分人学习性能测试都是偏重工具的使用了,有点本末倒置,性能测试最主要还是性能分析,性能调优

    要去测性能我们首先得知道哪些因素会影响到性能,我们知道一个应用系统不是独立的,而是依赖很多因素,依赖的因素都是影响性能的变量,如果我们只关注某些因素那测试的时候一定要保持其他因素不变才会有个稳定的结果。以看病为例,从中医的角度看人体器官是个互相依赖的复杂系统,不能头痛医头脚痛医脚。

    下面介绍下哪些因素会影响到性能,以及是怎么影响的...

     

    0、影响性能的4大因素

    影响性能4大要素

     

    这个图一看是不是觉得比较高大尚,是不是我从哪里偷来的啊,我写文章本着原创的原则是自己整的,有图有真相,另外不用汉字用英语是觉得英语看着笔画少简洁点,天天上班写邮件用英文也有看着比较顺眼。

    影响性能主要是这么4大方面的因素:

    1)硬件层面

    计算(CPU)、存储(Storage)、网络(Network),计算机硬件资源也主要是这3方面的资源,现在流行的云计算也主要是这3大资源的虚拟化

    2)系统层面

    操作系统(Operating sytstem)是大部分应用离不开的一个平台,目前前后端主流的操作系统是Linux,Windows,Android,iOS。同一种操作系统,不同的发行版本对性能的影响也是比较大。

    3)中间件、数据库

    这一层不是每个应用都会涉及,但大多数复杂的后台应用系统都会涉及到。比如很多web server会用到middleware  Tomcat、Nginx, 会用到数据库MySQL、Oracle. 

    4)应用程序

    最后这个就是我们直接接触,直接测试的系统本身了,对性能影响最大的因素毫无疑问就是应用程序本身了。

     

    1、硬件层面

    硬件设施不好影响性能大家肯定都知道,手机CPU一般通俗的讲就是手机芯片,联发科的比较low那换个高逼格的高通了。运行内存8G用起来卡,换成16G可能就飞起了。你百兆网卡的电脑接的光纤网速再快也只能跑100M/s。

    实际上硬件层面对性能的影响还远远不止我们了解到的上面这些概念。

    1.1 CPU、Memory

    现在硬件和软件的区分越来越不明显了,很多固件或者驱动我们有时也可以看成硬件。很多服务器都有CPU核的虚拟化功能,比如实际上4个物理CPU核,但是可以虚拟化出来让操作系统层面看到是8个核。但是CPU的这个虚拟化功能开启的时候性能好还是关闭的时候性能好呢? 这个要看具体应用,没有通用的答案,所以这就有性能调优的空间。

    现在CPU多核后,所有的核通过总线访问内存,总线就成为瓶颈了,于是出现了NUMA架构,把CPU分组,每组分一块内存就近访问,不是通过总线统一访问。那分几个NUMA呢,以及有NUMA后怎么调优,网上会看到很多关于MySQL在使用NUMA时很多坑,有很多调优的推荐方案。

    关于存储,很多传统的数据库大部分数据是放磁盘上的,访问太慢性能不能满足需要,现在就有很多内存数据库,比如Redis、HANA

     

    1.2 Network

    关于网卡,大家比较容易想到的是比如两个网卡组bond,配成主备模式相当只发挥了一个网卡的功能,另外一个没起作用,不过稳定可靠点,配成负载均衡的话两个网卡的能力都发挥了。

    另外现在大型互联网公司每天处理海量的数据,传统的数据流是这样的: 物理网卡->网卡驱动->TCP/IP协议栈->Socket接口->上层应用,这里数据处理的路径比较长而且还涉及到linux内核空间(tcp/ip协议栈)到用户空间(socket接口)的切换,时延肯定太长,于是出现了intel推出的DPDK, 数据直接从物理网卡->用户空间的DPDK了。腾讯、华为很多后台处理就用到了DPDK。虽然有DPDK这么个框架给你用,但是实际用于生产可能就涉及到自己的一些客制化处理,性能调优了。

     

    2、操作系统层面

    操作系统层面涉及到的调优就太多了啊,先别说怎么调,关是选哪个就够头疼了,以Linux为例。Redhat、CentOS、SuSE你选哪个,用哪个版本?特别是你的应用比较偏底层处理的话会影响很大的,比如我自己测的产品跑性能测试时,SuSE 11 SP1结果比较好,升级到SuSE 11 SP2性能下降明显,调查发现新patch的一个功能会影响到功能,最后解决方案就改配置把那个功能禁用了。后面从SP2升级到SP3发现性能又降了,具体原因还在调查中...

    另外一些操作系统常用的配置,比如你没有使用GUI的需求,那就直接禁用GUI,如果你的应用对磁盘操作比较多,那你得对比下不同文件系统的性能情况....

     

    3、中间件、数据库

    中间件的话比如Tomcat、Nginx这些东东有很多配置,设置不同的参数对性能影响很大,比如Nginx配置单个进程允许客户端最大连接数、绑定不同Nginx进程到不同CPU核。

    数据库的调优就更复杂了,都够你去折腾一辈子的了,简单的比如不同SQL语句的写法性能差着十万八千里。一些常用的表的数据操作逻辑是放代码里面处理还是弄成存储过程放数据库上,这个不仅要从功能架构角度考虑还要从性能角度考虑了。

     

    4、应用程序

    我们平常说性能其实很多时候较少考虑上面提到的3点,狭义来讲主要关注应用程序本身。菜鸟写出来的代码比牛人写的差着几条街,除了功能、稳定性、可以扩展性外最能体现差别的还是性能,这个除了些通用的编程最佳实践外,就得根据具体的应用具体分析了。

    在学校学数据结构和算法的课时大家知道有个时间复杂度,可以衡量下算法的性能是好事坏,这个确实有点用。不过你真正工作中写代码时打着灯笼可能也找不到哪个地方要你写个复杂算法,好不容易有个排序的需要一般调用个函数sort下就行,你可能感觉英雄无用武之地了。那就只能在很多细小的方面去考虑性能了,比如别太频繁写磁盘,先把数据放内存,达到多少再刷磁盘。别想着内存够够的想分配多少就多少,得抠门点省着用,能用一个字节解决的就别用两个字节,内存用完了就快点释放掉别占着茅坑不拉屎。

    展开全文
  • 软件质量因素 6个The different elements, which impact the product, are named as software factors. They can be extensively partitioned into two software quality management process. The principal class ...
  • 影响网速的几大因素

    千次阅读 2018-05-28 01:55:44
    信道干扰(影响程度 低) 相近信道的wifi信号会互相干扰,影响网速,随着...(现在的路由很多自动选择信道的能力,不用手动去选择) 上图软件:wifi analyser 下载链接 低配路由(影响程度 极高) ·不稳...
  • 抑郁症持续注意力损害及其影响因素初步研究,徐方忠,娄乐,目的:通过对抑郁症患者持续注意力水平进行研究,系统探讨抑郁症患者认知功能水平以及有关影响因素,为抑郁症临床评估提供新的
  • 劳动力转移中人均劳动力转移收入是促进农户生活用能从生物质能源向商品能源转变的主要推动因素,而转移人数及转移负担人口则是主要抑制因素,社会...特征、能源可获得及区位特征诸因素均构成农户生活用能的显著影响因素...
  • 性能测试的四大影响因素

    千次阅读 2020-05-23 15:04:07
    要去测性能我们首先得知道哪些因素影响到性能,我们知道一个应用系统不是独立的,而是依赖很多因素,依赖的因素都是影响性能的变量,如果我们只关注某些因素那测试的时候一定要保持其他因素不变才会个稳定的结果...
  • 计算机网络可靠影响因素

    千次阅读 2014-04-23 16:59:40
    计算机网络可靠的决定因素有给定时间、特定环境以及业务完成能力,计算机网络可靠可以对网络运行能力作有效反应,在此基础上实现网络的安全运行。当今人们生产生活对于网络依赖的程度进一步加高,网络的可靠尤为...
  • 方法采用层次分析方法(AHP)建立城镇居民生活用水定额影响因素层次模型,分析各因素重要构造判断矩阵,进行一次检验,得出各影响因素权重.结果气候因子影响最大,权重为0.417;经济因素次之,权重为0.312;水...
  •  企业在提高客单价的过程中,重要的是要根据顾客上述行为因素开发具体的、可操作的卖场营销的方法和技术。只有卖场全部营销活动适应于顾客的这种购买行为和意识,才能使卖场营销的结果富有效果和效率  作为...
  • ​​在科学技术的进步下,对人脸识别技术以及算法的研究也会不断的进步,但在实际应用中会受到光照、遮挡、面部表情等因素影响人脸识别的准确,使识别的准确率会降低。由畅视智能与你分享在人脸识别中的人脸采集...
  • 影响辐射生物学效应的因素

    千次阅读 2019-04-30 22:42:30
    影响辐射生物学效应的因素主要: (一)辐射因素 1.辐射类型:高LET辐射在组织内能量分布密集,生物学效应相对较强。故在一定范围内,LET愈高,RBE愈大。 2.剂量和剂量率:照射剂量大小是决定辐射生物效应强弱的...
  • 全基因组选择中准确影响因素

    千次阅读 2018-09-02 12:29:33
    文章目的: 比较全基因组选择中准确影响因素 https://www.researchgate.net/publication/326489349_Prediction_accuracies_of_genomic_selection_in_American_mink_a_simulation_study 主要考虑的因素有: ...
  • 继解释此增长/下降和分析此分布的不同之处过后,Power BI在2月份又抛出了一枚重磅炸弹——Key Influencers Visualization,翻译过来:关键影响因素可视化组件。可见Power BI对这个AI黑科技的定位不同于前两者,它是...
  • 大数据对人们生活影响有哪些

    千次阅读 2020-01-16 14:26:29
    大数据概念就是指大数据,指无法...最早提出“大数据”时代到来的是全球知名咨询公司麦肯锡,麦肯锡称:“数据,已经渗透到当今每一个行业和业务职能领域,成为重要的生产因素。人们对于海量数据的挖掘和运用,预示...
  • 影响软件性能的因素

    千次阅读 2017-05-06 00:24:06
    软件性能是软件的一种非功能特性,它关注的不是软件是否能够完成特定的功能,而是在完成该功能时展示出来的及时。由于感受软件性能的主体是人,不同的人对于同样的软件能不同的主观感受,而且不同的人对于软件...
  • 功能测试: 1.链接测试: 1.测试所有连接是否按指示的那样确实连接到了该连接的页面, 2.测试所连接的也面是否存在, 3.保证WEB应用系统上没有孤立的页面.只能在集成测试阶段完成 2.表单测试: 用户...
  • 基于web系统测试是应考虑的因素有哪些功能测试:链接测试、表单测试、cookies测试、设计语言测试、数据库测试性能测试:连接速度测试、负载测试、压力测试可用测试:导航测试、图形测试、内容测试、整体界面测试...
  • 财政收入影响因素分析及预测模型。
  • 目的研究沈阳市医院生活用水量的影响因素及相应的权重.方法通过不同城市不同用水量的比较,得到影响因素的重要.运用层次分析法建层次分析结构模型分析沈阳用水量影响因素的权重.结果确定影响因素的重要,气候...
  • 影响超声波精度的因素

    千次阅读 2018-01-20 12:39:32
    空气温度对超声波传感器的测量精度很大的影响。超声波脉冲的回波的传播时间被测量后,传感器用声速计算到目标物的距离。然而,由于空气温度的改变,声速每Kelvin改变0.17%. 几乎所有的倍加福超声波传感器都一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 405,641
精华内容 162,256
关键字:

影响性功能的因素有哪些