【问题标题】:Random word on webpage every 1/10th of a second网页上每 1/10 秒随机出现一个单词
【发布时间】:2012-05-20 20:12:25
【问题描述】:

我正在为一个艺术项目开发一个基于 Web (javascript) 的小型“应用程序”。这个东西叫做“诗歌生成器”,它是一个根据用户输入生成随机诗歌的脚本。

脚本必须每 1/10 秒向用户显示一个随机单词。使用的词表有 109.582 个词。

我已经尝试了不同的解决方案:

  1. 将所有单词放在一个文本文件中,然后随机获取文本文件的一行 -> 太慢(用户必须下载一个 3MB 的文本文件才能使用该应用程序)
  2. 将所有单词放入 Javascript 中的数组中。 -> javascript 数组显然无法处理 109.585 个项目
  3. 使用带有 Javascript 间隔函数的 jQuery 的 Ajax 函数从数据库中提取单词 -> 这个解决方案在我的本地主机上测试时效果很好,但是一旦上传到一个真实的 Web 环境,这个方法被证明太慢了。 (我可以想象,如果我每秒对他们的服务器执行 10 次查询,我的托管服务提供商不会那么高兴。)

所以.. 有没有人知道我可以使用另一种方法在网页上每隔 1/10 秒显示一个随机单词?不一定非要使用php或javascript,只要在浏览器中运行,我就开心!

提前致谢

泰斯

【问题讨论】:

  • 将您的 3 MB 文件拆分为较小的文件,然后以随机顺序下载。当它们下载时,您仍然可以开始从已有的块中提取随机单词。
  • 您是否尝试过 2 和 3 的组合,但修改 3 的方式是随机取 600,因此您只需每分钟对服务器执行一次查询

标签: php javascript mysql ajax web-applications


【解决方案1】:

没有理由必须每十分之一秒提取整个数据集。每分钟从数据库中提取合理的数量(大约 600 个单词),将其加载到本地 javascript 对象中,然后对其进行迭代。

当数组索引变得足够高或计时器达到一分钟时,轮询另一组 600。

在处理低至十分之一秒的时间时,您不希望每次都调用服务器!您甚至可以将整个数据集加载到 memcached 并轮询随机词,从而在整个数据集加载到内存时跳过代价高昂的数据库调用。

【讨论】:

  • 打我一拳 - 这是要走的路
  • 嗯,我自己应该可以考虑的 :) 非常感谢!
  • 没问题。更新为 memcached 选项,这可能有点矫枉过正,呵呵。
  • 这有一些好处。最好的一点是,您根本不需要在 JS 端进行任何随机化 - 只需将单词一一显示,其余的留给服务器。这有一个额外的好处,即从 JS 中的小数据集中随机挑选单词有很高的重复单词风险,而且它不是一个好的分布,因为客户端随机化只适用于较小的数据集,即你运行的风险很高在该子集中重复单词,但您无法从子集中随机选择单词。
【解决方案2】:

您可以尝试仅将一部分单词加载到您的 JS 数组中。 也许您可以尝试从数据库中仅加载 1000 个(随机)单词并显示它们。

【讨论】:

    【解决方案3】:

    只要你不需要生成超长的文本,你可以将随机化分为两个步骤:

    首先在服务器端预选一些词(比如说——5000?)

    那么,客户端,用JS从预选的词中随机挑选一些。

    优点:不需要额外的请求; JS 应该处理那么大的数组

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多