সর্বোত্তম অনুশীলন

এই নথিতে স্ক্রিপ্টের কর্মক্ষমতা উন্নত করার সর্বোত্তম পদ্ধতিগুলো তালিকাভুক্ত করা হয়েছে।

অন্যান্য পরিষেবাগুলিতে কলের সংখ্যা কমান।

আপনার স্ক্রিপ্টের মধ্যে জাভাস্ক্রিপ্ট অপারেশন ব্যবহার করা অন্যান্য সার্ভিস কল করার চেয়ে দ্রুততর। গুগল অ্যাপস স্ক্রিপ্টের মধ্যেই আপনি যা কিছু করেন, তা গুগলের সার্ভার বা কোনো বাহ্যিক সার্ভার, যেমন শীটস, ডকস, সাইটস, ট্রান্সলেট এবং ইউআরএলফেচ-এ পাঠানো রিকোয়েস্ট থেকে ডেটা আনার চেয়ে দ্রুততর। আপনি সার্ভিস কল কমিয়ে আনলে আপনার স্ক্রিপ্টগুলো আরও দ্রুত চলবে।

শেয়ার করা ড্রাইভ ব্যবহার করে সহযোগিতা করুন

আপনি যদি অন্যান্য ডেভেলপারদের সাথে কোনো স্ক্রিপ্ট প্রজেক্টে কাজ করেন, তবে শেয়ার্ড ড্রাইভ ব্যবহার করে সহযোগিতা করুন । শেয়ার্ড ড্রাইভের ফাইলগুলোর মালিকানা কোনো ব্যক্তির না হয়ে পুরো গ্রুপের থাকে, যা প্রজেক্টের উন্নয়ন এবং রক্ষণাবেক্ষণকে সহজ করে তোলে।

ব্যাচ অপারেশন ব্যবহার করুন

স্ক্রিপ্টগুলো সাধারণত স্প্রেডশিট থেকে ডেটা পড়ে, গণনা করে এবং ফলাফল লিখে দেয়। অ্যাপস স্ক্রিপ্ট লুক-অ্যাহেড এবং রাইট ক্যাশিং-এর মতো বিল্ট-ইন অপটিমাইজেশন ব্যবহার করে।

রিড এবং রাইট অপারেশন কমিয়ে বিল্ট-ইন ক্যাশিং-এর সর্বোচ্চ ব্যবহার করুন। পর্যায়ক্রমে রিড এবং রাইট কমান্ড ব্যবহার করা ধীরগতির। একটি স্ক্রিপ্টের গতি বাড়াতে, একটিমাত্র কমান্ড দিয়ে সমস্ত ডেটা একটি অ্যারেতে রিড করুন, অ্যারের ডেটার উপর অপারেশন সম্পাদন করুন এবং একটিমাত্র কমান্ড দিয়ে ডেটাটি রাইট করে দিন।

এই অদক্ষ উদাহরণে দেখানো অনুযায়ী পর্যায়ক্রমিক রিড এবং রাইট পরিহার করুন:

// DO NOT USE THIS CODE. It is an example of SLOW, INEFFICIENT code.
// FOR DEMONSTRATION ONLY
var cell = sheet.getRange('a1');
for (var y = 0; y < 100; y++) {
  xcoord = xmin;
  for (var x = 0; x < 100; x++) {
    var c = getColorFromCoordinates(xcoord, ycoord);
    cell.offset(y, x).setBackgroundColor(c);
    xcoord += xincrement;
  }
  ycoord -= yincrement;
  SpreadsheetApp.flush();
}

স্ক্রিপ্টটি অদক্ষ, কারণ এটি পরপর লেখার মাধ্যমে ১০,০০০টি সেলের মধ্যে লুপ চালায়। যদিও রাইট-ব্যাক ক্যাশে সাহায্য করে, কলগুলোকে ব্যাচিং করা অনেক বেশি কার্যকর:

