@z_u_q

Как оптимизировать скорость работы функции?

Написал функцию, которая добавляет в конец троеточие, если количество строк больше заданного в атрибуте data.

$(window).on('load', function() {

		var fullText=$('.i-ellips').text();

		function ellipsis() {

			console.time('ellipsis');

			var ellips = $('.i-ellips');
			var isOverflow = ellips.css('overflow') === 'hidden';

			if (isOverflow) {
				ellips.css('visibility', 'hidden');
				var text = fullText;
				var lineHeight = parseFloat(ellips.css('line-height'));

				var lineCount = ellips.attr('data-ellipsis');
				// var lineCount = ellips[0].dataset.ellipsis;
				var maxHeight = lineHeight * lineCount;

				ellips.text(fullText);

				var searchSpace = (text.indexOf(' ') !== -1 ) ? ' ' : '\u3000';
				var separateText = text.split(searchSpace);
				var str = '';


				console.time('ellipsis-foreach');

				for (var i = separateText.length; i >= 0; i--) {
					if (ellips[0].offsetHeight <= maxHeight) {
						console.log(i);
						break;
					} else {
						str = separateText.slice(0, i).join(searchSpace);

						ellips.text(str + '...');
					}
				}

				ellips.css('visibility', 'visible');

				console.timeEnd('ellipsis-foreach');
			}

			console.timeEnd('ellipsis');
		};

		ellipsis();
		$(window).on('resize', ellipsis);
	  
	});


На цикл тратится около где-то 30.60205078125ms.
На всю функцию - 36.9501953125ms

Как я увидел, значительное время уходит на эту строку
ellips.text(str + '...');

Что можно сделать? Как оптимизировать время работы метода text?

Ссылка на пример
  • Вопрос задан
  • 92 просмотра
Пригласить эксперта
Ответы на вопрос 2
@ns5d
нечего сказать
var str = '';

for() {
    str += '...';
}

ellips.text(str);
Ответ написан
IceRD
@IceRD
быстрее использовать просто css text-overflow: ellipsis;
https://developer.mozilla.org/en-US/docs/Web/CSS/t...
или просто отрезать необходимое кол-во символов и добавить "..."
вот еще пример https://codepen.io/siiron/pen/jfBhy
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы