Как я мешаю веб-странице прокрутить к вершине, когда на ссылку нажимают, который инициировал JavaScript?

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

  • кэширование кода операции, которое кэширует скомпилированный байт-код сценариев php. Вы можете увидеть тест здесь (хотя и в более старой статье): http://itst.net/654-php-on-fire-three-opcode-caches-compared Примечание: я настоятельно рекомендую использовать кэширование кода операции .

  • Кэширование пользовательских данных - APC и другие делают это. Это будут ваши справочные данные или данные, которые довольно статичны и не часто меняются. Вы можете очищать кэш каждый день или запускать очистку кеша при изменении этих справочных данных. Это также настоятельно рекомендуется, поскольку обычно справочные данные используются часто и не часто меняются.

  • Кэширование SQL-запросов - я знаю, что Zend облегчает эту задачу с помощью простой настройки. Поскольку эти запросы не меняются, это еще один очевидный (как вы упомянули)

Дополнительные (если возможно):

  • кэширование html-страниц - очевидно, что кэширование статической страницы происходит быстрее, чем сгенерированной, и, как правило, это трудно сделать, поскольку большинство страниц в приложениях настолько динамичны. Стоит, если вы можете это сделать, хотя, если ваши запросы кэшируются, а ваш SQL прост, я бы не стал на этом фокусироваться.

  • кэширование результатов sql - лично я держусь от этого подальше. Я позволю базе данных делать свою работу и то, что она делает лучше всего, так как СУБД обычно имеет кеширование. Я могу кэшировать результаты для потока выполнения (т. Е. Я только что получил это, так что не делайте это снова), но я не намного выше этого.

Я успешно использовал APC и eAccelerator (мне лично нравится работать с APC, и он предполагал кэширование кода операции и кэширование пользовательских данных для моих справочных данных и запросов sql). Используйте XDebug для профилирования вашего кода.

133
задан Mark Amery 24 February 2015 в 13:52
поделиться

5 ответов

You need to prevent the default action for the click event (i.e. navigating to the link target) from occurring.

There are two ways to do this.

Option 1: event.preventDefault()

Call the .preventDefault() method of the event object passed to your handler. If you're using jQuery to bind your handlers, that event will be an instance of jQuery.Event and it will be the jQuery version of .preventDefault(). If you're using addEventListener to bind your handlers, it will be an Event and the raw DOM version of .preventDefault(). Either way will do what you need.

Examples:

$('#ma_link').click(function($e) {
    $e.preventDefault();
    doSomething();
});

document.getElementById('#ma_link').addEventListener('click', function (e) {
    e.preventDefault();
    doSomething();
})

Option 2: return false;

In jQuery:

Returning false from an event handler will automatically call event.stopPropagation() and event.preventDefault()

So, with jQuery, you can alternatively use this approach to prevent the default link behaviour:

$('#ma_link').click(function(e) {
     doSomething();
     return false;
});

If you're using raw DOM events, this will also work on modern browsers, since the HTML 5 spec dictates this behaviour. However, older versions of the spec did not, so if you need maximum compatibility with older browsers, you should call .preventDefault() explicitly. See event.preventDefault() vs. return false (no jQuery) for the spec detail.

193
ответ дан 23 November 2019 в 23:58
поделиться

Простой подход - использовать этот код:

<a href="javascript:void(0);">Link Title</a>

Этот подход не вызывает принудительное обновление страницы, поэтому полоса прокрутки остается на месте. Кроме того, он позволяет программно изменять событие onclick и обрабатывать привязку событий на стороне клиента с помощью jQuery.

По этим причинам приведенное выше решение лучше, чем:

<a href="javascript:myClickHandler();">Link Title</a>
<a href="#" onclick="myClickHandler(); return false;">Link Title</a>

, где последнее решение позволит избежать проблемы с прокруткой, если и только если метод myClickHandler не завершился ошибкой.

26
ответ дан 23 November 2019 в 23:58
поделиться

Попробуйте следующее:

<a href="#" onclick="return false;">My Link</a>
7
ответ дан 23 November 2019 в 23:58
поделиться

Ссылка на что-то более разумное, чем верх страницы. Затем отмените событие по умолчанию.

См. Правило 2 прагматического прогрессивного улучшения .

3
ответ дан 23 November 2019 в 23:58
поделиться

Возврат false из кода, который вы вызываете, будет работать, и в ряде обстоятельств это предпочтительный метод, но вы также можете это

<a href="javascript:;">Link Title</a>

Когда дело доходит до SEO, это действительно зависит от того, что ваша ссылка будет использоваться для. Если вы собираетесь использовать его для ссылки на какой-либо другой контент, я бы согласился, что в идеале вам понадобится что-то значимое здесь, но если вы используете ссылку для функциональных целей, возможно, как Stack Overflow делает для панели инструментов публикации (жирный, курсив, гиперссылка и т. д.), то это, вероятно, не имеет значения.

12
ответ дан 23 November 2019 в 23:58
поделиться
Другие вопросы по тегам:

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