php怎么获得元素,如何提升网站的打开速度?
网站速度优化如何影响转化
缓慢的速度确实会扼杀转化。实际上有47%的消费者希望网站在两秒钟或更短的时间内加载完毕, 而40%的消费者会放弃耗时三秒或更长时间的页面。
这意味着如果您的网站加载时间超过三秒钟,那么您将失去几乎一半的访问者,甚至无法访问他们。
仅此一项就对您潜在的转化带来了巨大的打击。然而对于决定留下来的访问者,缓慢的加载时间可以阻止他们将来返回。在一项调查中,有79%的客户表示他们不会返回效果不佳的网站。
最好的例子之一是沃尔玛提高网站速度后的转化率和收入提高。在最初的分析中,他们发现转换的访问者收到的页面加载速度是未转换的访问者的两倍。这表明页面越快,访问者进行购物的可能性就越大。
在网站速度优化结束时,沃尔玛报告了以下结果:
网站速度每提高一秒钟,转化率就会提高2%。每提高100毫秒,他们的增量收入就增加了1%。在另一项研究中,加载时间与转化率之间的关系表明 ,加载时间仅增加一秒钟,转化率就会降低25%。那我们来看看如何提升网站的打开速度?
最小化HTTP请求根据Yahoo的说法,网页加载时间的80% 用于下载网页的不同部分,例如图像,样式表和脚本。
这些元素中的每个元素都会发出HTTP请求,因此页面上的组件越多,页面呈现所花费的时间就越长。
最小化您的请求的第一步是弄清楚您的站点当前有多少,以用作基准。如果您使用的是Google Chrome浏览器,则可以使用浏览器的开发人员工具查看您的网站发出了多少个HTTP请求。
右键单击要分析的页面,然后单击“检查”,然后单击“网络”选项卡。(如果看不到“网络”标签,则可能需要通过将左侧边框拖动到左侧来展开“开发人员工具”侧边栏。)
“名称”列显示页面上的所有文件,“大小”列显示每个文件的大小,“时间”列显示加载每个文件需要多长时间。
在左下角,您还将看到该网站发出的请求总数。减少此请求数量将加快您的网站速度,浏览文件并查看是否有必要。
缩小并合并文件现在您已经知道您的网站发出了多少请求,接下来就可以减少该请求。最好的入门指南是HTML,CSS和JavaScript文件。
这些是非常重要的文件,因为它们决定了网站的外观。它们还会增加您的网站在用户每次访问时所发出的请求数量。您可以通过“缩小”并合并文件来减少此数量。这样可以减少每个文件的大小以及文件的总数。
如果您使用模板化的网站构建器,这尤其重要。这些使构建网站变得容易,但有时会创建混乱的代码,从而大大降低您的网站速度。
缩小文件涉及删除不必要的格式,空格和代码。由于每段不必要的代码都会增加页面的大小,因此消除多余的空格,换行和缩进非常重要。这样可以确保您的页面尽可能的简洁。
组合文件确实是听起来很容易解决的问题。如果您的站点运行多个CSS和JavaScript文件,就可以将它们组合为一个文件。
当涉及到您的网站时,精益求精是更好的选择。页面上的元素越少,浏览器使页面呈现所需的HTTP请求就越少-加载速度就越快。
对CSS和JavaScript文件使用异步加载缩小并合并了一些文件后,您还可以优化它们在页面上的加载方式。
可以通过两种不同的方式加载CSS和JavaScript之类的脚本:同步或异步加载。
如果您的脚本是同步加载的,则它们会按照在页面上显示的顺序一次加载一个。另一方面,如果脚本是异步加载的,则其中一些脚本将同时加载。
异步加载文件可以加快页面的速度,因为当浏览器加载页面时,页面从上到下移动。
如果到达非异步的CSS或JavaScript文件,它将停止加载,直到完全加载该特定文件为止。如果该文件是异步文件,则浏览器可以继续同时加载页面上的其他元素。
推迟JavaScript加载延迟文件意味着阻止其加载,直到其他元素加载完毕。如果推迟使用较大的文件(例如JavaScript),则确保可以立即加载其余内容。
如果您有HTML网站,则需要在</body>标记之前放置一个外部JavaScript文件的调用,该文件如下所示:
如果您网站的速度尚未达到您想要的速度,那么这可能是一个可以持续进行的目标。但是当您进行本文中列出的更改时,您可以继续测试您的网站并提高排名,用了以上这些方法后,肯定速度会提高不少。
PHP多维数组根据值搜索对应的键?
引言
我们讲解了很多种PHP数组操作的引用场景。今天我们接着分享这方面的知识,说一说对于多维数组,如何根据值搜索,并返回数组的索引值。
学习时间最开始我们习惯于跟随本能写代码,下意识地开始用 for 循环,对数组进行遍历,然后挨个比对,如果值相等,就返回索引值,如果没有匹配上,就是不存在。
假如原始数组是如下图一样的关联数组。
程序逻辑很简单,我们使用代码实现一下:
function searchForId($id, $array) { foreach ($array as $key => $val) { if ($val['uid'] === $id) { return $key; } } return null; }
这个函数接收一个值,与数组,如果匹配上就将数组的索引返回,如果不存在则返回 null。因为第一层结构没有手动指定索引值,所以默认是从0开始的数字索引。
使用起来是这样的:
$id = searchForId('100', $userdb);
执行结束后,输出应该为0。
当然了,上面写的函数具有通用性,对于特殊的案例,我们应该随机应变。对于上述 $userdb 关联数组的结构,显然,使用PHP内置的函数操作起来,更为直观和快捷。
我们只需要先把 uid 列的元素全部取出,因为上层结构是默认数字索引,所以此处不用手动指定索引值;然后,在提取的数组中搜索值,使用 array_search 执行返回键。
总结为代码,就一行:
$key = array_search('100', array_column($userdb, 'uid'));
执行结果跟上面的 searchForId 函数一致。
深入讨论上面的函数和第二个解决方法会有问题,就是仅仅返回了第一个匹配的键。像下面这样写,肯定问题不大:
$key = array_search(40489, array_column($userdb, 'uid'));
但是如果在数组中有重复的值,而 uid 列也不唯一,要把所有的匹配结果都返回,该怎么做呢?不会又要修改 searchForId 函数,重新倒腾?
其实大可不必,PHP提供了这样的功能,只需改用 array_keys 函数即可:
$keys = array_keys(array_column($userdb, 'uid'), 40489);
你肯定经常使用 array_keys 函数用于返回整个数组的键,但是它的第二个参数,恰恰是在指定时,拥有可搜索的功能。这确实有些冷门。
再进一步。
上面返回的是数组对应的键,那如果想要键和值一并关联返回,一行代码能搞定吗?可以的,修改一下就行了,使用 array_combine 函数将键和值组装起来返回:
$keys = array_keys(array_combine(array_keys($userdb), array_column($userdb, 'uid')),40489);
写在最后本文通过特定的数组搜索需求,延伸到手动造轮子,把特殊的特性推向一般,并使用PHP内置的数组处理函数,进行功能裁切,简洁而高效。善用数组函数是硬功夫。
Happy coding :_)
我是 @程序员小助手 ,持续分享编程知识,欢迎关注。
一次完整的http请求过程是怎样的?
Http请求的一次详解:
客户端输入URL
客户端检测缓存:有缓存且较新,客户端直接读取本地缓存进行资源展示;
有缓存但是不新,准备http请求包,发送至服务端进行缓存校验;
备注:http1.0中Expire、http1.1中是Cache-Control根据发起http请求:
请求报文包含:a) 请求行用来说明请求类型(get\post\delete等)、要访问的资源(URI)以及使用的HTTP版本(1.0还是1.1)b) 首部(header)HOST将指出请求的目的地;User-Agent由浏览器来定义,自动发送;Connection:通常设置为keep-Alive, 长连接;其他首部包括等。c) 空行d) 请求实体3. 提取请求首部HOST通过DNS域名解析获取服务IP(DNS缓存\递归等)
4. 通过IP与默认端口创建TCP连接,进行http请求报文数据发送,其中重点就三次握手进行描述:
客户端向服务端发送syn=1,seq=client请求的ID;服务端向客户端发送syn=1,seq=服务端请求的ID,ack=客户端请求的ID+1;客户端向服务端发送syn=0,seq=客户端请求的ID+1,ack=服务端请求的ID+1,data\data…5. 服务端程序接受请求,定向到请求路径处理请求:
服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理
元数据:请求报文首部 <method> <URL> <VERSION> HEADERS格式name:value <request body> 示例: Host: www.chuyuni.cn 请求的主机名称 Server: Apache/2.4.7HTTP常用请求方式:MethodGET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS
6.访问资源:
服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源
资源放置于本地文件系统特定的路径:DocRoot DocRoot → /var/www/html /var/www/html/images/logo.jpg http://www.magedu.com/images/logo.jpg web服务器资源路径映射方式: (a) docroot (b) alias (c) 虚拟主机docroot(d) 用户家目录docroot7. 返回处理结果,准备http响应:
响应报文包含:a) 状态行:http版本(1.1或者1.0),状态码200:请求正常处理304:返回上次请求资源未作改动,验证浏览器的缓存机制400:请求参数错误401:客户端无权访问,要去输入用户名\密码之类的授权信息403:禁止访问(读写权限等影响)404:请求的资源不存在500:服务内部错误502:网关错误503:临时过载或者维护,导致服务端无法正常处理请求b) 首部报文支持的语言\编码格式\等,注意If-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答,用于服务端缓存校验c) 空行d) 响应报文实体8. 通过建立的tcp连接来返回相关的http响应报文及http状态信息,然后根据实际情况看是否关闭连接(Connection的keep-alive)
9. TCP连接关闭经历4次握手
客户端主动关闭连接放发送FIN进入FIN_WAIT1状态
服务端发最后的data和ack客户端接收进入CLOSEWAIT状态,客户端进入接受ACK进入FINWAIT2状态
服务端主动发FIN,客户端接受FIN并发送ack进入TIMEWAIT状态
服务器端正式关闭连接进入close状态
10. 客户端拿到http响应的报文信息,经过一系列前端处理过程最终将请求的资源进行展示。
作者:夕阳雨晴,欢迎关注我的头条号:偶尔美文,主流Java,为你讲述不一样的码农生活。
求推荐几款好玩的手游?
推荐几款好玩耐玩的手游,可能是你没有玩过的,但真的值得试一试。
《军令如山》
一款别具一格慢节奏策略手游,这个游戏的特点是一天不玩也不会被落下的。玩家间的差距主要是武将和技能的搭配,没有最好的武将只有最好的搭配。
《志霸三国》
一款战斗非常真实的三国卡牌手游,摆脱了传统对战的模式,将卡牌游戏战斗变成了武侠游戏一样的,自由跑动,手控操作进攻和技能释放。
《骁将三国》
要说省钱的三国卡牌手游非骁将三国莫属,一款可以零元玩下去的,没有酒馆抽将,一切武将物品纯养成玩法,真正实现休闲娱乐。
《萌军天下》
目前见过的最像率土之滨的休闲策略手游,类似的武将搭配,类似的天下十三州,不一样的只是不耗时间了。
php可以改变元素的左边距?
可使以用margin系列属性来置设标签与标签间的离距。margin:在一声个明中置设所有外距边属性͏
margin-bottom:设置元素的下边外距
margin-left:设置元的素左外边距
margin-right:设置素元的右边外距
margin-top:设置素元的上边外距
外边距是从指自身边框到另个一容器边框之间距的离,即器容外距离,是隔开素元与元素间的距。