2016-07-04 2 views
0

На моем веб-сайте www.runthisday.com есть JavaScript, который тянет около страницы до 50% ширины экрана пользователя, а нажатие других компонентов влево, чтобы освободить место для страницы.Улучшение скорости JavaScript

Проблема заключается в том, что когда пользователь впервые нажимает кнопку about, этот JavaScript очень медленный, потому что Chrome ждет загрузки изображений. Для другого веб-браузера JavaScript выполняется быстро, но изображения занимают второе место для загрузки. После первого использования кнопки слайд отлично работает. Но это в первый раз действительно имеет значение.

Есть ли способ исправить это, чтобы JavaScript работал быстро, и изображения появляются сразу при нажатии кнопки? Направляли ли пользователи на страницу загрузки исправить это? Если да, можете ли вы направить меня куда-нибудь, что покажет мне, как я могу использовать JavaScript для загрузки сайта таким образом.

Я очень ценю помощь.

+4

Вам нужно уменьшить размер изображения. Ваше изображение молотка - это разрешение 5000x3333px, размер его области содержимого и качество сохранения в фотошопе или gimp примерно до 50% при сохранении. Прямо сейчас вы занимаетесь большими объемами данных изображения, когда файлы должны быть только 15-20% от их текущего размера ... просто отметить, что в Javascript нет ничего плохого, этот вопрос чисто основан на активах – Alex

+0

Вы также можете сначала загрузите изображение с низким разрешением (и очень быстро), возможно даже вне экрана, перед тем, как появится окно с сообщением, и сначала отобразите, что THEN загрузит ваше полное изображение res и заменит низкое значение res, когда это будет сделано. Я бы также предложил уменьшить количество пикселей, хотя 5000x3333 очень большой. Ответ [здесь] (http://stackoverflow.com/a/467943/4098951) может помочь вам. –

+0

Также рассматривайте прямо сейчас изображение 5000x3333 чрезвычайно интенсивно использует полосы пропускания для мобильных пользователей, загрузка страницы может в конечном итоге обходиться им в несколько МБ данных и будет загружаться очень медленно, часто это означает, что они не будут загружаться на ваш сайт. – Alex

ответ

4

Ваши изображения огромный. Поэтому начните с изменения размера этих данных до более удобного размера.

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

// Url -> Promise<ImageElement> 
 
var image = function(src) { 
 
    return new Promise(function(pass, fail) { 
 
    var i = new Image() 
 
    i.src = src 
 
    i.onload = event=> pass(i) 
 
    }) 
 
} 
 
    
 
var url = "http://www.runthisday.com/img/the_hammer.jpg" 
 
image(url).then(elem => document.body.appendChild(elem))

Вы можете даже использовать Promise.all обертку для обеспечения нескольких изображений загружены для конкретной секции

Promise.all([ 
    image('one.jpg'), 
    image('two.jpg'), 
    image('three.jpg') 
]).then(images => console.log("all images loaded", images) 
0

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

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

Смежные вопросы