Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Нужна помощь: удалить jquery


Recommended Posts

Приветствую всех форумчан и заранее спасибо всем, кто поможет или , хоть, постарается...

Ситуация следующее - заказчик принял решение сменить дизайн и максимально оптимизировать сайт по pagespeed. В разрезе этого принято решение заменить jquery на собственные JS. Можно ли вообще удалить jquery и сталкивался ли кто-то с этим на практике?

P.S.: Да - гуглил, нет - нет такой информации и на английском тоже.

Надіслати
Поділитися на інших сайтах


Порада
Не треба фрагментувати опенкарт на костилі.
Та ще практично 90% модулів які застосовують JS використовують jQuery
Оптимізувати під Core Web Vitals (PageSpeed) можна і не видаляючи jQuery
 

Надіслати
Поділитися на інших сайтах

02.12.2023 в 02:53, ArtR сказал:

заказчик принял решение сменить дизайн и максимально оптимизировать сайт по pagespeed.

С собственным будет такая же фигня, если не больше. Сам фрейморк не при чем. Есть сайт не выдает параметр expires для скриптов и стилей (и картинок), то спид это определяет и дает рекомендации - отсюда и пляшите.

  • +1 1
Надіслати
Поділитися на інших сайтах

Можно. Например, Bootstrap  v5.3.2 без него работает.
А для Ajax использую кастомный код:

Скрытый текст
Ajax = function(url, setting) {
	if (typeof url == 'object') {
		setting = url;
		if (typeof setting['url'] === 'undefined') {
			return false;
		} else {
			url = setting['url'];
		}
	}

	if (typeof setting['headers'] !== 'object') {
		setting['headers'] = {};
	}

	if (typeof setting['type'] === 'string') {
		setting['method'] = setting['type'];
	}

	if (typeof setting['method'] !== 'string') {
		setting['method'] = 'GET';
	}

	if (typeof setting['responseType'] !== 'string') {
		setting['responseType'] = 'json';
	}

	if (typeof setting['dataType'] !== 'string') {
		setting['dataType'] = 'text';
	}

	if (typeof setting['data'] === 'undefined') {
		setting['data'] = '';
	}

	if (typeof setting['async'] !== 'boolean') {
		setting['async'] = true;
	}

	if (typeof setting['user'] === 'undefined') {
		setting['user'] = null;
	}

	if (typeof setting['password'] === 'undefined') {
		setting['password'] = null;
	}

	if (typeof setting['beforeSend'] !== 'function') {
		setting['beforeSend'] = function() {};
	}

	if (typeof setting['success'] !== 'function') {
		setting['success'] = function() {};
	}

	if (typeof setting['error'] !== 'function') {
		setting['error'] = function() {};
	}

	if (typeof setting['complete'] !== 'function') {
		setting['complete'] = function() {};
	}

	if (typeof setting['debug'] === 'boolean') {
		setting['debug'] = false;
	}

	var i, datanew = null, xhr = new XMLHttpRequest();

	setting['beforeSend'](xhr, setting);

	if (setting['data']) {
		if (setting['dataType'] == 'json') {
			datanew = JSON.stringify(setting['data']);
		} else {
			if (typeof setting['data'] == 'object') {
				var arrayData, arrayDatas = function(data, gi) {
					var i, ii, iii, array, arrayg;

					array = {};

					for (i in data) {
						if (gi) {
							ii = gi + '[' + encodeURIComponent(i) + ']';
						} else {
							ii = encodeURIComponent(i);
						}
						if (typeof data[i] == 'object') {
							arrayg = arrayDatas(data[i], ii);
							for (iii in arrayg) {
								array[iii] = encodeURIComponent(arrayg[iii]);
							}
						} else {
							array[ii] = encodeURIComponent(data[i]);
						}
					}

					return array;
				}

				arrayData = arrayDatas(setting['data']);

				if ('FormData' in window) {
					datanew = new FormData();

					for (i in arrayData) {
						datanew.append(i, arrayData[i]);
					}
				} else {
					datanew = [];

					for (i in arrayData) {
						datanew.push(i + '=' + arrayData[i]);
					}

					datanew = datanew.join('&').replace(/%20/g, '+');
				}
			} else {
				datanew = setting['data'];
			}
		}
	}

	xhr.open(setting['method'], url, setting['async'], setting['user'], setting['password']);
	xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
	if (!('FormData' in window)) {
		if (setting['dataType'] == 'json') {
			xhr.setRequestHeader('Content-type', 'application/json; charset=UTF-8');
		} else if (setting['dataType'] == 'text') {
			xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded; charset=UTF-8');
		}
	}

	for (i in setting['headers']) {
		xhr.setRequestHeader(i, setting['headers'][i]);
	}

	if (setting['responseType']) {
		xhr.responseType = setting['responseType']; //\"text\" – строка,\"arraybuffer\", \"blob\", \"document\", \"json\" – JSON (парсится автоматически).
	}

	if (setting['debug']) {
		console.log('xhr data: ', datanew);
	}

	xhr.onload = function(e) {
		if (e.target.status == 200) {
			setting['success'](e.target.response, e.target);
			setting['complete'](e.target, setting, e.target.response);
		} else {
			setting['error'](e.target, setting, false);
			setting['complete'](e.target, setting, false);
		}
	};
	xhr.send(datanew);

	return xhr;
};

 

