”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Google Analytics 和 WPO 分析器

Google Analytics 和 WPO 分析器

发布于2024-11-07
浏览:893

Google Analytics and WPO Analyzers

我旧帖子的翻译:Google Analytics 和 WPO 分析器

我越来越多地看到针对 Google PageSpeed Insights(和其他 WPO 分析器)的批评,因为许多人认为 Google 自己的旗舰跟踪服务 Google Analytics 被标记为错误是矛盾的。 “但这是同一家公司的!”,你可以听到他们说。

Google Analytics 与其他跟踪服务一样,在网站加载期间会消耗大量资源。值得称赞的是,像 Google PageSpeed Insights 这样的服务会标记这一点,以便您可以对其进行优化。对我来说,如果不这样做,它就会失去作为 WPO 工具的可信度。然而,我知道不了解优化的人可能会责怪该工具。这让我想起了伊索寓言《狐狸和葡萄》。

用于优化 Google Analytics 脚本的选项之一是将其托管在您自己的服务器上并设置到期日期,以便浏览器可以缓存它。这是谷歌不推荐的做法,这是可以理解的,因为它失去了随时更新代码的能力。如果您不选择此选项,根据 Google 的说法,您可以通过设置 CRON 作业每隔几个小时下载 Google Analytics 脚本来轻松克服此问题。

另一个选项(与前一个选项完全兼容),也是我使用的选项,是当有人在页面上滚动时加载 Google Analytics 脚本。这可能看起来有害,因为它可能会让您认为它不会跟踪所有用户。然而,在我看来,它会给出更准确的指标:

  • 首先,它不会跟踪那些快速点击您网站上的链接并在意识到错误后立即离开的人。
  • 它不会跟踪机器人、蜘蛛或以普通用户身份出现的类似实体(因为它们不会发送识别其真实性质的用户代理标头)。

此外,这是一个最佳选择,因为一旦其他所有内容都已加载(因此不会减慢任何内容),脚本就会加载,并且在用户浏览您的网站时透明地加载。

下面是实现这一点的 JavaScript 代码:

/**
 * Google Analytics and WPO Analyzers - WebPerf - Manuel Canga
 * From post: https://trasweb.net/snippets/google-analytics-and-wpo-analyzers
 */

var is_analytics_loaded = false;

load_googleAnalytics = function () {
    if (is_analytics_loaded) {
        return false;
    }

    (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
    })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

    ga('create', 'UA-xxxx', 'auto');
    ga('send', 'pageview');

    is_analytics_loaded = true;
};


window.addEventListener("scroll", function () {
    if (document.documentElement.scrollTop !== 0 || document.body.scrollTop !== 0) {
        load_googleAnalytics();
    }
}, true);

第25行第29行,我们告诉浏览器,当访问者滚动时(触发滚动事件,滚动条位置不再位于顶部) ,应该执行 load_googleAnalytics 函数。此函数通过标志检查(第 9 至 12 行)Analytics 是否已加载到当前页面上。如果没有,则加载跟踪脚本(第 13 至 19 行)。请注意,在 第 18 行 中,插入了 Google Analytics ID。最后,在第21行中,激活该标志以防止脚本再次加载。


喜欢的话别忘了分享哦。

