Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Интересные ссылки и их обсуждение (https://javascript.ru/forum/offtopic/45898-interesnye-ssylki-i-ikh-obsuzhdenie.html)

kobezzza 08.07.2014 09:35

Банк полифилов

Octane 08.07.2014 12:05

Цитата:

Сообщение от kobezzza
Банк полифилов

Полифил для промисов там вообще неправильный
Цитата:

Сообщение от jonathantneal/polyfill
(function () {
	function Promise(resolver) {
		var
		self = this,
		then = self.then = function () {
			return Promise.prototype.then.apply(self, arguments);
		};

		then.fulfilled = [];
		then.rejected = [];

		function timeout(state, object) {
			then.state = 'pending';

			if (then[state].length) setTimeout(function () {
				timeout(state, then.value = then[state].shift().call(self, object));
			}, 0);
			else then.state = state;
		}

		then.fulfill = function (object) {
			timeout('fulfilled', object);
		};

		then.reject = function (object) {
			timeout('rejected', object);
		};

		resolver.call(self, then.fulfill, then.reject);

		return self;
	}

	Promise.prototype = {
		'constructor': Promise,
		'then': function (onFulfilled, onRejected) {
			if (onFulfilled) this.then.fulfilled.push(onFulfilled);
			if (onRejected) this.then.rejected.push(onRejected);

			if (this.then.state === 'fulfilled') this.then.fulfill(this.then.value);

			return this;
		},
		'catch': function (onRejected) {
			if (onRejected) this.then.rejected.push(onRejected);

			return this;
		}
	};

	Promise.all = function () {
		var
		args = Array.prototype.slice.call(arguments),
		countdown = args.length;

		function process(promise, fulfill, reject) {
			promise.then(function onfulfilled(value) {
				if (promise.then.fulfilled.length > 1) promise.then(onfulfilled);
				else if (!--countdown) fulfill(value);

				return value;
			}, function (value) {
				reject(value);
			});
		}

		return new Promise(function (fulfill, reject) {
			while (args.length) process(args.shift(), fulfill, reject);
		});
	};

	window.Promise = Promise;
})();

1. then должен возвращать новое обещание
2. нет методов race, reject, resolve
3. из-за использования setTimeout будут лишние задержки по 3-5мс и длительные в бэкграунде
4. возвращенный из then инстанс промиса в качестве value никак не обрабатывается
5. thenable value не поддерживается
6. ...

----
по другим полифилам:

Object.create не фиксит баг в IE9-11 http://webreflection.blogspot.ru/201...re-broken.html.
Заявлена поддержка IE6+, но Object.keys не фиксит баг со стандартными не enumerable свойствами.
DOMTokenList вынесен в отдельный конструктор, но привязан к className, тоесть не имеет смысла вне classList polyfill.
Примитивная реализация Function.prototype.bind, будет неправильно работать с конструкторами.
Element.prototype.matches выдаст неправильный результат, если элемент не находится в DOM-дереве.
getComputedStyle что-то там пытается привести к общему виду в единицах измерения, но одно из самого нужного - opacity никак не фиксит.
Полифилами для Array iteration methods вообще лучше не пользоваться, они проходят по несуществующим свойствам в отличие от стандартных.


----------
Моя подборка полифилов будет получше :)
https://github.com/Octane/jsCore#polyfill

kobezzza 08.07.2014 13:00

Цитата:

Моя подборка полифилов будет получше
https://github.com/Octane/jsCore#polyfill
Лайк :)

Ну я просто сегодня наткнулся на ту ссылку и думал, что будет интересно другим.

kobezzza 09.07.2014 09:17

Язык Dart утверждён ассоциацией Ecma в качестве международного стандарта

melky 09.07.2014 13:41

Operating system kernel built on V8 JavaScript engine

kobezzza 09.07.2014 13:47

Цитата:

Сообщение от melky (Сообщение 320207)

Я уже постил про это :)

Цитата:

В рамках проекта Runtime.JS развивается ядро ОС на базе JavaScript-движка V8

BETEPAH 09.07.2014 14:11

Может сбояню, если что, удалите этот пост, но не смог удержаться, чтоб к подборкам полифилов не добавить эту ссылку:
http://html5please.com/ - полифилы + фолбэки

Zend 09.07.2014 14:16

Цитата:

Сообщение от BETEPAH
полифилов

прочитал "педофилов".... долго думал.... ё**ный maximus!

nerv_ 09.07.2014 18:13

Десктопный хром может эмулировать мобильные устройства
Chrome DevTools for Mobile: Screencast and Emulation

Octane 09.07.2014 18:28

Удаленная отладка недоступна для стандартного андроид браузера, надо либо хром ставить, который ставится далеко не на каждый телефон, либо искать для тестов андроид 4.4+

А в эмуляторе какие-то странные юзер агенты, для более менее современных телефонов выдает адроид 2.2 и очень не хватает нормального Pinch, там только можно с зажатым шифт зумить движением мыши.


Часовой пояс GMT +3, время: 14:29.