Javascript StackOverflow如何在不造成延迟的情况下提供标记文本的预览?

Javascript StackOverflow如何在不造成延迟的情况下提供标记文本的预览?,javascript,jquery,html,ajax,markdown,Javascript,Jquery,Html,Ajax,Markdown,我正在制作一个采用降价语法的博客。我希望能够提供一个更新的预览每击键,就像Stackoverflow在提问和回答问题时所做的那样。我目前的解决方案非常滞后 Stackoverflow如何实施他们的解决方案,在不造成延迟的情况下提供最新的降价文本预览? 目前,我在post content文本区域中的每次击键时都会向服务器发出一个AJAX调用。服务器清理内容并返回HTML。然后用新的HTML更新预览div: $('#post-content').bind('input propertychange'

我正在制作一个采用降价语法的博客。我希望能够提供一个更新的预览每击键,就像Stackoverflow在提问和回答问题时所做的那样。我目前的解决方案非常滞后

Stackoverflow如何实施他们的解决方案,在不造成延迟的情况下提供最新的降价文本预览?

目前,我在
post content
文本区域中的每次击键时都会向服务器发出一个AJAX调用。服务器清理内容并返回HTML。然后用新的HTML更新
预览
div:

$('#post-content').bind('input propertychange', (function() {
    var content = {"content": this.value};
    $.ajax({
        ...
        success: function(data) {
            $('#preview').html(data['content']);
        }
        ...
    });
 }));
这不太好用。如果我全速打字,文本区域将丢失大约1/3的字符。我的服务器是一个小型的500MB RAM虚拟机。我不确定服务器是否是瓶颈,但我不明白为什么textarea会因为AJAX调用缓慢而滞后-在我看来,这一行是瓶颈:

$('#preview').html(data['content']);
但我对前端开发了解不够,无法对此进行推测

StackOverflow如何在不造成延迟的情况下提供标记文本的预览

它们将文本本地存储在客户端浏览器上,没有服务器或数据库往返

这可以通过检查代码来验证

StackOverflow如何在不造成延迟的情况下提供标记文本的预览

它们将文本本地存储在客户端浏览器上,没有服务器或数据库往返


这可以通过检查代码来验证,创建AJAX调用是导致延迟的原因。我还没有仔细看过,但我可以向您保证,StackOverflow不会每次都通过服务器调用来验证和预览降价。他们只是用Javascript来代替。创建AJAX调用是造成延迟的原因。我还没有仔细看过,但我可以向您保证,StackOverflow不会每次都通过服务器调用来验证和预览降价。他们只是用Javascript来代替。

不要在每次击键时向服务器发送AJAX调用!让预览使用客户端的内容,并且仅在提交帖子/评论时使用服务器。

不要在每次击键时向服务器发送AJAX调用!使预览在客户端使用某些内容,并且仅在提交帖子/评论时使用服务器。

堆栈溢出会在客户端呈现预览,这就是某些标记未被清除的原因。AJAX调用(尤其是很多调用)是不必要的,因为大多数计算机在没有服务器帮助的情况下也可以轻松地进行调用


如果您注意到,语法突出显示在几秒钟内不会触发,因为每次键入字符时都会触发语法突出显示,这样做效率很低。

堆栈溢出会呈现预览客户端,这就是为什么一些标记没有被清除的原因。AJAX调用(尤其是很多调用)是不必要的,因为大多数计算机在没有服务器帮助的情况下也可以轻松地进行调用

如果您注意到,语法突出显示在几秒钟内不会触发,因为每次键入字符时都会触发语法突出显示,这样做效率很低。

目前,我在每次击键时都会向服务器发出AJAX调用

我不会转述其他说这是一个糟糕策略的答案和评论。也就是说,如果您无法将渲染移动到客户端,并且如果您准备降低对速度的期望,则可以使用此解决方案(用户1106925在评论中提到):

  • 定义一个300毫秒的计时器
  • 每次击键都会重置计时器
  • 当计时器超时时,对服务器进行AJAX调用
这将大大减少AJAX调用的数量。用户不必按“渲染”按钮(他只需停止键入),因此它会修改您当前的UI

这是所使用的策略(虽然不是使用markdown)。

目前,我在每次击键时都会向服务器发出AJAX调用

我不会转述其他说这是一个糟糕策略的答案和评论。也就是说,如果您无法将渲染移动到客户端,并且如果您准备降低对速度的期望,则可以使用此解决方案(用户1106925在评论中提到):

  • 定义一个300毫秒的计时器
  • 每次击键都会重置计时器
  • 当计时器超时时,对服务器进行AJAX调用
这将大大减少AJAX调用的数量。用户不必按“渲染”按钮(他只需停止键入),因此它会修改您当前的UI


这是使用的策略(虽然不使用markdown)。

大多数库都可以在浏览器中执行“目前,我在每次击键时都会向服务器发出AJAX调用…”老实说?是的,这将是一个巨大的瓶颈。更不用说这些调用的异步性质了。嗯,也许问题是AJAX调用非常慢。。。但这只是一个猜测……如果你真的想让服务器来处理这个问题(尽管我不知道为什么会这样),最好是成批地处理字符。另外,在发送另一个请求之前,您会中止先前的请求。但是想要实时更新和服务器处理似乎是相互冲突的要求。大多数库都可以在浏览器中实现“目前,我在每次击键时都会对服务器进行AJAX调用…”老实说?是的,这将是一个巨大的瓶颈。更不用说这些调用的异步性质了。嗯,也许问题是AJAX调用非常慢。。。但这只是一个猜测……如果你真的想让服务器来处理这个问题(尽管我不知道为什么会这样),最好是成批地处理字符。另外,在发送另一个请求之前,您会中止先前的请求。但是想要实时更新和服务器处理似乎是相互冲突的要求。当你提交文本时,他们会使用服务器,原因很明显。@Bálint同意,yes同意:)Th