版本声明 本文转载于:https://dev.to/manuelcanga/google-analytics-and-wpo-analyzers-5coa?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 将 SQLite 迁移到 MySQL。
    将 SQLite 迁移到 MySQL。
    我介绍一下自己,我是 Alfredo Riveros,我已经学习编程多年了,我目前正在 Río Tercero 高等商业学院学习软件开发高级技术员,下面我将描述我面临的挑战遭遇。 正如标题所说,我的目标是将 SQLite 数据库迁移到 MySQL,这是由我正在接受的数据库主题中的作业引起的。 我选择...
    编程 发布于2024-11-08
  • 在 Mageia 9 上安装 ASDF
    在 Mageia 9 上安装 ASDF
    今天我们要在 Mageia 9 上安装 ASDF。接下来的步骤是将插件安装到 PHP 和 Node.js。 要在版本 0.14.1 上安装 ASDF,我使用了 Git ZSH 版本: git克隆 https://github.com/asdf-vm/asdf.git ~/.asdf --branch...
    编程 发布于2024-11-08
  • 优化性能:为数据透视表选择最佳数据源
    优化性能:为数据透视表选择最佳数据源
    TL;DR: Syncfusion Pivot Table connects to multiple data sources, making it a versatile tool for data analysis. Selecting the right data source is cruc...
    编程 发布于2024-11-08
  • 使用 Secrets Loader 轻松管理 Laravel 和 JS 项目
    使用 Secrets Loader 轻松管理 Laravel 和 JS 项目
    跨各种环境管理 API 密钥、令牌和凭证等敏感数据可能非常棘手,尤其是在开发和部署应用程序时。确保秘密在需要时安全地存储和获取,而不是将它们硬编码到版本控制中,对于维护安全性至关重要。 这就是为什么我创建了 Secrets Loader,这是一个 Bash 脚本,可以动态地将 AWS SSM 和 C...
    编程 发布于2024-11-08
  • 如何在 Android 中正确实现 CheckBox 的侦听器?
    如何在 Android 中正确实现 CheckBox 的侦听器?
    Android 中的 CheckBox 侦听器在 Android 中实现 CheckBox 侦听器时,必须解决使用标准时面临的常见问题OnCheckedChangeListener 类。标准实现的目标是 RadioGroup 而不是 CheckBox。要解决此问题,请改用CompoundButton...
    编程 发布于2024-11-08
  • Firestore 如何优化社交网络时间线以实现可扩展性?
    Firestore 如何优化社交网络时间线以实现可扩展性?
    使用 Firestore 优化社交网络时间线在设计具有提要和关注功能的社交网络时,数据库可扩展性对于处理潜在问题至关重要大型数据集。 Firebase 的实时数据库带来了可扩展性挑战,特别是在存储用户时间线的方法方面。要解决这些问题,请考虑过渡到 Firestore。优化的数据库结构Firestor...
    编程 发布于2024-11-08
  • 如何解决将对象数组作为函数参数传递时的错误?
    如何解决将对象数组作为函数参数传递时的错误?
    类型提示:对象数组将对象数组作为参数传递给函数时,如果未指定参数类型。例如,考虑以下代码:class Foo {} function getFoo(Foo $f) {}尝试将 Foo 对象数组传递给 getFoo 将导致致命错误:Argument 1 passed to getFoo() must ...
    编程 发布于2024-11-08
  • 为什么 iOS 设备上缺少 CSS 滚动条?
    为什么 iOS 设备上缺少 CSS 滚动条?
    iOS上无法显示带有CSS Overflow的滚动条为iPad开发网站时,使用CSS属性overflow: auto来启用div 内的滚动条可能无效。尽管两指滚动手势功能正常,但滚动条仍然隐藏。尝试同时使用溢出:自动和溢出:滚动不会产生任何结果。iOS行为不幸的是,溢出:自动和滚动都不会在iOS设备...
    编程 发布于2024-11-08
  • Java中如何从线程操作返回值?
    Java中如何从线程操作返回值?
    线程操作返回值在多线程编程中,线程之间的交互往往需要交换数据。一种常见的情况是尝试检索在单独线程中执行的操作的结果。请考虑下面的示例代码:public void test() { Thread uiThread = new HandlerThread("UIHandler"...
    编程 发布于2024-11-08
  • Python 简介:)
    Python 简介:)
    历史 Python 由 Guido van Rossum 创建,首次发布于 1991 年。它旨在优先考虑代码的可读性和简单性,从而提高开发人员的工作效率。 “Python” 的灵感来自 BBC 电视节目 “Monty Python's Flying Circus”,van ...
    编程 发布于2024-11-08
  • 学习 Go 结构最终如何让我爱上编码
    学习 Go 结构最终如何让我爱上编码
    “我仍然记得早期与代码搏斗的日子。 基本的东西?我正要到那里。但后来出现了结构体,一切都变得模糊起来。我不断地破坏东西,我的代码一团糟。我做错了什么? 直到我坐下来,学习了 Go 结构体的基础知识,并开始有效地使用它们,事情才终于有了进展。那是转折点。突然间,代码变得更有组织、更高效、更干净。它改变...
    编程 发布于2024-11-08
  • MERN 堆栈仍然有效吗?
    MERN 堆栈仍然有效吗?
    Remember when the MERN stack was the Beyoncé of web development stacks? It was everywhere, and if you weren’t using it, you were probably missing out ...
    编程 发布于2024-11-08
  • 什么时候需要在 Tkinter 中调用 `mainloop()`?
    什么时候需要在 Tkinter 中调用 `mainloop()`?
    在 Tkinter 应用程序中调用 mainloop在 Tkinter 中,mainloop 是实现窗口渲染和事件处理的基本功能。与流行的看法相反,并不总是需要在交互式 shell 环境中显式调用 mainloop。然而,这种便利在 shell 之外并不适用。mainloop 的作用mainloop...
    编程 发布于2024-11-08
  • 如何解决将静态 C 库与 C++ 代码链接时出现“未定义的引用”错误?
    如何解决将静态 C 库与 C++ 代码链接时出现“未定义的引用”错误?
    对用 C 代码链接静态 C 库时的错误的未定义引用当尝试用 C 代码链接静态 C 库时,您可以尽管修改了链接顺序,但仍遇到“未定义的引用”错误。此问题是由 C 和 C 编译创建的不同符号名称(称为“名称修饰”)引起的。在 C 中,链接器在错误消息中显示分解的符号名称,这可能会造成混淆。使用“nm -...
    编程 发布于2024-11-08
  • 书籍:学习 JavaScript 设计模式
    书籍:学习 JavaScript 设计模式
    本书探讨了 JavaScript 中常见软件设计模式的实现和使用。虽然根据最新的最佳实践,一些示例可能稍微过时,但它们对于维护遗留系统的人来说仍然很有价值。 对于初学者: 它是对软件设计模式的出色介绍。然而,对于那些编程经验有限的人来说,这些模式解决的问题可能不太熟悉。 ...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3