html

<script>
	Ajax({
		url: 'index.html',
		method: 'POST',
		responseType: 'document',
		data: {param: 1},
		headers: {
			'X-Requested-With': 'XMLHttpRequest'
		},
		success: function(data, xhr) {
			window.console.log(data, xhr);
		},
		error: function(xhr) {
			window.console.log(xhr);
		},
		complete: function(xhr) {
			window.console.log(xhr);
		}
	});
</script>

 

 

  • +1 1
Надіслати
Поділитися на інших сайтах

В 02.12.2023 в 17:38, buslikdrev сказав:

Можно. Например, Bootstrap  v5.3.2 без него работает.
А для Ajax использую кастомный код:

 

Це все то так, але якщо потім замовник почне ставити модулі, коже модуль треба перероблювати якщо він з jquery? Краще оптимізувати сторінку і залишити jquery

Надіслати
Поділитися на інших сайтах

03.12.2023 в 10:44, bogdan281989 сказал:

Це все то так, але якщо потім замовник почне ставити модулі, коже модуль треба перероблювати якщо він з jquery? Краще оптимізувати сторінку і залишити jquery

Не ставить модули, а писать свои качественные, быстрые. Человек способный оплатить качественный сайт - не нуждается в модулях.

  • +1 1
Надіслати
Поділитися на інших сайтах

Огромное спасибо  buslikdrev!
И да - модули и прочая дичь это - зло, на фронте всё можно вывести без модулей. Сама суть вопроса - убрать зависимость от модулей и максимально всё обрабатывать на фронте. Это не касается бек модулей, типа импорта товаров и т.д.. На сколько я понял - они живут отдельно  в папке admin, там я трогать ничего и не буду от слова "вообще", а из catalog хочу убрать и BS. А есть какая-то документация в принципе по логике работы CMS, как у Ворд пресса, на пример..? На сайте и в гугл результатах всё очень бедненько описано.

02.12.2023 в 16:38, buslikdrev сказал:

А для Ajax использую кастомный код:

А можно по этому вопросу чуть побеспокоить в ЛС?

 

Змінено користувачем ArtR
Надіслати
Поділитися на інших сайтах


06.12.2023 в 04:48, ArtR сказал:

А можно по этому вопросу чуть побеспокоить в ЛС?

 

Спрашивайте.

Надіслати
Поділитися на інших сайтах

06.12.2023 в 03:48, ArtR сказал:

Огромное спасибо  buslikdrev!
И да - модули и прочая дичь это - зло, на фронте всё можно вывести без модулей. Сама суть вопроса - убрать зависимость от модулей и максимально всё обрабатывать на фронте. Это не касается бек модулей, типа импорта товаров и т.д.. На сколько я понял - они живут отдельно  в папке admin, там я трогать ничего и не буду от слова "вообще", а из catalog хочу убрать и BS. А есть какая-то документация в принципе по логике работы CMS, как у Ворд пресса, на пример..? На сайте и в гугл результатах всё очень бедненько описано.

А можно по этому вопросу чуть побеспокоить в ЛС?

 

Я конечно всё понимаю. Альтернативно одаренные люди есть. Но как человек, который задаёт тупой вопрос про jQuery собирается на чистом js переписать тонну кода от разработчиков движка и модулей. 

 

И второй вопрос в копилку альтернативной одарённости. А не пробовал ли топик стартёр читнуть немного про методики оптимизации проектов под требования google?

 

Реально после опенкарт5 от известных фантастов. Это дичь #2 в моем рейтинге постов за 2023 год.

Надіслати
Поділитися на інших сайтах


  • 2 weeks later...
06.12.2023 в 03:48, ArtR сказал:

Огромное спасибо  buslikdrev!
И да - модули и прочая дичь это - зло, на фронте всё можно вывести без модулей. Сама суть вопроса - убрать зависимость от модулей и максимально всё обрабатывать на фронте. Это не касается бек модулей, типа импорта товаров и т.д.. На сколько я понял - они живут отдельно  в папке admin, там я трогать ничего и не буду от слова "вообще", а из catalog хочу убрать и BS. А есть какая-то документация в принципе по логике работы CMS, как у Ворд пресса, на пример..? На сайте и в гугл результатах всё очень бедненько описано.

А можно по этому вопросу чуть побеспокоить в ЛС?

 

Ну вам ведь не только верстку из папочки View переделывать нужно будет под отсутствие Jquery, а еще в контроллерах, не модулей, а самого опенкарта проверить и почистить вставленные библиотеки ($this->document->addScript), которые зависят от jquery. 

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

975a35cs-960.jpg.f82e5d57cc9262979e87cab7bf0afd4b.jpg

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.