Постоянно Запрашивая Сервер с помощью JavaScript - Хорошая Идея?

Кроме того, поскольку $this:: еще не обсуждался.

Только в информационных целях, начиная с PHP 5.3, когда имеешь дело с объектами, для которых создаются экземпляры, чтобы получить текущее значение области действия, в отличие от использования static::, можно альтернативно использовать $this:: следующим образом.

http://ideone.com/7etRHy

class Foo
{
    const NAME = 'Foo';

    //Always Foo::NAME (Foo) due to self
    protected static $staticName = self::NAME;

    public function __construct()
    {
        echo $this::NAME;
    }

    public function getStaticName()
    {
       echo $this::$staticName;
    }
}

class Bar extends Foo
{
    const NAME = 'FooBar';

    /**
     * override getStaticName to output Bar::NAME
     */
    public function getStaticName()
    {
        $this::$staticName = $this::NAME;
        parent::getStaticName();
    }
}

$foo = new Foo; //outputs Foo
$bar = new Bar; //outputs FooBar
$foo->getStaticName(); //outputs Foo
$bar->getStaticName(); //outputs FooBar
$foo->getStaticName(); //outputs FooBar

Использование приведенного выше кода не является обычной или рекомендуемой практикой, а просто иллюстрирует его использование и должно действовать как более "Знаете ли вы?" со ссылкой на оригинальный вопрос автора.

Он также представляет использование $object::CONSTANT, например, echo $foo::NAME;, в отличие от $this::NAME;

.

5
задан Sampson 22 June 2009 в 15:00
поделиться

13 ответов

3-4 пользователя каждые 30 секунд - это совсем немного. Даже 300 пользователей с такой скоростью - это совсем немного.

Вы можете проверить следующие вопросы:

Вы ] также может кэшировать это, и было бы целесообразно , особенно если запрос для генерации страницы требует больших вычислительных ресурсов , но, конечно же, следует учитывать, какую задержку вы хотите получить в самом последнем контенте. отображается.

4
ответ дан 13 December 2019 в 22:14
поделиться

Я думаю, что вы сделали великолепно.

Если бы я делал этот проект, я бы начал с того, что у вас есть, и добавил бы событие setTimeout () для увеличения отображения минут / секунд каждую секунду.

Пользователи будут воспринимать отображение в реальном времени, и они, вероятно, никогда не будут обновлять страницу.

Опасность с обновлением только каждые 30 секунд заключается в том, что некоторые люди рефлекторно нажимают «Обновить» для " последний "каждый раз, когда они обращают на это внимание.

Также подумайте о том, чтобы отмечать что-либо со временем менее пяти минут. И цветовое кодирование при входе в систему и выходе из системы. Людям будет легче «сканировать», потому что они смогут выделять изменения, не читая весь текст.

0
ответ дан 13 December 2019 в 22:14
поделиться

Есть несколько разных способов имитировать отправку сервера через HTTP. Такие методы недавно получили замысловатое название: Комета .

Если конфигурация вашего сервера допускает неограниченное выполнение скриптов, вы можете использовать iframe для реализации панели и использовать частичную передачу (например, через PHP flush () ) для создания постоянного HTTP-соединения. Такое решение должно иметь наименьшие накладные расходы, если временной интервал между последовательными сообщениями короткий. Для длительных интервалов опрос на стороне клиента предпочтительнее, так как TCP-соединение не должно поддерживаться.

0
ответ дан 13 December 2019 в 22:14
поделиться

Да, это не должно быть проблемой ни в малейшей степени.

При этом, если вас беспокоит количество отправляемых обратно данных, вы всегда можете отправить вызов верните простой флаг, ЕСЛИ есть новые данные, а затем перейдите к получению данных, если это так.

Но да, с таким количеством пользователей у вас не должно быть никаких проблем. Настраиваемая доска сообщений на основе RoR, которую я часто использую, использует похожую технику, чтобы увидеть, обновлялись ли потоки, пока вы ее читаете, и на нее одновременно без проблем обращаются более 100 пользователей.