// OKAY TO USE THIS EXAMPLE or code based on it.
var cell = sheet.getRange('a1');
var colors = new Array(100);
for (var y = 0; y < 100; y++) {
  xcoord = xmin;
  colors[y] = new Array(100);
  for (var x = 0; x < 100; x++) {
    colors[y][x] = getColorFromCoordinates(xcoord, ycoord);
    xcoord += xincrement;
  }
  ycoord -= yincrement;
}
sheet.getRange(1, 1, 100, 100).setBackgrounds(colors);

অদক্ষ কোডটি চলতে প্রায় ৭০ সেকেন্ড সময় নেয়, অন্যদিকে দক্ষ কোডটি মাত্র ১ সেকেন্ডে চলে।

UI-নির্ভর স্ক্রিপ্টে লাইব্রেরি ব্যবহার করা এড়িয়ে চলুন

কোড পুনঃব্যবহারের জন্য লাইব্রেরি সুবিধাজনক হলেও, এগুলো স্ক্রিপ্ট চালু হওয়ার সময় বাড়িয়ে দেয়। এই বিলম্বটি ক্লায়েন্ট-সাইড এইচটিএমএল সার্ভিস ইউজার ইন্টারফেসে বিশেষভাবে লক্ষণীয়, যেখানে বারবার অল্প সময়ের জন্য google.script.run কল করা হয়। অ্যাড-অনগুলিতে লাইব্রেরি পরিমিতভাবে ব্যবহার করুন এবং যেসব স্ক্রিপ্টে অনেকবার google.script.run কল করা হয়, সেখানে এগুলো পরিহার করুন।

ক্যাশে পরিষেবা ব্যবহার করুন

স্ক্রিপ্ট নির্বাহের মধ্যবর্তী সময়ে রিসোর্স ক্যাশ করার জন্য ক্যাশ সার্ভিস ব্যবহার করুন। ক্যাশিং ডেটা সংগ্রহের পুনরাবৃত্তি কমিয়ে দেয়। নিচের উদাহরণটিতে দেখানো হয়েছে, কীভাবে একটি ধীরগতির আরএসএস ফিডে দ্রুত অ্যাক্সেস পাওয়ার জন্য ক্যাশ সার্ভিস ব্যবহার করতে হয়।

function getRssFeed() {
  var cache = CacheService.getScriptCache();
  var cached = cache.get("rss-feed-contents");
  if (cached != null) {
    return cached;
  }
  // This fetch takes 20 seconds:
  var result = UrlFetchApp.fetch("http://example.com/my-slow-rss-feed.xml");
  var contents = result.getContentText();
  cache.put("rss-feed-contents", contents, 1500); // cache for 25 minutes
  return contents;
}

আইটেমটি ক্যাশে না থাকলে আপনাকে ২০ সেকেন্ড অপেক্ষা করতে হলেও, সেটির মেয়াদ শেষ না হওয়া পর্যন্ত পরবর্তী অ্যাক্সেসগুলো দ্রুত হয়।

বৃহৎ ডেটাসেট এবং জটিল গণনা

গুগল শিটস একটি শক্তিশালী টুল, কিন্তু ডেটাসেট বড় হওয়ার সাথে সাথে এবং গণনা আরও জটিল হয়ে উঠলে, আপনি স্প্রেডশিট ল্যাগ, IMPORTRANGE এরর এবং স্ক্রিপ্ট টাইমআউটের মতো পারফরম্যান্স সংক্রান্ত সমস্যার সম্মুখীন হতে পারেন।

কখন ডাটাবেস ব্যবহার করতে হবে

