本地主机上的 usleep() VS Repl.it

发布于 2025-01-10 04:06:21 字数 489 浏览 0 评论 0原文

我目前正在学习PHP,所以我正在做一些培训,我遇到了一个我不明白的问题。

我在 Repl.it 上写了几行代码:

$msg = "Once upon a time...";

for ($i=0; $i < strlen($msg); $i++) {
  echo '<span>'.$msg[$i].'</span>';
  usleep(100000);
}

这里的代码按预期运行(至少按照我想要的那样),也就是说,一个字符在另一个字符之后显示,每个字符之间有几毫秒的延迟。例如,像 RPG 对话框一样。

现在,我将代码导入到 Visual Studio 中,并在本地主机上使用 Xampp 运行它,并且只有在整个循环完成工作后才会显示所有内容。 因此,在本例中,对于 19 个字符长的“Once Upon a time...”,它会加载 100.000 ms * 19,然后我会立即显示整个消息。

对我有什么提示吗? :)

I'm currently learning PHP so I'm doing some training, and I've come to a problem that I don't understand.

I wrote a few lines of code on Repl.it :

$msg = "Once upon a time...";

for ($i=0; $i < strlen($msg); $i++) {
  echo '<span>'.$msg[$i].'</span>';
  usleep(100000);
}

Here the code is running as intended (at least as I wanted it to), which is, one character is displayed after the other with a few milliseconds of delay between each. Like in RPG dialog boxes, for instance.

Now I imported my code to Visual Studio and ran it with Xampp on localhost, and everything is displayed only after the whole loop is done working.
So, in this case, with "Once upon a time...", which is 19 character long, it loads for 100.000 ms * 19, and then I have the whole message displayed at once.

Any hint for me? :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

煞人兵器 2025-01-17 04:06:21

PHP 在服务器上运行。默认情况下,服务器会等到页面完全生成后再将结果发送给客户端。

您可以结合使用ob_flush()(刷新PHP输出缓冲区)和flush()(刷新系统输出缓冲区)来实现您想要的:

$msg = "Once upon a time...";

for ($i=0; $i < strlen($msg); $i++) {
  echo '<span>'.$msg[$i].'</span>';
  usleep(100000);

  ob_flush();
  flush();
}

但是,我我认为最好是在服务器端尽可能快,并让 javascript 处理客户端的精美渲染。

PHP runs on the server. By default, the server waits until the page is totally generated before sending the result to the client.

You can use a combination of ob_flush() (flush the PHP output buffer) and flush() (flush the system output buffer) to achieve what you want :

$msg = "Once upon a time...";

for ($i=0; $i < strlen($msg); $i++) {
  echo '<span>'.$msg[$i].'</span>';
  usleep(100000);

  ob_flush();
  flush();
}

However, I think it would be better to be as quick as possible on the server side, and let javascript handles the fancy rendering on the client side.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文