0
ответ дан 13 December 2019 в 22:14
поделиться

That many users are not going to bring down your server.

If you are really concerned about performance, I will give you 2 advice:

  • Use JSON for sending data to the client, it will be lighter than formatted HTML.
  • Use fixed date for history data and compute the relative time on the client, it will allow you to cache the history data.

    {"user":"jsampson","action":"logged out","date":"20090622T170822"}

0
ответ дан 13 December 2019 в 22:14
поделиться

Вы видели предварительный просмотр Google Wave ...? Для такого небольшого числа это не проблема, тем более что администраторы об этом знают. (Это не значит, что вы загружаете процессор какого-либо посетителя или мобильное подключение к Интернету.)

0
ответ дан 13 December 2019 в 22:14
поделиться

Сравните это с альтернативой. Если бы каждый пользователь обновлял страницу каждые 30 секунд, загружая всю страницу, объем обработки на стороне сервера и генерируемый трафик были бы намного больше, чем просто обновление «интересных частей».

Это то, для чего был создан AJAX.

0
ответ дан 13 December 2019 в 22:14
поделиться

Я бы сказал, что это будет в первую очередь зависеть от того, насколько дорого стоит этот запрос.

Хотя сейчас небольшое количество пользователей, будет ли так всегда?

0
ответ дан 13 December 2019 в 22:14
поделиться

На мой взгляд, никаких проблем. Сайты, которые работают в гораздо большем масштабе (например, Betfair), используют сотни звонков в минуту на каждого подключенного клиента. Очевидно, что у них гораздо большая аппаратная инфраструктура, но браузер с этим справляется нормально.

У меня есть сайты, которые используют меньший интервал, и они масштабируются до нескольких сотен одновременных пользователей, работающих с одного веб-сервера.

1
ответ дан 13 December 2019 в 22:14
поделиться

Фактически, согласно этому объяснению , круговой импорт не будет работать так, как вы хотите: если вы раскомментируете import mod1 , второй модуль все еще не будет знать о Вселенной .

Думаю, это вполне разумно. Если оба ваших файла нуждаются в доступе к типу определенного объекта, например Universe , у вас есть несколько вариантов:

  • если ваша программа небольшая, просто используйте один файл
  • , если он большой, вы необходимо решить, нужно ли обоим файлам знать, как реализована Universe , возможно, передача объекта еще неизвестного типа в show_answer нормально
  • , если это не так работать на вас, непременно поместите Universe в отдельный модуль и сначала загрузите его.
0
ответ дан 13 December 2019 в 22:14
поделиться

Нет, никаких проблем быть не должно. Я делаю то же самое с интервалом в 1 минуту для системы уведомлений, которую написал на портале внутренней сети моей компании. Честно говоря, любой веб-сервер должен уметь справляться с этим.

Это действительно не хуже (на самом деле, значительно лучше), чем они, скажем, обновляют свой браузер каждые 30 секунд ... Учитывая значительно меньший объем передаваемых данных, это, вероятно, будет что-то в масштабе 10-20 раз лучше, чем обновление его ... или примерно такая же пропускная способность обновления раз в 5-10 минут. : -)

1
ответ дан 13 December 2019 в 22:14
поделиться

Вы должны кэшировать это и обновлять кеш только каждые 30 секунд.

4
ответ дан 13 December 2019 в 22:14
поделиться

Как указал altCognito, веб-трафик от этого, скорее всего, не будет проблемой.

Единственное, что я проверю, это будет ли загрузка базы данных, необходимая для этого, вопрос. Т.е. если это будет подано запросом, выполнение которого требует некоторого времени, это вызовет проблемы. Если это так, я бы рекомендовал добавить кеширование данных или сохранить данные для этого в памяти вместо БД (только загрузка из БД при запуске и добавление вещей в этот список в серверной памяти как они случаются).

0
ответ дан 13 December 2019 в 22:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: