Scribble Maps Blog
ਡਿਵੈਲਪਰਸ: Autocomplete ਨਾਲ Google API ਕ੍ਰੈਡਿਟਸ ਬਚਾਉਣਾ
ਗੂਗਲ ਦੀ ਨਵੀਂ API ਕੀਮਤ ਨਿਰਧਾਰਨ ਨਾਲ ਬਹੁਤ ਸਾਰੇ ਜੇਤੂ ਹਨ। ਹਾਲਾਂਕਿ, ਜੇਕਰ ਤੁਹਾਡੀ ਐਪ ਮੈਪਿੰਗ ਕਾਰਜਕੁਸ਼ਲਤਾ ਦੇ ਪੂਰੇ ਸੂਟ ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੀ ਹੈ ਅਤੇ ਤੁਹਾਡੇ ਕੋਲ ਬਹੁਤ ਸਾਰੇ ਉਪਭੋਗਤਾ ਹਨ ਤਾਂ ਤੁਸੀਂ ਦੇਖੋਗੇ ਕਿ ਤੁਹਾਡਾ ਪੂਲ ਤੇਜ਼ੀ ਨਾਲ ਘਟਣਾ ਸ਼ੁਰੂ ਹੋ ਜਾਵੇਗਾ। ਦੋ ਫੰਕਸ਼ਨ ਜੋ ਸਿੱਧੇ ਤੁਹਾਡੇ ਪੂਲ 'ਤੇ ਅਸਰ ਪਾਉਣਗੇ ਅਤੇ ਰੋਜ਼ਾਨਾ ਮੁਫਤ ਕੋਟੇ ਦੇ ਅਧੀਨ ਨਹੀਂ ਹਨ, ਉਹ ਹਨ autocomplete ਅਤੇ place search।
ਜੇਕਰ ਤੁਸੀਂ Scribble Maps API ਦੇ ਨਾਲ ਆਪਣੇ Google ਲਾਇਸੈਂਸ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ ਤਾਂ ਅਸੀਂ ਇਹਨਾਂ ਵਿੱਚੋਂ ਕੁਝ ਅਨੁਕੂਲਤਾਵਾਂ ਨੂੰ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਕਰ ਦਿੰਦੇ ਹਾਂ, ਪਰ ਜੇਕਰ ਤੁਸੀਂ ਸਿੱਧੇ Google Maps API ਦੇ ਉੱਪਰ ਆਪਣਾ ਖੁਦ ਦਾ ਕਸਟਮ ਇੰਪਲੀਮੈਂਟੇਸ਼ਨ ਬਣਾ ਰਹੇ ਹੋ, ਤਾਂ ਇੱਕ ਸਧਾਰਨ ਅਪਡੇਟ ਹੈ ਜੋ ਤੁਸੀਂ ਕੁਝ autocomplete ਕ੍ਰੈਡਿਟ ਬਚਾਉਣ ਲਈ ਕਰ ਸਕਦੇ ਹੋ।
ਸਟੈਂਡਰਡ ਆਟੋ-ਕੰਪਲੀਟ ਕਾਰਜਕੁਸ਼ਲਤਾ ਇਨਪੁਟ ਵਿੱਚ ਹਰ ਬਦਲਾਅ ਦੇ ਨਾਲ ਇੱਕ ਆਟੋ-ਕੰਪਲੀਟ ਬੇਨਤੀ ਭੇਜੇਗੀ। ਇਨਪੁਟ ਬਦਲਣ 'ਤੇ ਟਾਈਮਆਊਟ ਲਗਾ ਕੇ ਵਰਤੇ ਗਏ ਕ੍ਰੈਡਿਟ ਦੀ ਮਾਤਰਾ ਨੂੰ ਕਾਫ਼ੀ ਹੱਦ ਤੱਕ ਘਟਾਉਣਾ ਸੰਭਵ ਹੈ।
ਇੱਥੇ ਇੱਕ ਬਹੁਤ ਹੀ ਬੁਨਿਆਦੀ ਉਦਾਹਰਣ ਹੈ।
ਇਸ ਲਈ ਹਰ ਵਾਰ ਜਦੋਂ ਕੋਈ ਉਪਭੋਗਤਾ ਇਨਪੁਟ ਵਿੱਚ ਟਾਈਪ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ ਤਾਂ ਆਟੋਕੰਪਲੀਟ ਉਦੋਂ ਤੱਕ ਫਾਇਰ ਨਹੀਂ ਹੋਵੇਗਾ ਜਦੋਂ ਤੱਕ ਇੱਕ ਪਲ ਦੀ ਦੇਰੀ ਨਹੀਂ ਹੁੰਦੀ। ਆਟੋਕੰਪਲੀਟ ਨੂੰ ਹੋਰ ਅਕਸਰ ਫਾਇਰ ਕਰਨ ਲਈ 250ms ਦੀ ਦੇਰੀ ਨੂੰ ਘਟਾਇਆ ਜਾ ਸਕਦਾ ਹੈ। ਜੇਕਰ ਉਪਭੋਗਤਾ ਤੇਜ਼ੀ ਨਾਲ "Toronto" ਟਾਈਪ ਕਰਦਾ ਹੈ, ਤਾਂ ਉਪਭੋਗਤਾ ਦੇ ਰੁਕਣ 'ਤੇ 8 ਦੀ ਬਜਾਏ ਸਿਰਫ ਇੱਕ ਆਟੋ-ਕੰਪਲੀਟ ਕਾਲ ਚਲਾਈ ਜਾਵੇਗੀ।
ਅਸੀਂ ਪਾਇਆ ਹੈ ਕਿ ਸਮਾਂਬੱਧ ਦੇਰੀ ਸਭ ਤੋਂ ਵਧੀਆ ਕੰਮ ਕਰਦੀ ਹੈ। ਇਸਦਾ ਇੱਕ ਮਹੱਤਵਪੂਰਨ ਨੁਕਤਾ ਇਹ ਯਕੀਨੀ ਬਣਾਉਣਾ ਹੈ ਕਿ ਉਪਭੋਗਤਾ ਇੰਟਰਫੇਸ ਇਹ ਦਰਸਾਉਂਦਾ ਹੈ ਕਿ ਜਿਵੇਂ ਉਹ ਟਾਈਪ ਕਰ ਰਹੇ ਹਨ ਇੱਕ ਖੋਜ ਚੱਲ ਰਹੀ ਹੈ। ਸਾਡੇ ਕੇਸ ਵਿੱਚ ਅਸੀਂ ਇੱਕ ਐਨੀਮੇਟਡ ਸਪਿਨਰ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਾਂ। ਇਸ ਤਰ੍ਹਾਂ ਜੇਕਰ ਉਪਭੋਗਤਾ ਤੇਜ਼ੀ ਨਾਲ ਟਾਈਪ ਕਰ ਰਿਹਾ ਹੈ ਅਤੇ ਨਤੀਜੇ ਨਹੀਂ ਦੇਖ ਰਿਹਾ ਹੈ, ਤਾਂ ਐਨੀਮੇਟਡ ਸਪਿਨਰ ਉਹਨਾਂ ਨੂੰ ਨਤੀਜੇ ਦੇਖਣ ਲਈ ਲੋੜੀਂਦਾ ਵਿਰਾਮ ਦੇਵੇਗਾ।
ਇਹ ਨੋਟ ਕੀਤਾ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ ਕਿ ਇਸਨੂੰ ਲਾਗੂ ਕਰਨਾ ਉਹਨਾਂ ਦੀਆਂ ਵਰਤੋਂ ਦੀਆਂ ਮੌਜੂਦਾ ਸ਼ਰਤਾਂ ਦੇ ਅਨੁਕੂਲ ਹੈ। ਇਹ ਵਿਧੀ ਅਸਲ ਵਿੱਚ ਉਪਭੋਗਤਾ ਵੱਲੋਂ ਆਉਣ ਵਾਲੀਆਂ ਆਊਟਬਾਊਂਡ ਆਟੋਕੰਪਲੀਟ ਕਾਲਾਂ ਦੀ ਮਾਤਰਾ ਨੂੰ ਨਿਯੰਤਰਿਤ (throttle) ਕਰਦੀ ਹੈ।
ਜੇਕਰ ਤੁਸੀਂ Scribble Maps API ਦੇ ਨਾਲ ਆਪਣੇ Google ਲਾਇਸੈਂਸ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ ਤਾਂ ਅਸੀਂ ਇਹਨਾਂ ਵਿੱਚੋਂ ਕੁਝ ਅਨੁਕੂਲਤਾਵਾਂ ਨੂੰ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਕਰ ਦਿੰਦੇ ਹਾਂ, ਪਰ ਜੇਕਰ ਤੁਸੀਂ ਸਿੱਧੇ Google Maps API ਦੇ ਉੱਪਰ ਆਪਣਾ ਖੁਦ ਦਾ ਕਸਟਮ ਇੰਪਲੀਮੈਂਟੇਸ਼ਨ ਬਣਾ ਰਹੇ ਹੋ, ਤਾਂ ਇੱਕ ਸਧਾਰਨ ਅਪਡੇਟ ਹੈ ਜੋ ਤੁਸੀਂ ਕੁਝ autocomplete ਕ੍ਰੈਡਿਟ ਬਚਾਉਣ ਲਈ ਕਰ ਸਕਦੇ ਹੋ।
ਸਟੈਂਡਰਡ ਆਟੋ-ਕੰਪਲੀਟ ਕਾਰਜਕੁਸ਼ਲਤਾ ਇਨਪੁਟ ਵਿੱਚ ਹਰ ਬਦਲਾਅ ਦੇ ਨਾਲ ਇੱਕ ਆਟੋ-ਕੰਪਲੀਟ ਬੇਨਤੀ ਭੇਜੇਗੀ। ਇਨਪੁਟ ਬਦਲਣ 'ਤੇ ਟਾਈਮਆਊਟ ਲਗਾ ਕੇ ਵਰਤੇ ਗਏ ਕ੍ਰੈਡਿਟ ਦੀ ਮਾਤਰਾ ਨੂੰ ਕਾਫ਼ੀ ਹੱਦ ਤੱਕ ਘਟਾਉਣਾ ਸੰਭਵ ਹੈ।
ਇੱਥੇ ਇੱਕ ਬਹੁਤ ਹੀ ਬੁਨਿਆਦੀ ਉਦਾਹਰਣ ਹੈ।
var acTimeOut;
textSearchInput.onkeyup = function() {
clearTimeout(acTimeout);
acTimeout = setTimeout(function() {
//put auto-complete calls in here
}, 250);
}
ਇਸ ਲਈ ਹਰ ਵਾਰ ਜਦੋਂ ਕੋਈ ਉਪਭੋਗਤਾ ਇਨਪੁਟ ਵਿੱਚ ਟਾਈਪ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ ਤਾਂ ਆਟੋਕੰਪਲੀਟ ਉਦੋਂ ਤੱਕ ਫਾਇਰ ਨਹੀਂ ਹੋਵੇਗਾ ਜਦੋਂ ਤੱਕ ਇੱਕ ਪਲ ਦੀ ਦੇਰੀ ਨਹੀਂ ਹੁੰਦੀ। ਆਟੋਕੰਪਲੀਟ ਨੂੰ ਹੋਰ ਅਕਸਰ ਫਾਇਰ ਕਰਨ ਲਈ 250ms ਦੀ ਦੇਰੀ ਨੂੰ ਘਟਾਇਆ ਜਾ ਸਕਦਾ ਹੈ। ਜੇਕਰ ਉਪਭੋਗਤਾ ਤੇਜ਼ੀ ਨਾਲ "Toronto" ਟਾਈਪ ਕਰਦਾ ਹੈ, ਤਾਂ ਉਪਭੋਗਤਾ ਦੇ ਰੁਕਣ 'ਤੇ 8 ਦੀ ਬਜਾਏ ਸਿਰਫ ਇੱਕ ਆਟੋ-ਕੰਪਲੀਟ ਕਾਲ ਚਲਾਈ ਜਾਵੇਗੀ।
ਅਸੀਂ ਪਾਇਆ ਹੈ ਕਿ ਸਮਾਂਬੱਧ ਦੇਰੀ ਸਭ ਤੋਂ ਵਧੀਆ ਕੰਮ ਕਰਦੀ ਹੈ। ਇਸਦਾ ਇੱਕ ਮਹੱਤਵਪੂਰਨ ਨੁਕਤਾ ਇਹ ਯਕੀਨੀ ਬਣਾਉਣਾ ਹੈ ਕਿ ਉਪਭੋਗਤਾ ਇੰਟਰਫੇਸ ਇਹ ਦਰਸਾਉਂਦਾ ਹੈ ਕਿ ਜਿਵੇਂ ਉਹ ਟਾਈਪ ਕਰ ਰਹੇ ਹਨ ਇੱਕ ਖੋਜ ਚੱਲ ਰਹੀ ਹੈ। ਸਾਡੇ ਕੇਸ ਵਿੱਚ ਅਸੀਂ ਇੱਕ ਐਨੀਮੇਟਡ ਸਪਿਨਰ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਾਂ। ਇਸ ਤਰ੍ਹਾਂ ਜੇਕਰ ਉਪਭੋਗਤਾ ਤੇਜ਼ੀ ਨਾਲ ਟਾਈਪ ਕਰ ਰਿਹਾ ਹੈ ਅਤੇ ਨਤੀਜੇ ਨਹੀਂ ਦੇਖ ਰਿਹਾ ਹੈ, ਤਾਂ ਐਨੀਮੇਟਡ ਸਪਿਨਰ ਉਹਨਾਂ ਨੂੰ ਨਤੀਜੇ ਦੇਖਣ ਲਈ ਲੋੜੀਂਦਾ ਵਿਰਾਮ ਦੇਵੇਗਾ।
ਇਹ ਨੋਟ ਕੀਤਾ ਜਾਣਾ ਚਾਹੀਦਾ ਹੈ ਕਿ ਇਸਨੂੰ ਲਾਗੂ ਕਰਨਾ ਉਹਨਾਂ ਦੀਆਂ ਵਰਤੋਂ ਦੀਆਂ ਮੌਜੂਦਾ ਸ਼ਰਤਾਂ ਦੇ ਅਨੁਕੂਲ ਹੈ। ਇਹ ਵਿਧੀ ਅਸਲ ਵਿੱਚ ਉਪਭੋਗਤਾ ਵੱਲੋਂ ਆਉਣ ਵਾਲੀਆਂ ਆਊਟਬਾਊਂਡ ਆਟੋਕੰਪਲੀਟ ਕਾਲਾਂ ਦੀ ਮਾਤਰਾ ਨੂੰ ਨਿਯੰਤਰਿਤ (throttle) ਕਰਦੀ ਹੈ।