2

我正在编写一个 Media-HUD,它完全在存储在 prim 库存中的本地记事卡文件上运行,记事卡命名为 index.html、style.css、icon.svg 等。

我希望使用 LSL HttpServer 功能和脚本的 URL 创建一个完全独立的基于媒体的 HUD,它像编辑任何网页一样易于编辑。

这完全可以自行完成,但是有一个限制,即页面必须适合分配给 LSL 脚本的内存。在单声道下,这只有 64kb。

我想通过某种方式消除这个限制,也许是从javascript中,从用户浏览器本身的记事卡中逐行读取每个“文件”(因此,通过一次只将一个记事卡行放入内存来绕过内存限制)。

有没有办法做到这一点?通过加载逐行组成的字符串以程序方式在javascript中生成整个文件,然后将其作为整个文件提供?我不确定这有多可行。

非常感谢任何想法/指导!

4

2 回答 2

3

您可以使用XMLHttpRequest通过 Javascript 执行此操作。jQuery 的包装器称为Ajax。您可以单独请求每一行,这会稍微慢一些,或者在脚本空闲时一次读取多行。http_request 没有受到限制,因此两者都可以。请注意,加载程序必须在单个响应中发送,因为 LSL 服务器无法像实际服务器那样“零碎”地推送数据。

笔记:

  • llGetNotecardLine 仅返回每行的前 255 个字节。
  • llHTTPResponse 必须在请求后约 20 秒内调用,因此您一次无法从记事卡中读取超过 20 行。
  • 我不确定这对非 DOM 文件类型如何工作。所有文件都需要使用 Javascript DOM 嵌入到 HTML 中。据我所知,Javascript 不能任意创建外部文件并将其提供给自己。显然它不适用于非文本文件类型,但您当然可以加载其余的 HTML、CSS 和 HTML5 SVG。基本上,如果它可以放在单个 HTML 文件中,则可以通过 Javascript 加载它。

我没有使用React的经验,但它提供了一个很好的例子,说明了纯粹通过 Javascript 加载内容在 UI 方面的可能性。

于 2018-01-22T00:07:09.413 回答
2

所以每个脚本最多在内存中少于 64,000 个字符。我会给你一些建议,使你的任务可行:

外部资源

通过从 Web BootstrapReact等中获取流行的库,最大限度地减少您必须在记事卡中包含的代码量。您将不得不依赖他们镜像的可用性思想。但这将大大减少提供漂亮和功能页面所需的内存量。

缩小你的代码

使用UglifyClosure Compiler等工具让您的 javascript 更轻量级。尽管您必须小心,因为这些工具默认情况下会将您的所有代码放在一个长行中,并且您无法使用 LSL 读取超过 255 个字符的行。幸运的是,您可以在这些工具中自定义选项以限制每行的字符数。

分而治之

由于单个脚本无法处理大量内存,因此请制作专用脚本。一个可以提供资源(充当文件服务器,提供您的 html 和 js),而另一个将接收 API 请求调用,以处理应用程序的逻辑。

于 2018-03-20T04:33:33.597 回答