【问题标题】:How to eliminate the excessive HTTP requests when using pinterest "pin it" buttons?使用 pinterest “pin it” 按钮时如何消除过多的 HTTP 请求?
【发布时间】:2012-04-06 06:30:47
【问题描述】:

相关:How can i rerender Pinterest's Pin It button?


their goodies page 上展示的pinterest 网站“固定”按钮的设计要求网页设计师在他们的网页中插入一个特别标记的锚标记。然后页面必须调用pinit.js boilerplate

特殊的锚标记必须是这样的:

<a href="http://pinterest.com/pin/create/button/?
    url=http%3A%2F%2Fpage%2Furl
    &media=http%3A%2F%2Fimage%2Furl" 
   class="pin-it-button" count-layout="horizontal"></a>

并且 pinit.js 样板必须看起来像这样,并且必须放在 最后一个 pin 之后。

<script type="text/javascript" src="//assets.pinterest.com/js/pinit.js">
</script>

据我所知,pinit.js 代码的作用是这样的:

  • 扫描页面寻找锚标签
  • 查找特殊标记,特别是“pin-it-button”类和 href 前缀
  • 用重新格式化的 IFRAME 替换锚标记。这些 iframe 的 src 属性获取规范化的 URL,这些 URL 指向一个不同的服务器,而不是 pinterest.com,而是 pinterest 使用的 CDN 中的一个服务器。

这在静态网页上很好,但是:

  • 它不适用于动态页面,其中“固定”按钮可能通过 jquery 逻辑动态生成并注入页面标记以响应用户操作。
  • 每个“pin it”按钮需要一个 iframe,这意味着每个“pin it”按钮需要一个 HTTP GET。如果你有 10 张照片,每张都有一个 pinit 按钮,那么就有 10 个 HTTP GET 到 pinterest 的 CDN。所有这些 GET 都用于名称相似的资源,但根据要固定的图像的 url,它们都略有不同,因此无法缓存。

我想做的是消除过多的 GET。有任何想法吗?


我的一个想法是:

  • 在样式为display:none; 的 div 中准确插入一个锚标记。
  • 调用 pinit.js,这会神奇地替换该锚标记,并加载新的 iframe。它是不可见的,因为它仍然驻留在不可见的 div 中。
  • 运行一些额外的 JS 逻辑来检查生成的 iframe 的 src 属性上的 URL,保存 pinterest CDN 的主机名。
  • ?

然后我可以为 pinterest CDN 生成“规范化”URL,但是...如果我只是将它们用作 iframe 的 src我的逻辑生成,那么我也会遇到同样的问题获取。我所做的只是消除了对 pinit.js 的连续调用(无论如何都是可缓存的)。

有人遇到过这种情况吗?

我必须相信这种设计会发生变化——它似乎无法像现在这样对 pinterest 进行扩展。


编辑

我读到elsewhere 说 pinterest 为页面上的“固定”按钮提供了“异步”机制,适用于有很多“固定”按钮的情况。不知道那是什么;我找不到它。

【问题讨论】:

    标签: javascript jquery iframe pinterest


    【解决方案1】:

    我正在回答我自己的问题。

    我查看了但无法从 pinterest 找到描述如何解决此问题的任何详细文档。我认为他们的 API 太新,太不成熟,无法涵盖这一点。

    我发现的问题是,对于每个“固定”按钮,都有一个 IFRAME,并且 iframe 从 pinterest CDN 加载源。 10 张图片意味着 10 个 iframe 和 10 个 HTTP GET。

    我确实找到了一种在网页上插入单个按钮的方法,该按钮允许用户固定 10 个图像中的任何一个。这是通过the pinmarklet.js script, provided by pinterest 发送的。但是,那个脚本对我不起作用,而且它有几个错误,所以我修改了它以适应我的目的。

    现在,当我单击“固定”按钮时,它只填充一个 IFRAME,只需要一个 HTTP GET,无论页面上有多少照片可用。用户界面如下所示:

    ...虽然你可以把它做成任何你喜欢的东西,我猜。

    我解决了哪些问题?

    pinmarklet 是

    (a) 笨拙。它定义了一个匿名脚本,一个页面需要 每次需要弹出 pinterest 时重新请求 JS 交互形式。没必要。让我们做一次。

    (b) 坏了。有几个错误,包括竞争条件 在试图确定图像的自然大小的代码中。 由于那个错误,pinmarklet 表单有时不会显示。 跛脚!

    我修改了代码来修复这些问题,它现在运行良好,对我来说。

    http://pastebin.com/y5fBRJHc

    【讨论】:

    • 无需编辑 Pinterest 的 JS。查看链接的问题和/或this
    • 如果您想避免我提到的竞争条件,则需要编辑 JS。但也许自从我回答这个问题以来,pinterest 已经在 2 年内解决了这个问题。很有可能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    相关资源
    最近更新 更多