@kana_sahanov
фронтенд-разработчик в компании "Кликобилие"

Отложенная подгрузка блоков на лендинг пейдж?

Здраствуйте! Я верстальщик в фирме которая занимается разработкой лендингов. И от меня аналитики требует чтобы сайты грузились за одну-две секунды, что почти невозможно с такими дизайнами как у лендингов (длинный, многоблочный сайт, который изобилует картинками и эффектами). И я решил сделать отложенную подгрузку блоков.
Вот код:
Репозиторий выглядит так:
project
|--build
|   |--js
|      |--scripts.js
|--parts
|   |--file1.inc.php
|   |--file3.inc.php
|   |--...
|--index.php

HTML:
  первый блок
  второй блок
  третий блок
  <div class="ajax-load" id="file1"></div>
  <div class="ajax-load" id="file2"></div>

JS:
//  ******************* Ajax page partials load *******************
var ajaxPath = '../../parts/';
var ajaxExtension = '.inc.php';
var ajaxId = $('.ajax-load').first().attr('id');

//Инициализация при прокрутке
$("#load-start").waypoint(function(direction){
	if(direction !== 'up'){
		$('.ajax-load').first().load(
			ajaxPath + ajaxId + ajaxExtension, 
			function( response, status, xhr ) {
				if ( status == "error" ) {
					var msg = "Произошла ошибка, пожалуйста обновите страницу!";
					$( "#" + $(this).attr(id) ).html("<h2 class='ajax__error'>" + msg + "</h2>");
				}else{
					nextId = $(this).next('.ajax-load').attr('id');
					ajaxLoader(nextId);
				}
			}
		);
	}
}, { offset: 600 });

//Рекурсивная функция подгрузки блоков
function ajaxLoader(id){
	$('#' + id).load(
		ajaxPath + id + ajaxExtension, 
		function( response, status, xhr ) {
			if ( status == "error" ) {
				var msg = "Произошла ошибка, пожалуйста обновите страницу!";
				$( $(this) ).html("<h2 class='ajax__error'>" + msg + "</h2>");
			}else{
				nextId = $(this).next('.ajax-load').attr('id');
				ajaxLoader(nextId);
			}
		}
	);
}
//  ******************* Ajax page partials load *******************


Логика следующая:
Я написал на jquery рекурсивную функцию ajaxLoader которая вызывается при инициализации прокрутки(плагином waypoint). И он начинает вызывать саму себя пока блоки с классом ajax-load не закончатся. По крайней мере я хотел так сделать =), код сырой и его можно еще пилить и пилить, если есть ошибки то пожалуйста отпишитесь.

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

А теперь вопрос! Правильно ли таким образом подгружать файлы? Быват так что скорость интернета плохая и js не подгружается и получается сайт весь кривой получается.

Может кто-то знает другие способы, более надежные. Так как я джуниор, то думаю есть более опытные товарищи которые уже сталкивались с такими проблемами и решили их.
  • Вопрос задан
  • 5426 просмотров
Пригласить эксперта
Ответы на вопрос 3
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Я хоть даже и не джуниор, но на подгрузке блоков не сэкономишь почти ничего, а вот грузить картинки отложено вполне.
Гуглить image lazy load
Например вот такой плагин
www.appelsiini.net/projects/lazyload
Ответ написан
@asdz
Почему в вашей фирме вопрос быстродействия сайта относится только к компетенции верстальщика?
Ответ написан
@maxyc_webber
Web-программист
Мы грузим всю статику в конце файла. сначала html загрузится, потом подключается css, js и в js уже регулируется какие библы и в каком порядке подключать и на каких страницах. lazy loading нужно делать.

вариант с подгрузкой кода как у вас выглядит очень печально (сама идея)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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