我知道至少有你们中的两个人最终使用了原始的 设计引言 API。这只是一个实验,但它确实起到了作用,因为它是一种简单的方法,可以快速将随机的设计相关引言添加到任何网站,并提供完整的 CSS 控制。
它最大的弱点是,在使用它的每个网站的每个页面加载时,它都必须访问数据库。虽然这是一个很小且快速的查询,但它仍然不是一个非常有效的方法。
我现在已将其更新至 v2.0,它的工作方式大致相同,但速度快得多。
更改
- 将包裹 div 的 ID 名称更改为更具体的 “qod-quotes”
- 加载速度更快
- 每 2 分钟仅更改一次引言
我做了什么
JavaScript(实际上是伪装的 PHP)不再每次都访问数据库,它只是从 一个文本文件 加载引言内容。这个文本文件的内容由一个脚本覆盖,该脚本每 2 分钟从数据库中读取一个随机的引言(服务器上的 CRON 作业会触发它)。我相信,这就是所谓的“贫民窟缓存”。
未来
随着我对这些东西的了解越来越多,我最终希望有一些关于它返回内容的选项。JSON 或 XML 是一个很有可能的选择。一些预先格式化的选项也是一个可能的选择。
使用它
这就是全部
<div id="qod-quote">
... loading ...
</div>
<script type="text/javascript" src="//quotesondesign.com/api/api-2.0.js"></script>
哈哈,你完全用上了我的台词 :)
100% 是你 =)
“贫民窟缓存”
哈哈,太棒了。
也许你可以改进一下 API ;)
首先,你使用
window.onload = getQuote("qod-quote");
但window.onload = function() {
更适合使用参数调用 getQuote(或者如果有一天你想调用多个函数)。getQuote('qod-quote');
};
另外,我认为使用 load 事件不好,因为浏览器会一直等待所有资源加载完毕(包括图像),所以你应该尝试在 DOM 就绪时调用 getQuote,Jay Salvat 发布了一段用于执行此操作(无需使用 JS 库)的小代码:“When DOM is ready (fr)”
最后,如果你打算使用 JSONP 或 XML 创建一个 API,选择 JSONP,因为它比 XML 更轻便:)。
仅供参考。
奇怪的是,引言似乎在 load 事件之前就加载了……
这里的一部分理论是,我认为在页面本身完全加载之前不加载引言会更不引人注目,这样就没有办法添加它会减慢你的网站速度。这种理论是否合理?
很好,我之前没有想到这一点,所以你使用 load 事件是正确的,抱歉。
嘿,Chris,这个理论是合理的,但是实现会用你的事件替换任何现有的“onload”事件。但是,使用 onload 事件很重要……我刚刚完成了一个小部件项目,它在某些情况下搞砸了 IE6。
我认为如果需要帮助,我可以为 v.3.0 开发一个精简版本。有什么最佳方法可以将一些内容发送给你看看?
“JavaScript(实际上是伪装的 PHP)不再每次都访问数据库,它只是从一个文本文件加载引言内容。”
但是,你仍然要访问服务器进行文件读写。从一次数据库调用到每 2 分钟进行一次文件读取调用 + 文件写入调用的性能提升是什么?你是否有任何前后对比的指标?
除了以前感觉迟缓现在感觉很敏捷之外,我没有其他指标。我想,一种消除额外服务器访问的方法是每两分钟实际更改 JS 文件,将引言硬编码到其中,但我不知道这是否是一个好主意(可能会遇到缓存问题)。
我并不真正了解,但我怀疑从文本文件读取比执行数据库查询(尤其是随机提取记录的查询)要快得多。
有趣的是,我认为情况正好相反。我似乎在某处读到,服务器瓶颈发生在文件读写上,而不是数据库查询。我认为拉取一个随机记录不会让它变得更慢,假设你使用的是标准的 ORDER BY RAND(),并且我猜想我们这里只谈论几百条记录。
我想你可以设置两个测试页面,在开始/结束时使用 PHP 的 time(),然后将时间相减,但这可能无关紧要。
我认为你的 2 分钟 CRON 作业有点过分,我可能会一天执行两次,但这只是我个人的观点。
对于未来的屏幕录制想法,如果能够看到你逐步创建这个 API 的过程会很酷,尤其是如果你能够将其设置为返回其他数据格式。
我同意一天两次(或者如果你想的话,可以三次)。我认为 2 分钟有点过分,就像取消冒泡所说。即使在白天添加了新的引言,你已经有了足够的引言可以使用,直到下一个 CRON 作业执行。为什么需要在 2 分钟内包含新的引言?这只是我个人的观点……
设计引言这个想法,以及 API,都是一个很棒的想法!
太棒了!
嗨,Chris,我使用的是 IE 8,我看到的是我的边栏变得很疯狂,最终什么也看不到。它一直在不停地加载。谁知道它什么时候会停止。但我从未在 IE 8 中看到你展示的内容
这个项目很棒!;)
@Chris
为什么不使用服务器端脚本(例如 Web 服务)来提供 xml、json、html 和文本数据?这样,开发人员就可以通过 php(或其他服务器端语言)或使用 ajax 的 javascript 获取引言,而“普通”网站管理员/博主可以使用像当前这样的“更快的 api”来获取引言!
抱歉,英语不好
再见
Marco
不错。:-)
你没有使用 blockquote(带 cite 属性)(而不是 div)是否有特殊原因?
这很酷。有没有办法只调用较短的引号?我使用的是固定的页脚高度,而长的引号让我很头疼。只是问问……:)
顺便说一下,Chris,你可能想做一个PHP for Noobs系列,即使它不在CSS-Tricks主题范围内,因为很快我们这些菜鸟就要与个人主页的疯狂作斗争了……
这对开发者很有帮助。