More Related Content
Similar to パフォーマンスの良いGASの書き方 Best Practice (20)
パフォーマンスの良いGASの書き方 Best Practice
- 28. 以下のコードをSpreadsheet上のGASで実行すれば作れます。
今回の処理
var arr = ["hoge", "fuga", "foo", "bar" , "bus", "あいうえお", "かきくけこ"];
function make() {
var grid = [];
var header = [];
for (var c = 0; c < 100; c++) {
header.push(c + 1);
}
grid.push(header);
for (var r = 1; r < 101; r++) {
var row = [];
for (var c = 0; c < 100; c++) {
row.push(arr[Math.floor(Math.random() * arr.length)]);
}
grid.push(row);
}
SpreadsheetApp.getActiveSheet().getRange(1, 1, 101, 100).clear().setValues(grid);
}
- 30. function badCode() {
var spreadsheet =
SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1kzi8pXTZZrABgTGbJFqS
ZrCHMCRL-LEEqQK2n4yQO-o/edit#gid=0");
for(var row = 2; row <= 101; row++) {
for(var col = 1; col <= 100; col++) {
var value = spreadsheet.getSheetByName("シート1").getRange(row, col).getValue();
if (value == "hoge") {
spreadsheet.getSheetByName("シート1").getRange(row, col).setBackground("yellow");
}
}
}
}
悪いコード
- 32. function goodCode() {
var spreadsheet = SpreadsheetApp.openById("1kzi8pXTZZrABgTGbJFqSZrCHMCRL-LEEqQK2n4yQO-o");
var backgrounds = [];
var sheet = spreadsheet.getSheetByName("シート1");
var targetRange = sheet.getRange(2, 1, 100, 100);
var values = targetRange.getValues();
for(var rowIndex = 0; rowIndex < values.length; rowIndex++) {
var row = values[rowIndex];
var backgroundRow = [];
for(var colIndex = 0; colIndex < row.length; colIndex++) {
var value = row[colIndex];
if (value == "hoge") {
backgroundRow.push("yellow");
} else {
backgroundRow.push("");
}
}
backgrounds.push(backgroundRow);
}
targetRange.setBackgrounds(backgrounds);
}
良いコード
- 38. function badCode() {
var spreadsheet =
SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1kzi8pXTZZrABgTGbJFqS
ZrCHMCRL-LEEqQK2n4yQO-o/edit#gid=0");
for(var row = 2; row <= 101; row++) {
for(var col = 1; col <= 100; col++) {
var value = spreadsheet.getSheetByName("シート1").getRange(row, col).getValue();
if (value == "hoge") {
spreadsheet.getSheetByName("シート1").getRange(row, col).setBackground("yellow");
}
}
}
}
②減らす
- 39. function badCode() {
var spreadsheet =
SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1kzi8pXTZZrABgTGbJFqSZrCHMCRL-
LEEqQK2n4yQO-o/edit#gid=0");
var sheet = spreadsheet.getSheetByName("シート1");
for(var row = 2; row <= 101; row++) {
for(var col = 1; col <= 100; col++) {
var range = sheet.getRange(row, col);
var value = range.getValue();
if (value == "hoge") {
range.setBackground("yellow");
}
}
}
}
②減らす
- 43. function badCode() {
var spreadsheet =
SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1kzi8pXTZZrABgTGbJFqSZrCHMCRL-
LEEqQK2n4yQO-o/edit#gid=0");
var sheet = spreadsheet.getSheetByName("シート1");
for(var row = 2; row <= 101; row++) {
for(var col = 1; col <= 100; col++) {
var range = sheet.getRange(row, col);
var value = range.getValue();
if (value == "hoge") {
range.setBackground("yellow");
}
}
}
}
③1度にする
- 44. function badCode() {
var spreadsheet = SpreadsheetApp
.openByUrl("https://docs.google.com/spreadsheets/d/1kzi8pXTZZrABgTGbJFqSZrCHMCRL-LEEqQK2n4yQO-o/edit#gid=0");
var backgrounds = [];
var sheet = spreadsheet.getSheetByName("シート1");
var targetRange = sheet.getRange(2, 1, 100, 100);
var values = targetRange.getValues();
for(var rowIndex = 0; rowIndex < values.length; rowIndex++) {
var row = values[rowIndex];
var backgroundRow = [];
for(var colIndex = 0; colIndex < row.length; colIndex++) {
var value = range.getValue();
if (value == "hoge") {
backgrounds.push("yellow");
} else {
backgrounds.push(“");
}
}
backgrounds.push(backgroundRow);
}
targetRange.setBackgrounds(backgrounds);
}
③1度にする
- 55. • 基本的には
– データの取得は非同期に行う
• doGet内などHtmlService呼び出し前に行わない
– <html>,<head>,<body>タグなどは利用しない
• cajaにより自動的に<caja-v-html>に変えられるので意味が無い
• 変えられる分時間がかかるので使わない
– Javascriptは最後に読み込む
• <script>タグはファイルの一番末尾に書いておく
• そのほうが画面が表示されてからクライアントサイドのJavascriptが実行される
HtmlService
- 56. • 大橋の感覚として
– 外部のJSやCSSは使わない方が良い
• 使う場合は<script src=“xxx”>とはせず、<script>ここにコピペ</script>して、埋
め込んでしまう。
• cajaはGoogle経由で外部JS、CSSを取得するので遅い
– 画面遷移はJavascriptを使って一部分だけ切り替える
• doGetを毎回すると遅い
• SPA(Single Page Application)の様にJSで画面を切り替えたほうが速い
• というより画面切り替えはしないほうが良い
HtmlService
Editor's Notes
- https://docs.google.com/spreadsheets/d/1kzi8pXTZZrABgTGbJFqSZrCHMCRL-LEEqQK2n4yQO-o/edit#gid=0
- https://docs.google.com/spreadsheets/d/1kzi8pXTZZrABgTGbJFqSZrCHMCRL-LEEqQK2n4yQO-o/edit#gid=0
- https://docs.google.com/spreadsheets/d/1kzi8pXTZZrABgTGbJFqSZrCHMCRL-LEEqQK2n4yQO-o/edit#gid=0
- https://docs.google.com/spreadsheets/d/1kzi8pXTZZrABgTGbJFqSZrCHMCRL-LEEqQK2n4yQO-o/edit#gid=0