网站优化之favicon.ico

这篇具有很好参考价值的文章主要介绍了网站优化之favicon.ico。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文于2015年底完成,发布在个人博客网站上。 考虑个人博客因某种原因无法修复,于是在博客园安家,之前发布的文章逐步搬迁过来。


背景

某一天在办公室分析产品首页加载速度时,无意中从Chrome浏览器的调试窗口看到浏览器在请求一个名为favicon.ico文件,由于Web系统的根路径下不存在这个文件,Chrome仅报了404访问失败,但当时没有太关注。

直到后来在某一次版本上线结束后的下午,还是在分析产品首页的加载速度,突然发现浏览器加载favicon.ico文件时,Web服务器居然把整个首页重新返回了一次,拖累了首页的加载速度。

如是,摆在眼前有两个问题:

  • favicon.ico是何方神圣,为什么浏览器会要求加载这个文件?
  • IE11加载favicon.ico文件失败后,居然再次下发加载首页的请求,导致首页加载了两次?

为什么浏览器要访问favicon.ico?

favicon.ico是什么

从百度百科中,可以找到如下描述:

favicon.ico图标是网站的缩略标志,可以显示在浏览器标签、地址栏左边和收藏夹,是展示网站个性的缩略logo标志,也可以说是网站头像,如果要让网站看起来更专业、更美、更有个性,favicon.ico是必不可少的。

浏览器调用favicon的原理是首先在网页所在目录寻找favicon.ico文件,如果没有找到就去网站的根目录寻找。所以最简单的方法就是将制作好的favicon文件命名为favicon.ico然后上传到网站的根目录下。

从资料可以得出解决本问题的方法。

解决方法

在首页的<head>增加如下的代码:

<link rel="icon" href="/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon" />

这时清理浏览器缓存,并强制浏览器不缓存数据,多次刷新页面,观察浏览器控制台监控到的HTTP请求,发现浏览器可以成功获取favicon.ico。Web服务器按照预想返回了图片,而不是首页页面。

这样就成功的消除了一次多余的页面返回动作。

没想明白的怪事

不过有件事情没有想明白。我使用WordPress 4.1在SAE上搭建的博客网站,在网站根目录下没有找到favicon.ico,但使用前述的测试手段来做验证时,居然没有观察到浏览器要求下载favicon.ico的请求。

为什么?

IE11加载favicon.ico文件失败后,为什么会再次下发加载首页的请求?

其实问题还有一个,为什么之前分析页面加载过程的时候,没有观察到首页被加载两次的现象。

使用IE11的调试工具仔细观察首页的刷新过程,发现其实不只是在访问favicon.ico失败时服务器返回首页,IE11在访问jquery.min.map文件失败时,服务器也会返回首页。

jquery.min.map又是什么鬼?

查阅jquery的官方资料,原来这是jquery 1.9版本的新特性。通常情况下,为了降低浏览器下载js文件的时延,我们在Web系统的生产环境里只会部署压缩版本的jquery.js。这没有什么问题,而且通常情况下都很好,但凡事总有例外。当客户投诉页面访问时出现js报错,而我们本地又无法重现问题,只好直接用浏览器来调试生产环境,问题就来了。压缩版本的jquery里,变量名、代码全部缩在一起,查看非常不方便,理解很困难。source maps就是解决这个问题的利器。jquery 1.9发布比较早,彼时只有Chrome支持source maps;现在已过去好多年,从IE11的表现看,应当也已实现了source maps的支持。

虽然知道了jquery.min.map是什么鬼,但对于定位问题本身并没有什么帮助。因为我还是不知道如何观察浏览器的行为。

分析问题的笨方法

最初想了很久不知如何下手,后来想代码里引用到首页的地方应该不多,干脆在相关的地方全打上断点,调试一下看看,说不定会有所发现。于是在代码里全局搜索首页的文件名,找出引用到首页的几处代码,在相关的Java代码中打上了断点。这时启动容器,用浏览器登录首页,打开浏览器的调试器,刷新页面,监控Java代码。

在几处正常的访问点上,代码表现正常,但在处理favicon.ico的下载请求时,服务器返回了重定向的消息。我精神一振,预感神秘的问题快要找到原因了。仔细查阅重定向操作相关的代码,外加几次调试,终于搞清楚了问题所在。原来系统的代码实现了对URL的访问控制,限定浏览器只能访问以.css.js.png.jsp.action为结尾URL,浏览器对其它形式URL的访问均会被重定向到首页。

代码分析到这里,问题就清楚了。

问题原因

  • favicon.icojquery.min.map文件的结尾不在前述文件后缀范围之内,于是加载这两个文件的请求被服务器的代码重定向回了首页,因而IE11按照服务器的要求重新加载了首页。
  • 之前调试代码的时候,我并没有设置禁止IE11访问缓存;因此当IE11被服务器代码要求重新加载首页时,IE11发现首页已加载过,于是直接使用了缓存中的页面,这样我自然看不到第二次加载首页的请求了。

问题清楚了,解决的手段自然就有了。