যদি আপনার স্প্রেডশিটে ১০ মিলিয়ন সেলের সীমা প্রায় পূর্ণ হয়ে যায় অথবা যদি আপনার অনেকগুলো সংযুক্ত ফর্ম (যেমন, ১০ বা তার বেশি) এবং জটিল ক্রস-শিট ফর্মুলা থাকে, তাহলে একটি ডেডিকেটেড ডেটাবেস সলিউশন ব্যবহার করার কথা বিবেচনা করুন।

  • গুগল ক্লাউড এসকিউএল : MySQL, PostgreSQL, এবং SQL Server-এর জন্য একটি সম্পূর্ণভাবে পরিচালিত রিলেশনাল ডেটাবেস পরিষেবা। ক্লাউড এসকিউএল অথবা ওরাকল বা মঙ্গোডিবি-র মতো অন্যান্য বাহ্যিক ডেটাবেসের সাথে (উপযুক্ত ব্রিজের মাধ্যমে) সংযোগ করতে JDBC পরিষেবাটি ব্যবহার করুন।
  • BigQuery : একটি সার্ভারবিহীন, অত্যন্ত স্কেলেবল ডেটা ওয়্যারহাউস। আপনি Connected Sheets ব্যবহার করে সরাসরি Sheets-এ বিশাল BigQuery ডেটাসেট বিশ্লেষণ করতে পারেন, অথবা Apps Script থেকে ডেটার সাথে ইন্টারঅ্যাক্ট করার জন্য BigQuery সার্ভিস ব্যবহার করতে পারেন।

ফর্মুলার কর্মক্ষমতা অপ্টিমাইজেশন

কিছু নির্দিষ্ট ফর্মুলার অতিরিক্ত ব্যবহার আপনার স্প্রেডশিটের গতি কমিয়ে দিতে পারে:

  • অ্যারেফর্মুলা : যদিও দরকারী, বড় আকারের ARRAYFORMULA গণনা ব্যয়বহুল হতে পারে।
  • VLOOKUP এবং OFFSET : বড় ডেটাসেটের ক্ষেত্রে এই ফাংশনগুলো ধীরগতির হতে পারে। মেমরিতে আরও দক্ষতার সাথে লুকআপ করার জন্য INDEXMATCH অথবা অ্যাপস স্ক্রিপ্ট ব্যবহার করার কথা বিবেচনা করুন।
  • IMPORTRANGE : অনেকগুলো শীটে IMPORTRANGE এর ঘন ঘন ব্যবহারের ফলে "অভ্যন্তরীণ ত্রুটি" (Internal Errors) দেখা দিতে পারে, বিশেষ করে যদি উৎস শীটগুলো বড় হয় বা সেগুলোর ওপর অতিরিক্ত চাপ থাকে। ডেটা একটি কেন্দ্রীভূত উৎসে একত্রিত করলে এক্ষেত্রে সাহায্য হতে পারে।

স্ক্রিপ্ট টাইমআউট হ্যান্ডলিং

অ্যাপস স্ক্রিপ্টের নির্বাহের সময়সীমা থাকে (সাধারণত প্রতিবার নির্বাহের জন্য ৬ মিনিট, অথবা কিছু গুগল ওয়ার্কস্পেস অ্যাকাউন্টের জন্য ৩০ মিনিট)। যদি আপনার স্ক্রিপ্ট নির্বাহের সীমা অতিক্রম করার কারণে ঘন ঘন ক্র্যাশ করে:

  1. ব্যাচ অপারেশন ব্যবহার করুন : ‘ব্যাচ অপারেশন ব্যবহার করুন’ অংশে যেমন উল্লেখ করা হয়েছে, স্প্রেডশীট এবং অন্যান্য পরিষেবাগুলিতে কল যথাসম্ভব কমিয়ে আনুন।
  2. কাজ ভাগ করুন : বড় কাজকে ছোট ছোট অংশে ভাগ করুন, যাতে প্রতিটি অংশ নির্দিষ্ট সময়ের মধ্যে সম্পন্ন করা যায়।
  3. ধারাবাহিকতার জন্য ট্রিগার ব্যবহার করুন : একটি দীর্ঘ-চলমান প্রক্রিয়া পুনরায় শুরু করতে একটি ইনস্টলযোগ্য সময়-চালিত ট্রিগার সেট আপ করুন। আপনার স্ক্রিপ্ট Properties পরিষেবা ব্যবহার করে তার বর্তমান অবস্থা (যেমন, সর্বশেষ প্রক্রিয়াকৃত সারির সূচক) সংরক্ষণ করতে পারে এবং পরবর্তী নির্বাহে সেই বিন্দু থেকে চালিয়ে যেতে পারে।