Определенно возможно получить доступ к членам парламента, не занимающим официального поста со смещением указателя в C++. Позволяет предполагают, что у меня было следующее определение типа, к которому я хотел получить доступ.
class Bar {
SomeOtherType _m1;
int _m2;
};
Принятие там не является никакими виртуальными методами в Панели, легкий случай является _m1. Участники в C++ хранятся как смещения ячейки памяти объекта. Первый объект при смещении 0, втором объекте при смещении sizeof (первый участник), и т.д.
, Таким образом, вот способ получить доступ к _m1.
SomeOtherType& GetM1(Bar* pBar) {
return*(reinterpret_cast<SomeOtherType*>(pBar));
}
Теперь _m2 является немного более трудным. Мы должны переместить исходный указатель sizeof (SomeOtherType) байты из оригинала. Бросок для обугливания должен гарантировать, что я увеличиваю в байтовом смещении
int& GetM2(Bar* pBar) {
char* p = reinterpret_cast<char*>(pBar);
p += sizeof(SomeOtherType);
return *(reinterpret_cast<int*>(p));
}
Это очень плохая идея по всем указанным причинам и многим другим. Тем не менее, вот как это сделать с помощью jQuery :
<body>
<div id="msg" style="font-size:largest;">
<!-- you can set whatever style you want on this -->
Loading, please wait...
</div>
<div id="body" style="display:none;">
<!-- everything else -->
</div>
<script type="text/javascript">
$(document).ready(function() {
$('#body').show();
$('#msg').hide();
});
</script>
</body>
Если у пользователя отключен JavaScript, он никогда не увидит страницу. Если страница никогда не завершает загрузку, они никогда не увидят страницу. Если страница загружается слишком долго, они могут предположить, что что-то пошло не так, и просто перейти в другое место вместо * пожалуйста, подождите ... * ing.
Вы можете начать с того, что главная страница индекса вашего сайта будет содержать только сообщение "Загрузка". Отсюда вы можете использовать ajax для получения содержимого вашей следующей страницы и встраивания его в текущую, после удаления сообщения «Загрузка».
Возможно, вы сможете обойтись простым включением контейнера сообщения загрузки в папку в верхней части страницы, которая имеет 100% ширину / высоту, а затем удаляет указанный div по завершении загрузки.
Последний вариант может работать некорректно в обеих ситуациях и будет зависеть от того, как браузер отображает контент.
Я не совершенно уверен, что это хорошая идея. Для простых статических сайтов я бы сказал нет. Однако в последнее время я видел много тяжелых сайтов с javascript от дизайнерских компаний, которые используют сложную анимацию и представляют собой одну страницу.
Хотя я согласен с другими, что вам это не нужно, я просто кратко объясню, что вы можете сделать, чтобы немного изменить ситуацию, не заходя полностью и фактически блокируя контент, который уже есть - может быть, этого будет достаточно, чтобы порадовать и вас, и ваших посетителей.
Браузер начинает загрузку страницы и позже обработает внешние CSS и js, особенно если место css / js связанный находится в «правильном» месте. (Я думаю, что советую загружать js как можно позже и использовать внешний CSS, который вы загружаете в заголовок). Теперь, если у вас есть какая-то часть ваших css и / или js, которую вы хотели бы применить как можно скорее, просто включите ее в саму страницу. Это будет противоречить советам инструментов повышения производительности, таких как YSlow, но, вероятно, приведет к увеличению изменения вашей страницы, отображаемой так, как вы хотите, чтобы она отображалась. Используйте это только тогда, когда это действительно необходимо!
Хотя это не всегда хорошая идея, вы можете решить, действительно ли вы хотите это сделать. Есть несколько разных способов сделать это, и я нашел здесь простой пример:
http://www.reconn.us/content/view/37/47/
Возможно, не лучший, но он должен помочь вам разработать собственное решение. Удачи.
Также убедитесь, что сервер буферизует страницу и не немедленно (при построении) передает ее в браузер клиента.
Поскольку вы не указали свой стек технологий :
Есть безусловно, допустимое использование для этого. Один из них - запретить людям нажимать на ссылки / вызывать события JavaScript до тех пор, пока не загрузятся все элементы страницы и JavaScript.
В IE вы можете использовать переходы между страницами, что означает, что страница не отображается, пока она не будет полностью загружена:
<meta http-equiv="Page-Enter" content="blendTrans(Duration=.01)" />
<meta http-equiv="Page-Exit" content="blendTrans(Duration=.01)" />
Обратите внимание на короткую продолжительность. Достаточно лишь убедиться, что страница не отображается до тех пор, пока она не будет полностью загружена.
В FireFox и других браузерах я использовал решение, которое я использовал, чтобы создать DIV, который является размером страницы и белый, затем в самом конце страницы вставьте JavaScript, который его скрывает. Другой способ - использовать jQuery и также скрыть его. Не так безболезненно, как решение IE, но оба работают хорошо.
Я думаю, что это действительно плохая идея. Пользователи любят видеть прогресс, простой и понятный. Удержание страницы в одном состоянии в течение нескольких секунд, а затем мгновенное отображение загруженной страницы заставит пользователя почувствовать, что ничего не происходит, и вы, вероятно, потеряете посещения.
Один из вариантов - показать статус загрузки на вашей странице во время чего-либо процессы в фоновом режиме, но обычно это зарезервировано для тех случаев, когда сайт фактически выполняет обработку ввода данных пользователем.
http://www.webdeveloper.com/forum/showthread.php?t=180958
Итог , вам, по крайней мере, нужно показать некоторую визуальную активность во время загрузки страницы, и я думаю, что загрузка страницы небольшими частями не так уж и плоха (при условии, что вы не делаете что-то, что серьезно замедляет время загрузки страницы) .
Вы можете скрыть все, используя какой-нибудь css:
#some_div
{
display: none;
}
, а затем в javascript назначить функцию для document.onload, чтобы удалить этот div.
jQuery упрощает подобные вещи.
обязательно: "use jQuery"
Я видел страницы, которые помещали черный или белый div, покрывающий все наверху страницы, а затем удаляли его в событии document.load. Или вы можете использовать .ready в jQuery . Как уже было сказано, это была одна из самых раздражающих веб-страниц, которые я когда-либо видел, я бы посоветовал не использовать ее .
Вот решение, использующее jQuery:
<script type="text/javascript">
$('#container').css('opacity', 0);
$(window).load(function() {
$('#container').css('opacity', 1);
});
</script>
Я поставил этот скрипт сразу после моего тега
. Просто замените "#контейнер" на селектор для DOM-элементов, которые вы хотите скрыть. Я пробовал несколько вариантов этого (включая .hide()
/.show()
и .fadeOut()
/.fadeIn()
), и простая настройка непрозрачности, кажется, имеет наименьшее количество плохих эффектов (мерцание, изменение высоты страницы и т.д.). Вы также можете заменить css('непрозрачность', 0)
на fadeTo(100, 1)
для более плавного перехода. (Нет, fadeIn()
не сработает, по крайней мере, под jQuery 1.3.2.)
Теперь предостережения: Я реализовал вышесказанное, потому что я использую TypeKit, и есть раздражающее мерцание, когда вы обновляете страницу, а шрифты загружаются за несколько сотен миллисекунд. Поэтому я не хочу, чтобы какой-то текст появлялся на экране до тех пор, пока TypeKit не загрузится. Но очевидно, что у вас большие проблемы, если вы используете код выше, и что-то на вашей странице не загружается. Есть два очевидных способа его улучшить:
Я не буду утруждать себя реализацией индикатора загрузки здесь, но ограничение по времени очень простое. Просто добавьте это в скрипт выше:
$(document).ready(function() {
setTimeout('$("#container").css("opacity", 1)', 1000);
});
Так что теперь, в худшем случае, ваша страница займет дополнительную секунду.
.