【发布时间】:2016-05-16 18:28:27
【问题描述】:
所以我们有一个带有 Node.js 的后端工具,可以抓取 HTML 网页的 img 标签。我们使用工作者 child_process 执行此操作,以免阻塞主进程。我们在服务器上这样做的原因是因为我们在尝试使用 AJAX / 使用 Angular $http 访问 HTML 页面时遇到了 CORS 问题。
当后端网络爬虫完成后,它可以向浏览器发送一个 url 列表。浏览器可以对与这些 url 相关的图像发出 AJAX 请求,但据我所知,前端会遇到与检索 HTML 相同的 CORS 问题。
所以我们目前对这个问题有一个相当糟糕的解决方案。我们使用 Cloudinary 来完成繁重的工作,而不是我们的 Node.js 服务器处理 base64。后端工作者 child_process 抓取 HTML,获取图像 url,然后向 Cloudinary 发送请求以检索图像并将新的 Cloudinary url 发送回我们的服务器。然后我们将 Cloudinary url 发送到前端,前端可以访问这些 Cloudinary url 而不会出现任何 CORS 问题。
这样做有两个问题:
- 这相当慢 - 抓取大约需要 2 秒,然后等待 Cloudinary 保存图像并响应另一个 2-4 秒。所以浏览器需要等待大约 4-6 秒。
- 我们最终在 Cloudinary 中存储了大量图像,这将变得昂贵。我们最终可以删除我们保存的大约 90% 的图像 在此过程之后立即,因为用户只会 选择出现在浏览器中的图像之一,但我们是 担心即使图像可能会产生的成本 在 Cloudinary 上停留几秒钟。
有没有人遇到过这些问题并认为他们有比我们使用的更好的解决方案?
【问题讨论】:
-
为什么客户端必须通过 Ajax 请求图像?如果您只想在网页中显示图像,则通过
<img>标签加载图像没有跨域限制。 -
啊非常有趣...所以我们可以动态地将 img 标签插入到我们的前端 html 给定从我们的服务器发送的 url 列表,这将加载图像的预览...是对吗?
-
我不是真正的前端开发人员,所以我对此了解不多!
-
是的,没错。您的服务器可以将 URL 提供给前端。然后,前端可以在其中插入带有正确 URL 的
<img>标签,无论它们来自哪个来源,它们都会显示在页面中。我将此评论放在下面的答案中。
标签: javascript angularjs node.js image cloudinary