解决方法

  • 找项目组的美工MM,参照产品的Logo制作了一个16*16的favicon.ico文件,上传到的WebRoot的根路径,这下favicon.ico文件就有了。
  • 修正代码,调整权限控制的部分,把.ico.min.map加入到免认证的列表里,避免浏览器访问这两类文件时被重定义向。这个问题的发生,完美的诠释了我同事的口头禅,诡异的问题通常都是愚蠢的错误引入的。

参考资料

在网上搜索到一些材料,对于问题的定位起到了很大的作用,这里记录下来。文章来源地址https://www.toymoban.com/news/detail-777365.html

  • 关于favicon.ico的两三事
  • jQuery 1.9 RC1 and Migrate RC1 Released

到了这里,关于网站优化之favicon.ico的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何快速搭建网站(小白教程)(48小时内完成)

    做这个教程的起因是因为很久以前一次过情人节的时候玩了一手工科生的浪漫,给女朋友做了一个纪念网站。最近偶尔看看之前做的网站,回想起来也全都是幸福的回忆。网站整体的制作过程其实不难,但也确实有着不小的纪念意义,在这里也是想分享下制作网站的过程,为

    2024年01月23日
    浏览(35)
  • 使用Cloud Studio&Flutter完成全平台博客网站的搭建

    本文我将使用Cloud Studio 以及Flutter完成自己的一个博客平台的搭建。并且会将该项目作为模版,供大家使用。 先来看一下效果 Cloud Studio 是基于浏览器的集成式开发环境(IDE),为开发者提供了一个永不间断的云端工作站。用户在使用CloudStudio 时无需安 装,随时随地打开浏览器

    2024年02月16日
    浏览(29)
  • 将整个Jenkins发布到git,完成Jenkins备份,附上部署教程

    我们的Jenkins一般都是两种部署方式,一种是直接部署到机器上,另一种是部署在docker内,但是不管哪一种部署方式,都依赖于机器的存货性,下面咱这个也相当于一个备份方案吧,可以随便想部署到哪里就部署到哪里。 首先,大家要先了解Jenkins_home 这个目录内具体都代表什

    2023年04月08日
    浏览(34)
  • 从您输入网站 URL 到其在屏幕上完成加载的整个过程

    以下是从输入网站 URL 到其在屏幕上完成加载的整个过程: 1. 用户输入网站 URL(例如,http://www.example.com)并按下“Enter”键。 2. 网络协议根据 URL 中的信息确定要访问的服务器 IP 地址。 3. 网络协议建立与该服务器的 TCP 连接。 4. 网络协议通过 HTTP 请求向服务器发送请求。

    2024年02月07日
    浏览(25)
  • Hugging News #0717: 开源大模型榜单更新、音频 Transformers 课程完成发布!

    每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等,我们将其称之为「Hugging News」。本期 Hugging News 有哪些有趣的消息,快来看看吧!🎉 😍 Hugging Face 🤗 开源大

    2024年02月16日
    浏览(30)
  • 精选5大最强AI绘画网站,三步骤免费线上完成AI绘图!

    AI 绘画风潮叠起! 看到好多漂亮的AI 绘图作品,也想自己生成图片看看吗?或是想透过AI 绘画来获得灵感,或让抽象的想法具象化? 本文整理了5 款最强AI 绘图线上工具,以及教你如何4 步骤完成AI绘图的详细教学,不需要很懂代码或绘画,也能轻松生成令人惊艳的AI绘图作品

    2024年02月04日
    浏览(113)
  • 三分钟完成小程序 uni-app、网站接入chatgpt实现聊天效果

    1.实现后台接口 注册laf云开发账号 https://laf.dev/ 注册一个应用后进入这个页面: 下载依赖 chatgpt 配置apiKey 写send函数 配置你的apiKey 2.uni-app小程序代码中 //封装cloud 发送消息方法 微信小程序中使用 3.实现效果 在这里插入图片描述

    2024年02月11日
    浏览(31)
  • openresty安装与网站发布

    OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。 OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自

    2024年02月11日
    浏览(28)
  • 宝塔发布网站问题汇总和记录

    1、添加网站站点后打不开 解决办法,关闭防跨站攻击2 2、laravel项目部署到linux的时候出现The stream or file \\\"/home/www/storage/logs/laravel.log\\\" could not be opened in append mode 给目录加权限 3、Class \\\"Redis\\\" not found php中redis扩展没有安装,需要安装一下 4、数据库没有配置

    2024年01月18日
    浏览(20)
  • 解决:Hbuilder工具点击发行打包,一直报尚未完成社区身份验证,请点击链接xxxxx,项目xxx发布H5失败的错误。[Error]尚未完成社区身份验证

    全世界任何漂亮有魅力的女生,都不会因为你送她汉堡或奶茶而对你说我爱你,明白吗?你应该带她做一些特别的事情,让她感动。 [Error]尚未完成社区身份验证,请点击链接 https://ask.dcloud.net.cn/account/setting/profile 验证后再重新打包。如果验证后仍然提示此信息,请检查HBui

    2024年02月12日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包